diff --git a/src/services/gitops/push-new.js b/src/services/gitops/push-new.js index b35559a..2d365c0 100644 --- a/src/services/gitops/push-new.js +++ b/src/services/gitops/push-new.js @@ -1,3 +1,4 @@ +import { EnvType } from '../../models/environment.js'; import { getComponents } from '../component.js'; import { createStrategy } from '../config-strategy.js'; import { addComponent, createConfig, getConfig } from '../config.js'; @@ -18,11 +19,15 @@ export async function processNew(domain, change, environment) { async function processNewGroup(domain, change, environment) { const admin = { _id: domain.owner }; const content = change.content; + + const activated = new Map().set(EnvType.DEFAULT, false); + activated.set(environment, getNewValue(content.activated, true)); + const group = await createGroup({ domain: domain._id, name: content.name, description: getNewValue(content.description, ''), - activated: new Map().set(environment, getNewValue(content.activated, true)), + activated, owner: domain.owner }, admin); @@ -42,12 +47,15 @@ async function processNewConfig(domain, change, environment) { const admin = { _id: domain.owner }; const group = await getGroupConfig({ domain: domain._id, name: path[0] }); + const activated = new Map().set(EnvType.DEFAULT, false); + activated.set(environment, getNewValue(content.activated, true)); + const newConfig = { domain: domain._id, group: group._id, key: content.key, description: getNewValue(content.description, ''), - activated: new Map().set(environment, getNewValue(content.activated, true)), + activated, owner: domain.owner, }; diff --git a/tests/gitops.test.js b/tests/gitops.test.js index c7ec94c..0d4dc8c 100644 --- a/tests/gitops.test.js +++ b/tests/gitops.test.js @@ -112,6 +112,39 @@ describe('GitOps - Push New', () => { expect(group.description).toBe('New Group Description'); }); + test('GITOPS_SUITE - Should push changes - New Group for environment', async () => { + const token = generateToken('30s'); + + const lastUpdate = Date.now(); + const req = await request(app) + .post('/gitops/v1/push') + .set('Authorization', `Bearer ${token}`) + .send({ + environment: 'staging', + changes: [{ + action: 'NEW', + diff: 'GROUP', + path: [], + content: { + name: 'New Group Staging', + description: 'New Group Description', + activated: true + } + }] + }) + .expect(200); + + expect(req.body.message).toBe('Changes applied successfully'); + expect(req.body.version).toBeGreaterThan(lastUpdate); + + // Check if the changes were applied + const group = await GroupConfig.findOne({ name: 'New Group Staging', domain: domainId }).lean().exec(); + expect(group).not.toBeNull(); + expect(group.activated['staging']).toBe(true); + expect(group.activated[EnvType.DEFAULT]).toBeDefined(); + expect(group.description).toBe('New Group Description'); + }); + test('GITOPS_SUITE - Should push changes - New Group and Switcher', async () => { const token = generateToken('30s'); @@ -189,6 +222,40 @@ describe('GitOps - Push New', () => { expect(config.components).toHaveLength(0); }); + test('GITOPS_SUITE - Should push changes - New Switcher for environment', async () => { + const token = generateToken('30s'); + + const lastUpdate = Date.now(); + const req = await request(app) + .post('/gitops/v1/push') + .set('Authorization', `Bearer ${token}`) + .send({ + environment: 'staging', + changes: [{ + action: 'NEW', + diff: 'CONFIG', + path: [ + 'Group Test' + ], + content: { + key: 'NEW_SWITCHER_STAGING', + activated: true + } + }] + }) + .expect(200); + + expect(req.body.message).toBe('Changes applied successfully'); + expect(req.body.version).toBeGreaterThan(lastUpdate); + + // Check if the changes were applied + const config = await Config.findOne({ key: 'NEW_SWITCHER_STAGING', domain: domainId }).lean().exec(); + expect(config).not.toBeNull(); + expect(config.activated['staging']).toBe(true); + expect(config.activated[EnvType.DEFAULT]).toBeDefined(); + expect(config.components).toHaveLength(0); + }); + test('GITOPS_SUITE - Should push changes - New Switcher and Relay', async () => { const token = generateToken('30s');