mirror of
https://github.com/serverless/serverless.git
synced 2026-01-25 15:07:39 +00:00
218 lines
6.8 KiB
JavaScript
218 lines
6.8 KiB
JavaScript
'use strict';
|
|
|
|
const chai = require('chai');
|
|
const sinon = require('sinon');
|
|
const proxyquire = require('proxyquire');
|
|
const overrideCwd = require('process-utils/override-cwd');
|
|
const configureInquirerStub = require('@serverless/test/configure-inquirer-stub');
|
|
const { StepHistory } = require('@serverless/utils/telemetry');
|
|
const inquirer = require('@serverless/utils/inquirer');
|
|
|
|
const { expect } = chai;
|
|
|
|
chai.use(require('chai-as-promised'));
|
|
|
|
const fixtures = require('../../../../fixtures/programmatic');
|
|
|
|
const ServerlessSDKMock = class ServerlessSDK {
|
|
constructor() {
|
|
this.metadata = {
|
|
get: async () => {
|
|
return {
|
|
awsAccountId: '377024778620',
|
|
supportedRuntimes: ['nodejs10.x', 'nodejs12.x', 'python2.7', 'python3.6', 'python3.7'],
|
|
supportedRegions: [
|
|
'us-east-1',
|
|
'us-east-2',
|
|
'us-west-2',
|
|
'eu-central-1',
|
|
'eu-west-1',
|
|
'eu-west-2',
|
|
'ap-northeast-1',
|
|
'ap-southeast-1',
|
|
'ap-southeast-2',
|
|
],
|
|
};
|
|
},
|
|
};
|
|
}
|
|
};
|
|
|
|
const step = proxyquire('../../../../../lib/cli/interactive-setup/dashboard-login', {
|
|
'@serverless/platform-client': {
|
|
ServerlessSDK: ServerlessSDKMock,
|
|
},
|
|
});
|
|
|
|
describe('test/unit/lib/cli/interactive-setup/dashboard-login.test.js', function () {
|
|
this.timeout(1000 * 60 * 3);
|
|
|
|
const loginStub = sinon.stub().resolves();
|
|
|
|
afterEach(() => {
|
|
loginStub.resetHistory();
|
|
});
|
|
|
|
it('Should be ineffective, when not at service path', async () => {
|
|
const context = { options: {}, isDashboard: true };
|
|
expect(await step.isApplicable(context)).to.be.false;
|
|
expect(context.inapplicabilityReasonCode).to.equal('NOT_IN_SERVICE_DIRECTORY');
|
|
});
|
|
|
|
it('Should be ineffective, when not in dashboard context', async () => {
|
|
const context = {
|
|
serviceDir: process.cwd(),
|
|
configuration: {},
|
|
configurationFilename: 'serverless.yml',
|
|
options: {},
|
|
initial: {},
|
|
inquirer,
|
|
};
|
|
expect(await step.isApplicable(context)).to.equal(false);
|
|
expect(context.inapplicabilityReasonCode).to.equal('CONSOLE_CONTEXT');
|
|
});
|
|
|
|
it('Should be ineffective, when not at AWS service path', async () => {
|
|
const context = {
|
|
serviceDir: process.cwd(),
|
|
configuration: {},
|
|
configurationFilename: 'serverless.yml',
|
|
options: {},
|
|
initial: {},
|
|
isDashboard: true,
|
|
inquirer,
|
|
};
|
|
expect(await step.isApplicable(context)).to.equal(false);
|
|
expect(context.inapplicabilityReasonCode).to.equal('NON_AWS_PROVIDER');
|
|
});
|
|
|
|
it('Should be ineffective, when not at supported runtime service path', async () => {
|
|
const context = {
|
|
serviceDir: process.cwd(),
|
|
configuration: { provider: { name: 'aws', runtime: 'java8' } },
|
|
configurationFilename: 'serverless.yml',
|
|
options: {},
|
|
initial: {},
|
|
isDashboard: true,
|
|
inquirer,
|
|
};
|
|
expect(await step.isApplicable(context)).to.equal(false);
|
|
expect(context.inapplicabilityReasonCode).to.equal('UNSUPPORTED_RUNTIME');
|
|
});
|
|
|
|
it('Should be ineffective, when logged in', async () => {
|
|
const { servicePath: serviceDir, serviceConfig: configuration } = await fixtures.setup(
|
|
'aws-loggedin-service'
|
|
);
|
|
const context = {
|
|
serviceDir,
|
|
configuration,
|
|
configurationFilename: 'serverless.yml',
|
|
options: {},
|
|
initial: {},
|
|
isDashboard: true,
|
|
inquirer,
|
|
};
|
|
expect(await overrideCwd(serviceDir, async () => await step.isApplicable(context))).to.equal(
|
|
false
|
|
);
|
|
expect(context.inapplicabilityReasonCode).to.equal('ALREADY_LOGGED_IN');
|
|
});
|
|
|
|
it('Should login when user decides to login/register', async () => {
|
|
configureInquirerStub(inquirer, {
|
|
confirm: { shouldLoginOrRegister: true },
|
|
});
|
|
const loginStep = proxyquire('../../../../../lib/cli/interactive-setup/dashboard-login', {
|
|
'../../../lib/commands/login/dashboard': loginStub,
|
|
'@serverless/platform-client': {
|
|
ServerlessSDK: ServerlessSDKMock,
|
|
},
|
|
});
|
|
const context = {
|
|
serviceDir: process.cwd(),
|
|
configuration: { provider: { name: 'aws', runtime: 'nodejs12.x' } },
|
|
configurationFilename: 'serverless.yml',
|
|
options: {},
|
|
initial: {},
|
|
isDashboard: true,
|
|
inquirer,
|
|
stepHistory: new StepHistory(),
|
|
};
|
|
await loginStep.run(context);
|
|
expect(loginStub.calledOnce).to.be.true;
|
|
expect(context.stepHistory.valuesMap()).to.deep.equal(
|
|
new Map([['shouldLoginOrRegister', true]])
|
|
);
|
|
});
|
|
|
|
it('Should login and skip question when user providers `org` option', async () => {
|
|
const loginStep = proxyquire('../../../../../lib/cli/interactive-setup/dashboard-login', {
|
|
'../../../lib/commands/login/dashboard': loginStub,
|
|
'@serverless/platform-client': {
|
|
ServerlessSDK: ServerlessSDKMock,
|
|
},
|
|
});
|
|
const context = {
|
|
serviceDir: process.cwd(),
|
|
configuration: { provider: { name: 'aws', runtime: 'nodejs12.x' } },
|
|
configurationFilename: 'serverless.yml',
|
|
options: { org: 'someorg' },
|
|
initial: {},
|
|
isDashboard: true,
|
|
inquirer,
|
|
stepHistory: new StepHistory(),
|
|
};
|
|
await loginStep.run(context);
|
|
expect(loginStub.calledOnce).to.be.true;
|
|
});
|
|
|
|
it('Should login and skip question when `org` configured', async () => {
|
|
const loginStep = proxyquire('../../../../../lib/cli/interactive-setup/dashboard-login', {
|
|
'../../../lib/commands/login/dashboard': loginStub,
|
|
'@serverless/platform-client': {
|
|
ServerlessSDK: ServerlessSDKMock,
|
|
},
|
|
});
|
|
const context = {
|
|
serviceDir: process.cwd(),
|
|
configuration: { org: 'someorg', provider: { name: 'aws', runtime: 'nodejs12.x' } },
|
|
configurationFilename: 'serverless.yml',
|
|
options: {},
|
|
initial: {},
|
|
isDashboard: true,
|
|
inquirer,
|
|
stepHistory: new StepHistory(),
|
|
};
|
|
await loginStep.run(context);
|
|
expect(loginStub.calledOnce).to.be.true;
|
|
});
|
|
|
|
it('Should not login when user decides not to login/register', async () => {
|
|
configureInquirerStub(inquirer, {
|
|
confirm: { shouldLoginOrRegister: false },
|
|
});
|
|
const loginStep = proxyquire('../../../../../lib/cli/interactive-setup/dashboard-login', {
|
|
'../../../lib/commands/login/dashboard': loginStub,
|
|
'@serverless/platform-client': {
|
|
ServerlessSDK: ServerlessSDKMock,
|
|
},
|
|
});
|
|
const context = {
|
|
serviceDir: process.cwd(),
|
|
configuration: { provider: { name: 'aws', runtime: 'nodejs12.x' } },
|
|
configurationFilename: 'serverless.yml',
|
|
options: {},
|
|
initial: {},
|
|
isDashboard: true,
|
|
inquirer,
|
|
stepHistory: new StepHistory(),
|
|
};
|
|
await loginStep.run(context);
|
|
expect(loginStub.called).to.be.false;
|
|
expect(context.stepHistory.valuesMap()).to.deep.equal(
|
|
new Map([['shouldLoginOrRegister', false]])
|
|
);
|
|
});
|
|
});
|