2022-02-04 17:35:19 +01:00

77 lines
2.3 KiB
JavaScript

// Sanity tests that confirms a happy path interactive setup flow e2e way
'use strict';
const spawn = require('child-process-ext/spawn');
const path = require('path');
const serverlessPath = path.resolve(__dirname, '../../../../../scripts/serverless.js');
const fixturesPath = path.resolve(__dirname, '../../../../fixtures/programmatic');
describe('test/unit/lib/cli/interactive-setup/index.test.js', () => {
it('should configure interactive setup flow', async () => {
const slsProcessPromise = spawn(
'node',
[serverlessPath, '--template-path', path.join(fixturesPath, 'aws')],
{
env: {
...process.env,
SLS_INTERACTIVE_SETUP_ENABLE: '1',
SLS_INTERACTIVE_SETUP_TEST: '1',
BROWSER: 'none',
},
}
);
const slsProcess = slsProcessPromise.child;
let output = '';
const program = [
// service
{
instructionString: 'What do you want to call this project?',
input: 'interactive-setup-test',
},
// dashboard-login
{
instructionString: 'Do you want to login/register to Serverless Dashboard?',
input: '\u001b[B', // Move cursor down by one line
},
// dashboard-set-org
// Skipped, as internally depends on remote state of data and cannot be easily tested offline
// aws-credentials
{
instructionString: 'No AWS credentials found, what credentials do you want to use?',
},
{ instructionString: 'AWS account', input: 'Y' },
{ instructionString: 'Press Enter to continue' },
{
instructionString: 'AWS Access Key Id',
input: 'AKIAIOSFODNN7EXAMPLE',
},
{
instructionString: 'AWS Secret Access Key',
input: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
},
// deploy
{ instructionString: 'Do you want to deploy now?', input: 'n' },
];
slsProcess.stdout.on('data', (data) => {
output += data;
const programItem = program[0];
if (!programItem) return;
if (output.includes(programItem.instructionString)) {
program.shift();
output = '';
slsProcess.stdin.write(`${programItem.input || ''}\n`);
}
});
slsProcess.stdout.pipe(process.stdout);
slsProcess.stderr.pipe(process.stderr);
await slsProcessPromise;
});
});