diff --git a/packages/amplify-graphql-transformer-core/package.json b/packages/amplify-graphql-transformer-core/package.json index cfd1220f43d..dde2c3f6cde 100644 --- a/packages/amplify-graphql-transformer-core/package.json +++ b/packages/amplify-graphql-transformer-core/package.json @@ -23,7 +23,8 @@ "scripts": { "build": "tsc", "watch": "tsc -w", - "clean": "rimraf ./lib" + "clean": "rimraf ./lib", + "test": "jest" }, "dependencies": { "@aws-amplify/graphql-transformer-interfaces": "1.10.0", diff --git a/packages/amplify-graphql-transformer-core/src/__tests__/transform-host.test.ts b/packages/amplify-graphql-transformer-core/src/__tests__/transform-host.test.ts new file mode 100644 index 00000000000..044435c1a16 --- /dev/null +++ b/packages/amplify-graphql-transformer-core/src/__tests__/transform-host.test.ts @@ -0,0 +1,39 @@ +import { DefaultTransformHost } from '../transform-host'; +import { GraphQLApi, TransformerAPIProps } from '../graphql-api'; +import { App } from '@aws-cdk/core'; +import { InlineTemplate } from '../cdk-compat/template-asset'; +import { TransformerRootStack } from '../cdk-compat/root-stack'; + +describe('addResolver', () => { + const app = new App(); + const stack = new TransformerRootStack(app, 'test-root-stack'); + const transformHost = new DefaultTransformHost({ api: new GraphQLApi(stack, 'testId', { name: 'testApiName' }) }); + + it('generates resolver name with hash for non-alphanumeric type names', () => { + const cfnResolver = transformHost.addResolver( + 'test_type', + 'testField', + new InlineTemplate('testTemplate'), + new InlineTemplate('testTemplate'), + undefined, + undefined, + ['testPipelineConfig'], + stack, + ); + expect(cfnResolver.logicalId).toMatch('testtype4c79TestFieldResolver.LogicalID'); // have to use match instead of equals because the logicalId is a CDK token that has some non-deterministic stuff in it + }); + + it('generates resolver name with hash for non-alphanumeric field names', () => { + const cfnResolver = transformHost.addResolver( + 'testType', + 'test_field', + new InlineTemplate('testTemplate'), + new InlineTemplate('testTemplate'), + undefined, + undefined, + ['testPipelineConfig'], + stack, + ); + expect(cfnResolver.logicalId).toMatch('testTypeTestfield6a0fResolver.LogicalID'); // have to use match instead of equals because the logicalId is a CDK token that has some non-deterministic stuff in it + }); +}); diff --git a/packages/amplify-graphql-transformer-core/src/transform-host.ts b/packages/amplify-graphql-transformer-core/src/transform-host.ts index ec21d2306c2..32b2239f992 100644 --- a/packages/amplify-graphql-transformer-core/src/transform-host.ts +++ b/packages/amplify-graphql-transformer-core/src/transform-host.ts @@ -17,7 +17,7 @@ import { CfnFunction, Code, Function, IFunction, ILayerVersion, Runtime } from ' import { AppSyncFunctionConfiguration } from './appsync-function'; import { IRole } from '@aws-cdk/aws-iam'; import { InlineTemplate, S3MappingFunctionCode } from './cdk-compat/template-asset'; -import { ResolverResourceIDs, toCamelCase } from 'graphql-transformer-common'; +import { ResolverResourceIDs, resourceName, toCamelCase } from 'graphql-transformer-common'; import { GraphQLApi } from './graphql-api'; export interface DefaultTransformHostOptions { @@ -144,7 +144,7 @@ export class DefaultTransformHost implements TransformHostProvider { const requestTemplateLocation = requestMappingTemplate.bind(this.api); const responseTemplateLocation = responseMappingTemplate.bind(this.api); - const resolverName = toCamelCase([typeName, fieldName, 'Resolver']); + const resolverName = toCamelCase([resourceName(typeName), resourceName(fieldName), 'Resolver']); const resourceId = resolverLogicalId ?? ResolverResourceIDs.ResolverResourceID(typeName, fieldName); if (dataSourceName) {