mirror of
https://github.com/serverless/serverless.git
synced 2026-01-18 14:58:43 +00:00
update predefined resources test
This commit is contained in:
parent
e8f09bd6be
commit
85acf54d01
@ -34,19 +34,28 @@ describe('#compileCors()', () => {
|
||||
};
|
||||
awsCompileApigEvents = new AwsCompileApigEvents(serverless, options);
|
||||
awsCompileApigEvents.apiGatewayRestApiLogicalId = 'ApiGatewayRestApi';
|
||||
awsCompileApigEvents.apiGatewayResourceLogicalIds = {
|
||||
'users/create': 'ApiGatewayResourceUsersCreate',
|
||||
'users/list': 'ApiGatewayResourceUsersList',
|
||||
'users/update': 'ApiGatewayResourceUsersUpdate',
|
||||
'users/delete': 'ApiGatewayResourceUsersDelete',
|
||||
'users/any': 'ApiGatewayResourceUsersAny',
|
||||
};
|
||||
awsCompileApigEvents.apiGatewayResourceNames = {
|
||||
'users/create': 'UsersCreate',
|
||||
'users/list': 'UsersList',
|
||||
'users/update': 'UsersUpdate',
|
||||
'users/delete': 'UsersDelete',
|
||||
'users/any': 'UsersAny',
|
||||
awsCompileApigEvents.apiGatewayResources = {
|
||||
'users/create': {
|
||||
name: 'UsersCreate',
|
||||
resourceLogicalId: 'ApiGatewayResourceUsersCreate',
|
||||
},
|
||||
|
||||
'users/list': {
|
||||
name: 'UsersList',
|
||||
resourceLogicalId: 'ApiGatewayResourceUsersList',
|
||||
},
|
||||
'users/update': {
|
||||
name: 'UsersUpdate',
|
||||
resourceLogicalId: 'ApiGatewayResourceUsersUpdate',
|
||||
},
|
||||
'users/delete': {
|
||||
name: 'UsersDelete',
|
||||
resourceLogicalId: 'ApiGatewayResourceUsersDelete',
|
||||
},
|
||||
'users/any': {
|
||||
name: 'UsersAny',
|
||||
resourceLogicalId: 'ApiGatewayResourceUsersAny',
|
||||
},
|
||||
};
|
||||
awsCompileApigEvents.validated = {};
|
||||
});
|
||||
|
||||
@ -35,18 +35,26 @@ describe('#compileMethods()', () => {
|
||||
awsCompileApigEvents = new AwsCompileApigEvents(serverless, options);
|
||||
awsCompileApigEvents.validated = {};
|
||||
awsCompileApigEvents.apiGatewayRestApiLogicalId = 'ApiGatewayRestApi';
|
||||
awsCompileApigEvents.apiGatewayResourceLogicalIds = {
|
||||
'users/create': 'ApiGatewayResourceUsersCreate',
|
||||
'users/list': 'ApiGatewayResourceUsersList',
|
||||
'users/update': 'ApiGatewayResourceUsersUpdate',
|
||||
'users/delete': 'ApiGatewayResourceUsersDelete',
|
||||
};
|
||||
awsCompileApigEvents.apiGatewayResourceNames = {
|
||||
'users/create': 'UsersCreate',
|
||||
'users/list': 'UsersList',
|
||||
'users/update': 'UsersUpdate',
|
||||
'users/delete': 'UsersDelete',
|
||||
awsCompileApigEvents.apiGatewayResources = {
|
||||
'users/create': {
|
||||
name: 'UsersCreate',
|
||||
resourceLogicalId: 'ApiGatewayResourceUsersCreate',
|
||||
},
|
||||
|
||||
'users/list': {
|
||||
name: 'UsersList',
|
||||
resourceLogicalId: 'ApiGatewayResourceUsersList',
|
||||
},
|
||||
'users/update': {
|
||||
name: 'UsersUpdate',
|
||||
resourceLogicalId: 'ApiGatewayResourceUsersUpdate',
|
||||
},
|
||||
'users/delete': {
|
||||
name: 'UsersDelete',
|
||||
resourceLogicalId: 'ApiGatewayResourceUsersDelete',
|
||||
},
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
it('should have request parameters defined when they are set', () => {
|
||||
|
||||
@ -148,7 +148,11 @@ module.exports = {
|
||||
}
|
||||
|
||||
predefinedResources.forEach(applyResource);
|
||||
this.validated.events.forEach((event) => applyResource(event.http, true));
|
||||
this.validated.events.forEach((event) => {
|
||||
if (event.http.path) {
|
||||
applyResource(event.http, true);
|
||||
}
|
||||
});
|
||||
|
||||
// if predefinedResources array is empty, return all paths
|
||||
if (predefinedResourceNodes.length === 0) {
|
||||
@ -228,6 +232,11 @@ module.exports = {
|
||||
throw new Error(`Can not find API Gateway resource from path ${path}`);
|
||||
}
|
||||
|
||||
if (!this.apiGatewayResources[path].resourceId
|
||||
&& this.apiGatewayResources[path].resourceLogicalId) {
|
||||
this.apiGatewayResources[path].resourceId =
|
||||
{ Ref: this.apiGatewayResources[path].resourceLogicalId };
|
||||
}
|
||||
return this.apiGatewayResources[path].resourceId;
|
||||
},
|
||||
|
||||
|
||||
@ -70,15 +70,15 @@ describe('#compileResources()', () => {
|
||||
},
|
||||
},
|
||||
];
|
||||
expect(awsCompileApigEvents.getResourcePaths()).to.deep.equal([
|
||||
expect(Object.keys(awsCompileApigEvents.getResourcePaths())).to.deep.equal([
|
||||
'foo',
|
||||
'bar',
|
||||
'foo/bar',
|
||||
'bar',
|
||||
'bar/-',
|
||||
'bar/foo',
|
||||
'bar/{id}',
|
||||
'bar/{foo_id}',
|
||||
'bar/{id}/foobar',
|
||||
'bar/{foo_id}',
|
||||
'bar/{foo_id}/foobar',
|
||||
]);
|
||||
});
|
||||
@ -160,12 +160,16 @@ describe('#compileResources()', () => {
|
||||
},
|
||||
];
|
||||
return awsCompileApigEvents.compileResources().then(() => {
|
||||
expect(awsCompileApigEvents.apiGatewayResourceLogicalIds).to.deep.equal({
|
||||
const expectedResourceLogicalIds = {
|
||||
baz: 'ApiGatewayResourceBaz',
|
||||
'baz/foo': 'ApiGatewayResourceBazFoo',
|
||||
foo: 'ApiGatewayResourceFoo',
|
||||
'foo/{foo_id}': 'ApiGatewayResourceFooFooidVar',
|
||||
'foo/{foo_id}/bar': 'ApiGatewayResourceFooFooidVarBar',
|
||||
};
|
||||
Object.keys(expectedResourceLogicalIds).forEach((path) => {
|
||||
expect(awsCompileApigEvents.apiGatewayResources[path].resourceLogicalId)
|
||||
.equal(expectedResourceLogicalIds[path]);
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -186,10 +190,14 @@ describe('#compileResources()', () => {
|
||||
},
|
||||
];
|
||||
return awsCompileApigEvents.compileResources().then(() => {
|
||||
expect(awsCompileApigEvents.apiGatewayResourceLogicalIds).to.deep.equal({
|
||||
const expectedResourceLogicalIds = {
|
||||
foo: 'ApiGatewayResourceFoo',
|
||||
'foo/bar': 'ApiGatewayResourceFooBar',
|
||||
'foo/{bar}': 'ApiGatewayResourceFooBarVar',
|
||||
};
|
||||
Object.keys(expectedResourceLogicalIds).forEach((path) => {
|
||||
expect(awsCompileApigEvents.apiGatewayResources[path].resourceLogicalId)
|
||||
.equal(expectedResourceLogicalIds[path]);
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -242,4 +250,64 @@ describe('#compileResources()', () => {
|
||||
.Resources).to.deep.equal({});
|
||||
});
|
||||
});
|
||||
|
||||
it('should create child resources only if there are predefined parent resources', () => {
|
||||
awsCompileApigEvents.serverless.service.provider.apiGateway = {
|
||||
restApiId: '6fyzt1pfpk',
|
||||
restApiRootResourceId: 'z5d4qh4oqi',
|
||||
restApiResources: {
|
||||
foo: 'axcybf2i39',
|
||||
|
||||
},
|
||||
};
|
||||
|
||||
awsCompileApigEvents.validated.events = [
|
||||
{
|
||||
http: {
|
||||
path: 'foo/bar',
|
||||
method: 'POST',
|
||||
},
|
||||
},
|
||||
{
|
||||
http: {
|
||||
path: 'bar/-',
|
||||
method: 'GET',
|
||||
},
|
||||
},
|
||||
{
|
||||
http: {
|
||||
path: 'bar/foo',
|
||||
method: 'GET',
|
||||
},
|
||||
},
|
||||
{
|
||||
http: {
|
||||
path: 'bar/{id}/foobar',
|
||||
method: 'GET',
|
||||
},
|
||||
},
|
||||
{
|
||||
http: {
|
||||
path: 'bar/{id}',
|
||||
method: 'GET',
|
||||
},
|
||||
},
|
||||
];
|
||||
return awsCompileApigEvents.compileResources().then(() => {
|
||||
expect(awsCompileApigEvents.serverless.service.provider.compiledCloudFormationTemplate
|
||||
.Resources.ApiGatewayResourceFoo).to.equal(undefined);
|
||||
expect(awsCompileApigEvents.serverless.service.provider.compiledCloudFormationTemplate
|
||||
.Resources.ApiGatewayResourceBar.Properties.RestApiId)
|
||||
.to.equal('6fyzt1pfpk');
|
||||
expect(awsCompileApigEvents.serverless.service.provider.compiledCloudFormationTemplate
|
||||
.Resources.ApiGatewayResourceBar.Properties.ParentId)
|
||||
.to.equal('z5d4qh4oqi');
|
||||
expect(awsCompileApigEvents.serverless.service.provider.compiledCloudFormationTemplate
|
||||
.Resources.ApiGatewayResourceFooBar.Properties.ParentId)
|
||||
.to.equal('axcybf2i39');
|
||||
expect(awsCompileApigEvents.serverless.service.provider.compiledCloudFormationTemplate
|
||||
.Resources.ApiGatewayResourceBarIdVar.Properties.ParentId.Ref)
|
||||
.to.equal('ApiGatewayResourceBar');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -5,7 +5,8 @@ const BbPromise = require('bluebird');
|
||||
|
||||
module.exports = {
|
||||
compileRestApi() {
|
||||
if (this.serverless.service.provider.apiGateway.restApiId) {
|
||||
if (this.serverless.service.provider.apiGateway &&
|
||||
this.serverless.service.provider.apiGateway.restApiId) {
|
||||
return BbPromise.resolve();
|
||||
}
|
||||
|
||||
|
||||
@ -54,4 +54,20 @@ describe('#compileRestApi()', () => {
|
||||
);
|
||||
})
|
||||
);
|
||||
|
||||
it('should ignore REST API resource creation if there is predefined restApi config',
|
||||
() => {
|
||||
awsCompileApigEvents.serverless.service.provider.apiGateway = {
|
||||
restApiId: '6fyzt1pfpk',
|
||||
restApiRootResourceId: 'z5d4qh4oqi',
|
||||
};
|
||||
return awsCompileApigEvents
|
||||
.compileRestApi().then(() => {
|
||||
expect(
|
||||
awsCompileApigEvents.serverless.service.provider.compiledCloudFormationTemplate
|
||||
.Resources
|
||||
).to.deep.equal({});
|
||||
});
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
@ -259,7 +259,8 @@ class AwsProvider {
|
||||
* Get API Gateway Rest API ID from serverless config
|
||||
*/
|
||||
getApiGatewayRestApiId() {
|
||||
if (this.serverless.service.provider.apiGateway.restApiId) {
|
||||
if (this.serverless.service.provider.apiGateway
|
||||
&& this.serverless.service.provider.apiGateway.restApiId) {
|
||||
return this.serverless.service.provider.apiGateway.restApiId;
|
||||
}
|
||||
|
||||
@ -270,7 +271,8 @@ class AwsProvider {
|
||||
* Get Rest API Root Resource ID from serverless config
|
||||
*/
|
||||
getApiGatewayRestApiRootResourceId() {
|
||||
if (this.serverless.service.provider.apiGateway.restApiRootResourceId) {
|
||||
if (this.serverless.service.provider.apiGateway
|
||||
&& this.serverless.service.provider.apiGateway.restApiRootResourceId) {
|
||||
return this.serverless.service.provider.apiGateway.restApiRootResourceId;
|
||||
}
|
||||
return { 'Fn::GetAtt': [this.naming.getRestApiLogicalId(), 'RootResourceId'] };
|
||||
@ -280,8 +282,24 @@ class AwsProvider {
|
||||
* Get Rest API Predefined Resources from serverless config
|
||||
*/
|
||||
getApiGatewayPredefinedResources() {
|
||||
return this.serverless.service.provider.apiGateway.restApiResources
|
||||
? this.serverless.service.provider.apiGateway.restApiResources : [];
|
||||
if (!this.serverless.service.provider.apiGateway
|
||||
|| !this.serverless.service.provider.apiGateway.restApiResources) {
|
||||
return [];
|
||||
}
|
||||
|
||||
if (Array.isArray(this.serverless.service.provider.apiGateway.restApiResources)) {
|
||||
return this.serverless.service.provider.apiGateway.restApiResources;
|
||||
}
|
||||
|
||||
if (typeof this.serverless.service.provider.apiGateway.restApiResources !== 'object') {
|
||||
throw new Error('REST API resource must be an array of object');
|
||||
}
|
||||
|
||||
return Object.keys(this.serverless.service.provider.apiGateway.restApiResources)
|
||||
.map((key) => ({
|
||||
path: key,
|
||||
resourceId: this.serverless.service.provider.apiGateway.restApiResources[key],
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user