'use strict'; const path = require('path'); const fsp = require('fs').promises; const fse = require('fs-extra'); const spawn = require('child-process-ext/spawn'); const { getTmpDirPath } = require('../utils/fs'); const { expect } = require('chai'); const serverlessExec = require('../serverless-binary'); describe('test/integration/create.test.js', function () { this.timeout(1000 * 60 * 2); it('should generate scaffolding for "aws-nodejs" template in provided path and rename service', async () => { const tmpDir = getTmpDirPath(); await spawn(serverlessExec, [ 'create', '--template', 'aws-nodejs', '--path', tmpDir, '--name', 'new-service-name', ]); const dirContent = await fsp.readdir(tmpDir); expect(dirContent).to.include('handler.js'); expect(dirContent).to.include('serverless.yml'); expect(dirContent).to.include('.gitignore'); const serverlessYmlfileContent = ( await fsp.readFile(path.join(tmpDir, 'serverless.yml')) ).toString(); expect(serverlessYmlfileContent).to.include('service: new-service-name'); }); it('should generate scaffolding for "aws-nodejs" template in current directory', async () => { const tmpDir = getTmpDirPath(); await fse.ensureDir(tmpDir); await spawn(serverlessExec, ['create', '--template', 'aws-nodejs'], { cwd: tmpDir, }); const dirContent = await fsp.readdir(tmpDir); expect(dirContent).to.include('handler.js'); expect(dirContent).to.include('serverless.yml'); expect(dirContent).to.include('.gitignore'); const serverlessYmlfileContent = ( await fsp.readFile(path.join(tmpDir, 'serverless.yml')) ).toString(); // We are checking that it includes basename of dir as it will be included in service name expect(serverlessYmlfileContent).to.include(path.basename(tmpDir)); }); it('should generate scaffolding for "plugin" template', async () => { const tmpDir = getTmpDirPath(); await fse.ensureDir(tmpDir); await spawn(serverlessExec, ['create', '--template', 'plugin'], { cwd: tmpDir, }); const dirContent = await fsp.readdir(tmpDir); expect(dirContent).to.include('index.js'); expect(dirContent).to.include('README.md'); expect(dirContent).to.include('package.json'); }); it('should error out when trying to create project in current working dir and the project files are already present in it', async () => { const tmpDir = getTmpDirPath(); await fse.ensureDir(tmpDir); await fsp.writeFile(path.join(tmpDir, 'handler.js'), ''); let err; try { await spawn(serverlessExec, ['create', '--template', 'aws-nodejs'], { cwd: tmpDir, }); } catch (e) { err = e; } expect(err.stdoutBuffer.toString()).to.contain('Move it and try again'); }); });