UNPKG

samtsc

Version:

This project was put together to make working with the AWS SAM framework easier for developers. It simplifies working with the SAM framework, using real-time updates to lambda functions, layers and resources. This is done by **samtsc** connecting to the

177 lines (172 loc) 7.22 kB
const fs = require('../file-system'); const cp = require('child_process'); const existsSync = jest.fn(); const writeFileSync = jest.fn(); const readFileSync = jest.fn(); const execSync = jest.fn(); const mkdir = jest.fn(); const originalExistsSync = fs.existsSync; const originalWriteFileSync = fs.writeFileSync; const originalMkdir = fs.mkdir; const originalReadFileSync = fs.readFileSync; const originalExecSync = cp.execSync; const { logger } = require('../logger'); logger.samconfig = {}; describe('Unit: SAMLayer', () => { describe('Construct packages', () => { beforeEach(() => { jest.resetAllMocks(); fs.existsSync = existsSync; fs.writeFileSync = writeFileSync; fs.mkdir = mkdir; fs.readFileSync = readFileSync; cp.execSync = execSync; }); afterEach(() => { fs.existsSync = originalExistsSync; fs.writeFileSync = originalWriteFileSync; fs.mkdir = originalMkdir; fs.readFileSync = originalReadFileSync; cp.execSync = originalExecSync; }); test('Basic Layer', () => { const { SAMLayer } = require('./layer'); existsSync.mockReturnValue(true); readFileSync.mockReturnValueOnce(JSON.stringify({ name: 'stack-layer', version: '1.0.0' })); readFileSync.mockReturnValueOnce(JSON.stringify({ "name": "samtsc", "version": "1.0.49", "lockfileVersion": 1, "requires": true })); const layer = new SAMLayer('src-layer', { ContentUri: 'src/layer' }, { BuildMethod: 'nodejs12.x'}, 'test-stack', '.', { debug: true }); expect(layer.sourcePath).toBe('src/layer'); expect(layer.libs.length).toBe(0); expect(execSync).toBeCalledTimes(0); expect(writeFileSync).toBeCalledTimes(1); }); test('Layer w/ library', () => { const { SAMLayer } = require('./layer'); existsSync.mockReturnValue(true); readFileSync.mockReturnValueOnce(JSON.stringify({ name: 'stack-layer', version: '1.0.0', dependencies: { 'library': 'file:../library' } })); readFileSync.mockReturnValueOnce(JSON.stringify({ "name": "samtsc", "version": "1.0.49", "lockfileVersion": 1, "requires": true, dependencies: { 'library': { version: 'file:../library' } } })); readFileSync.mockReturnValueOnce(JSON.stringify({})); const layer = new SAMLayer('src-layer', { ContentUri: 'src/layer' }, { BuildMethod: 'nodejs12.x'}, 'test-stack', '.', { debug: true }); expect(layer.sourcePath).toBe('src/layer'); expect(layer.libs.length).toBe(1); expect(layer.libs[0].path).toBe('src/library'); expect(writeFileSync).toBeCalledTimes(1); }); test('Stack Layer w/ library', () => { const { SAMLayer } = require('./layer'); existsSync.mockReturnValue(true); readFileSync.mockReturnValueOnce(JSON.stringify({ name: 'stack-layer', version: '1.0.0', dependencies: { 'library': 'file:../library' } })); readFileSync.mockReturnValueOnce(JSON.stringify({ "name": "samtsc", "version": "1.0.49", "lockfileVersion": 1, "requires": true, dependencies: { 'library': { version: 'file:../library' } } })); readFileSync.mockReturnValueOnce(JSON.stringify({ name: 'stack-layer', version: '1.0.0', dependencies: { 'library2': 'file:src/library2' } })); readFileSync.mockReturnValueOnce(JSON.stringify({})); readFileSync.mockReturnValueOnce(JSON.stringify({})); const layer = new SAMLayer('src-layer', { ContentUri: 'src/layer' }, { BuildMethod: 'nodejs12.x'}, 'test-stack', '.', { debug: true, stack_reference_layer: 'src-layer' }); expect(layer.sourcePath).toBe('src/layer'); expect(layer.libs.length).toBe(0); expect(writeFileSync).toBeCalledTimes(1); }); test('Root Layer w/ library', () => { const { SAMLayer } = require('./layer'); existsSync.mockReturnValue(true); readFileSync.mockReturnValueOnce(JSON.stringify({ name: 'stack-layer', version: '1.0.0', dependencies: { 'library': 'file:src/library' } })); readFileSync.mockReturnValueOnce(JSON.stringify({ "name": "samtsc", "version": "1.0.49", "lockfileVersion": 1, "requires": true, dependencies: { 'library': { version: 'file:src/library' } } })); readFileSync.mockReturnValueOnce(JSON.stringify({})); const layer = new SAMLayer('src-layer', { ContentUri: '.' }, { BuildMethod: 'nodejs12.x'}, 'test-stack', '.', { debug: true }); expect(layer.sourcePath).toBe('.'); expect(layer.libs.length).toBe(1); expect(layer.libs[0].path).toBe('src/library'); expect(writeFileSync).toBeCalledTimes(1); }); test('Root Layer w/ non-standard library', () => { const { SAMLayer } = require('./layer'); existsSync.mockReturnValue(true); readFileSync.mockReturnValueOnce(JSON.stringify({ name: 'stack-layer', version: '1.0.0', dependencies: { 'library': 'file:api/library' } })); readFileSync.mockReturnValueOnce(JSON.stringify({ "name": "samtsc", "version": "1.0.49", "lockfileVersion": 1, "requires": true, dependencies: { 'library': { version: 'file:api/library' } } })); readFileSync.mockReturnValueOnce(JSON.stringify({})); const layer = new SAMLayer('src-layer', { ContentUri: '.' }, { BuildMethod: 'nodejs12.x'}, 'test-stack', '.', { debug: true }); expect(layer.pck.dependencies.library).toBe('file:../../../../api/library'); expect(layer.sourcePath).toBe('.'); expect(layer.libs.length).toBe(1); expect(layer.libs[0].path).toBe('api/library'); expect(writeFileSync).toBeCalledTimes(1); }); }); });