mirror of
https://github.com/serverless/serverless.git
synced 2026-01-25 15:07:39 +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 = new AwsCompileApigEvents(serverless, options);
|
||||||
awsCompileApigEvents.apiGatewayRestApiLogicalId = 'ApiGatewayRestApi';
|
awsCompileApigEvents.apiGatewayRestApiLogicalId = 'ApiGatewayRestApi';
|
||||||
awsCompileApigEvents.apiGatewayResourceLogicalIds = {
|
awsCompileApigEvents.apiGatewayResources = {
|
||||||
'users/create': 'ApiGatewayResourceUsersCreate',
|
'users/create': {
|
||||||
'users/list': 'ApiGatewayResourceUsersList',
|
name: 'UsersCreate',
|
||||||
'users/update': 'ApiGatewayResourceUsersUpdate',
|
resourceLogicalId: 'ApiGatewayResourceUsersCreate',
|
||||||
'users/delete': 'ApiGatewayResourceUsersDelete',
|
},
|
||||||
'users/any': 'ApiGatewayResourceUsersAny',
|
|
||||||
};
|
'users/list': {
|
||||||
awsCompileApigEvents.apiGatewayResourceNames = {
|
name: 'UsersList',
|
||||||
'users/create': 'UsersCreate',
|
resourceLogicalId: 'ApiGatewayResourceUsersList',
|
||||||
'users/list': 'UsersList',
|
},
|
||||||
'users/update': 'UsersUpdate',
|
'users/update': {
|
||||||
'users/delete': 'UsersDelete',
|
name: 'UsersUpdate',
|
||||||
'users/any': 'UsersAny',
|
resourceLogicalId: 'ApiGatewayResourceUsersUpdate',
|
||||||
|
},
|
||||||
|
'users/delete': {
|
||||||
|
name: 'UsersDelete',
|
||||||
|
resourceLogicalId: 'ApiGatewayResourceUsersDelete',
|
||||||
|
},
|
||||||
|
'users/any': {
|
||||||
|
name: 'UsersAny',
|
||||||
|
resourceLogicalId: 'ApiGatewayResourceUsersAny',
|
||||||
|
},
|
||||||
};
|
};
|
||||||
awsCompileApigEvents.validated = {};
|
awsCompileApigEvents.validated = {};
|
||||||
});
|
});
|
||||||
|
|||||||
@ -35,18 +35,26 @@ describe('#compileMethods()', () => {
|
|||||||
awsCompileApigEvents = new AwsCompileApigEvents(serverless, options);
|
awsCompileApigEvents = new AwsCompileApigEvents(serverless, options);
|
||||||
awsCompileApigEvents.validated = {};
|
awsCompileApigEvents.validated = {};
|
||||||
awsCompileApigEvents.apiGatewayRestApiLogicalId = 'ApiGatewayRestApi';
|
awsCompileApigEvents.apiGatewayRestApiLogicalId = 'ApiGatewayRestApi';
|
||||||
awsCompileApigEvents.apiGatewayResourceLogicalIds = {
|
awsCompileApigEvents.apiGatewayResources = {
|
||||||
'users/create': 'ApiGatewayResourceUsersCreate',
|
'users/create': {
|
||||||
'users/list': 'ApiGatewayResourceUsersList',
|
name: 'UsersCreate',
|
||||||
'users/update': 'ApiGatewayResourceUsersUpdate',
|
resourceLogicalId: 'ApiGatewayResourceUsersCreate',
|
||||||
'users/delete': 'ApiGatewayResourceUsersDelete',
|
},
|
||||||
};
|
|
||||||
awsCompileApigEvents.apiGatewayResourceNames = {
|
'users/list': {
|
||||||
'users/create': 'UsersCreate',
|
name: 'UsersList',
|
||||||
'users/list': 'UsersList',
|
resourceLogicalId: 'ApiGatewayResourceUsersList',
|
||||||
'users/update': 'UsersUpdate',
|
},
|
||||||
'users/delete': 'UsersDelete',
|
'users/update': {
|
||||||
|
name: 'UsersUpdate',
|
||||||
|
resourceLogicalId: 'ApiGatewayResourceUsersUpdate',
|
||||||
|
},
|
||||||
|
'users/delete': {
|
||||||
|
name: 'UsersDelete',
|
||||||
|
resourceLogicalId: 'ApiGatewayResourceUsersDelete',
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have request parameters defined when they are set', () => {
|
it('should have request parameters defined when they are set', () => {
|
||||||
|
|||||||
@ -148,7 +148,11 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
predefinedResources.forEach(applyResource);
|
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 predefinedResources array is empty, return all paths
|
||||||
if (predefinedResourceNodes.length === 0) {
|
if (predefinedResourceNodes.length === 0) {
|
||||||
@ -228,6 +232,11 @@ module.exports = {
|
|||||||
throw new Error(`Can not find API Gateway resource from path ${path}`);
|
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;
|
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',
|
'foo',
|
||||||
'bar',
|
|
||||||
'foo/bar',
|
'foo/bar',
|
||||||
|
'bar',
|
||||||
'bar/-',
|
'bar/-',
|
||||||
'bar/foo',
|
'bar/foo',
|
||||||
'bar/{id}',
|
'bar/{id}',
|
||||||
'bar/{foo_id}',
|
|
||||||
'bar/{id}/foobar',
|
'bar/{id}/foobar',
|
||||||
|
'bar/{foo_id}',
|
||||||
'bar/{foo_id}/foobar',
|
'bar/{foo_id}/foobar',
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
@ -160,12 +160,16 @@ describe('#compileResources()', () => {
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
return awsCompileApigEvents.compileResources().then(() => {
|
return awsCompileApigEvents.compileResources().then(() => {
|
||||||
expect(awsCompileApigEvents.apiGatewayResourceLogicalIds).to.deep.equal({
|
const expectedResourceLogicalIds = {
|
||||||
baz: 'ApiGatewayResourceBaz',
|
baz: 'ApiGatewayResourceBaz',
|
||||||
'baz/foo': 'ApiGatewayResourceBazFoo',
|
'baz/foo': 'ApiGatewayResourceBazFoo',
|
||||||
foo: 'ApiGatewayResourceFoo',
|
foo: 'ApiGatewayResourceFoo',
|
||||||
'foo/{foo_id}': 'ApiGatewayResourceFooFooidVar',
|
'foo/{foo_id}': 'ApiGatewayResourceFooFooidVar',
|
||||||
'foo/{foo_id}/bar': 'ApiGatewayResourceFooFooidVarBar',
|
'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(() => {
|
return awsCompileApigEvents.compileResources().then(() => {
|
||||||
expect(awsCompileApigEvents.apiGatewayResourceLogicalIds).to.deep.equal({
|
const expectedResourceLogicalIds = {
|
||||||
foo: 'ApiGatewayResourceFoo',
|
foo: 'ApiGatewayResourceFoo',
|
||||||
'foo/bar': 'ApiGatewayResourceFooBar',
|
'foo/bar': 'ApiGatewayResourceFooBar',
|
||||||
'foo/{bar}': 'ApiGatewayResourceFooBarVar',
|
'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({});
|
.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 = {
|
module.exports = {
|
||||||
compileRestApi() {
|
compileRestApi() {
|
||||||
if (this.serverless.service.provider.apiGateway.restApiId) {
|
if (this.serverless.service.provider.apiGateway &&
|
||||||
|
this.serverless.service.provider.apiGateway.restApiId) {
|
||||||
return BbPromise.resolve();
|
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
|
* Get API Gateway Rest API ID from serverless config
|
||||||
*/
|
*/
|
||||||
getApiGatewayRestApiId() {
|
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;
|
return this.serverless.service.provider.apiGateway.restApiId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,7 +271,8 @@ class AwsProvider {
|
|||||||
* Get Rest API Root Resource ID from serverless config
|
* Get Rest API Root Resource ID from serverless config
|
||||||
*/
|
*/
|
||||||
getApiGatewayRestApiRootResourceId() {
|
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 this.serverless.service.provider.apiGateway.restApiRootResourceId;
|
||||||
}
|
}
|
||||||
return { 'Fn::GetAtt': [this.naming.getRestApiLogicalId(), 'RootResourceId'] };
|
return { 'Fn::GetAtt': [this.naming.getRestApiLogicalId(), 'RootResourceId'] };
|
||||||
@ -280,8 +282,24 @@ class AwsProvider {
|
|||||||
* Get Rest API Predefined Resources from serverless config
|
* Get Rest API Predefined Resources from serverless config
|
||||||
*/
|
*/
|
||||||
getApiGatewayPredefinedResources() {
|
getApiGatewayPredefinedResources() {
|
||||||
return this.serverless.service.provider.apiGateway.restApiResources
|
if (!this.serverless.service.provider.apiGateway
|
||||||
? this.serverless.service.provider.apiGateway.restApiResources : [];
|
|| !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