From 3490dc862b4bc6037e77e9b840788ecbdf3878b0 Mon Sep 17 00:00:00 2001 From: Thiago Date: Wed, 22 Jul 2020 12:50:49 -0300 Subject: [PATCH] Unit tests for stack.ts (#53) --- src/cdk/stack.test.ts | 118 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 src/cdk/stack.test.ts diff --git a/src/cdk/stack.test.ts b/src/cdk/stack.test.ts new file mode 100644 index 0000000..a1d136b --- /dev/null +++ b/src/cdk/stack.test.ts @@ -0,0 +1,118 @@ +import { MiraServiceStack, MiraStack } from './stack' +import { MiraApp } from './app' +import { MiraConfig } from '../config/mira-config' +import { Stack, CfnOutput, Tag } from '@aws-cdk/core' + +jest.mock('@aws-cdk/core', () => ({ + ...jest.requireActual('@aws-cdk/core'), + CfnOutput: jest.fn() +})) + +MiraConfig.getEnvironment = jest.fn().mockReturnValue({ + env: { + account: '101259067028', + region: 'eu-west-1' + }, + profile: 'mira-dev', + name: 'default' +}) + +describe('MiraServiceStack', () => { + const app = new MiraApp() + + it('applyPolicies calls applyAspect', () => { + const miraServiceStackInstance = new MiraServiceStack(app, 'env') + miraServiceStackInstance.node.applyAspect = jest.fn() + expect(miraServiceStackInstance.applyPolicies([])).toEqual(undefined) + expect(miraServiceStackInstance.node.applyAspect).toBeCalledTimes(1) + }) + + it('has app initialized', async () => { + const miraServiceStackInstance = new MiraServiceStack(app, 'env', 'sufix') + expect(await miraServiceStackInstance.initialize()).toEqual(undefined) + expect(await miraServiceStackInstance.initialized).toBe(undefined) + }) +}) + +describe('MiraStack', () => { + afterEach(() => { + jest.clearAllMocks() + }) + + const stack = new Stack() + + it('has app initialized', async () => { + const miraStackInstance = new MiraStack(stack, 'Default', {}) + expect(await miraStackInstance.initialize()).toEqual(undefined) + expect(await miraStackInstance.initialized).toBe(undefined) + expect(miraStackInstance.parent).toBe(stack) + expect(miraStackInstance.name).toBe('Default') + }) + + it('addOutput without shouldExport calls CfnOutput one time', async () => { + const miraStackInstance = new MiraStack(stack) + expect( + await miraStackInstance.addOutput('DefaultStack', 'value', false) + ).toEqual(undefined) + expect(miraStackInstance.parent).toBe(stack) + expect(miraStackInstance.name).toBe('DefaultStack') + expect(CfnOutput).toBeCalledTimes(1) + }) + + it('addOutput with shouldExport calls CfnOutput two times', async () => { + const miraStackInstance = new MiraStack(stack) + expect(await miraStackInstance.addOutput('DefaultStack', 'value')).toEqual( + undefined + ) + expect(CfnOutput).toBeCalledTimes(2) + }) + + it('creates StringParameter correctly', async () => { + const miraStackInstance = new MiraStack(stack) + const res = await miraStackInstance.createParameter( + 'Fullname', + 'description', + 'value' + ) + expect(res.toString().split('/')[1]).toBe('DefaultStackFullnameParameter') + }) + + it('loadParameter with fullName divided by / corretly', async () => { + const miraStackInstance = new MiraStack(stack) + const res = await miraStackInstance.loadParameter('Full/Name') + expect(res.parameterName).toBe('/default/Full/Name') + expect(res.toString().split('/')[1]).toBe('FullNameParameter') + }) + + it('loadParameter with environment and fullName', async () => { + const miraStackInstance = new MiraStack(stack, 'Default') + const res = await miraStackInstance.loadParameter('Fullname') + expect(res.parameterName).toBe('/default/Default/Fullname') + expect(res.toString().split('/')[1]).toBe('DefaultFullnameParameter') + }) +}) + +describe('MiraStack Tags', () => { + afterEach(() => { + jest.clearAllMocks() + }) + + it('Adds default tags', async () => { + Tag.add = jest.fn() + const app = new MiraApp() + const miraStackInstance = new MiraServiceStack(app, 'env') + await miraStackInstance.initialized + + expect(Tag.add).toHaveBeenCalledTimes(2) + }) + + it('Adds default tags and cost center', async () => { + Tag.add = jest.fn() + MiraConfig.getCostCenter = jest.fn().mockReturnValue('123') + const app = new MiraApp() + const miraStackInstance = new MiraServiceStack(app, 'env') + await miraStackInstance.initialized + + expect(Tag.add).toHaveBeenCalledTimes(3) + }) +})