-
Notifications
You must be signed in to change notification settings - Fork 5.7k
/
get-sls.test.js
147 lines (136 loc) · 4.68 KB
/
get-sls.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
'use strict';
const { expect } = require('chai');
const _ = require('lodash');
const resolveMeta = require('../../../../../../../lib/configuration/variables/resolve-meta');
const resolve = require('../../../../../../../lib/configuration/variables/resolve');
const selfSource = require('../../../../../../../lib/configuration/variables/sources/self');
const getSlsSource = require('../../../../../../../lib/configuration/variables/sources/instance-dependent/get-sls');
const Serverless = require('../../../../../../../lib/serverless');
describe('test/unit/lib/configuration/variables/sources/instance-dependent/get-sls.test.js', () => {
let configuration;
let variablesMeta;
let serverlessInstance;
const initializeServerless = async ({ configExt, options, setupOptions = {} } = {}) => {
configuration = {
service: 'foo',
provider: {
name: 'aws',
},
custom: {
sls: '${sls:instanceId}',
stage: '${sls:stage}',
missingAddress: '${sls:}',
unsupportedAddress: '${sls:foo}',
nonStringAddress: '${sls:${self:custom.someObject}}',
someObject: {},
},
};
if (configExt) {
configuration = _.merge(configuration, configExt);
}
variablesMeta = resolveMeta(configuration);
serverlessInstance = new Serverless({
configuration,
serviceDir: process.cwd(),
configurationFilename: 'serverless.yml',
commands: ['package'],
options: {},
});
serverlessInstance.init();
await resolve({
serviceDir: process.cwd(),
configuration,
variablesMeta,
sources: {
self: selfSource,
sls: getSlsSource(setupOptions.withoutInstance ? null : serverlessInstance),
},
options: options || {},
fulfilledSources: new Set(['self', 'sls']),
});
};
it('should resolve ${sls.instanceId}', async () => {
await initializeServerless();
if (variablesMeta.get('custom\0sls')) throw variablesMeta.get('custom\0sls').error;
expect(typeof serverlessInstance.instanceId).to.equal('string');
expect(configuration.custom.sls).to.equal(serverlessInstance.instanceId);
});
it('should keep ${sls:instanceId} pending when no serverless instance available', async () => {
// Dev by default
await initializeServerless({ setupOptions: { withoutInstance: true } });
expect(variablesMeta.get('custom\0sls')).to.have.property('variables');
expect(variablesMeta.get('custom\0sls')).to.not.have.property('error');
});
it('should resolve ${sls:stage}', async () => {
// Dev by default
await initializeServerless();
expect(configuration.custom.stage).to.equal('dev');
// Resolves to provider.stage if it exists
await initializeServerless({
configExt: {
provider: {
stage: 'prod',
},
},
});
expect(configuration.custom.stage).to.equal('prod');
// Resolves to `--stage=` if the option is set
await initializeServerless({
configExt: {
provider: {
stage: 'prod',
},
},
options: {
stage: 'staging',
},
});
expect(configuration.custom.stage).to.equal('staging');
});
it('should resolve ${sls:stage} when no serverless instance available', async () => {
// Dev by default
await initializeServerless({ setupOptions: { withoutInstance: true } });
expect(configuration.custom.stage).to.equal('dev');
// Resolves to provider.stage if it exists
await initializeServerless({
setupOptions: { withoutInstance: true },
configExt: {
provider: {
stage: 'prod',
},
},
});
expect(configuration.custom.stage).to.equal('prod');
// Resolves to `--stage=` if the option is set
await initializeServerless({
setupOptions: { withoutInstance: true },
configExt: {
provider: {
stage: 'prod',
},
},
options: {
stage: 'staging',
},
});
expect(configuration.custom.stage).to.equal('staging');
});
it('should report with an error missing address', async () => {
await initializeServerless();
return expect(variablesMeta.get('custom\0missingAddress').error.code).to.equal(
'VARIABLE_RESOLUTION_ERROR'
);
});
it('should report with an error unsupported address', async () => {
await initializeServerless();
return expect(variablesMeta.get('custom\0unsupportedAddress').error.code).to.equal(
'VARIABLE_RESOLUTION_ERROR'
);
});
it('should report with an error a non-string address', async () => {
await initializeServerless();
return expect(variablesMeta.get('custom\0nonStringAddress').error.code).to.equal(
'VARIABLE_RESOLUTION_ERROR'
);
});
});