diff --git a/packages/amplify-appsync-simulator/src/__tests__/velocity/util/auth-utils.test.ts b/packages/amplify-appsync-simulator/src/__tests__/velocity/util/auth-utils.test.ts new file mode 100644 index 00000000000..e3eb5408787 --- /dev/null +++ b/packages/amplify-appsync-simulator/src/__tests__/velocity/util/auth-utils.test.ts @@ -0,0 +1,57 @@ +import { create } from '../../../velocity/util/index'; +import { GraphQLResolveInfo } from 'graphql'; +import { AppSyncGraphQLExecutionContext } from '../../../utils/graphql-runner'; +import { AmplifyAppSyncSimulatorAuthenticationType } from '../../../type-definition'; + +const stubInfo = {} as unknown; +const mockInfo = stubInfo as GraphQLResolveInfo; + +describe('$util.authType', () => { + it('should return API Key Authorization', () => { + const executionContext: AppSyncGraphQLExecutionContext = { + headers: { 'x-api-key': 'da-fake-key' }, + requestAuthorizationMode: AmplifyAppSyncSimulatorAuthenticationType.API_KEY, + appsyncErrors: [], + }; + + const util = create(undefined, undefined, mockInfo, executionContext); + + expect(util.authType()).toEqual('API Key Authorization'); + }); + + it('should return IAM Authorization', () => { + const executionContext: AppSyncGraphQLExecutionContext = { + headers: { 'x-api-key': 'da-fake-key' }, + requestAuthorizationMode: AmplifyAppSyncSimulatorAuthenticationType.AWS_IAM, + appsyncErrors: [], + }; + + const util = create(undefined, undefined, mockInfo, executionContext); + + expect(util.authType()).toEqual('IAM Authorization'); + }); + + it('should return Open ID Connect Authorization', () => { + const executionContext: AppSyncGraphQLExecutionContext = { + headers: { 'x-api-key': 'da-fake-key' }, + requestAuthorizationMode: AmplifyAppSyncSimulatorAuthenticationType.OPENID_CONNECT, + appsyncErrors: [], + }; + + const util = create(undefined, undefined, mockInfo, executionContext); + + expect(util.authType()).toEqual('Open ID Connect Authorization'); + }); + + it('should return User Pool Authorization', () => { + const executionContext: AppSyncGraphQLExecutionContext = { + headers: { 'x-api-key': 'da-fake-key' }, + requestAuthorizationMode: AmplifyAppSyncSimulatorAuthenticationType.AMAZON_COGNITO_USER_POOLS, + appsyncErrors: [], + }; + + const util = create(undefined, undefined, mockInfo, executionContext); + + expect(util.authType()).toEqual('User Pool Authorization'); + }); +}); diff --git a/packages/amplify-appsync-simulator/src/__tests__/velocity/util/general-utils.test.ts b/packages/amplify-appsync-simulator/src/__tests__/velocity/util/general-utils.test.ts index be13a7986cf..3fedb836f38 100644 --- a/packages/amplify-appsync-simulator/src/__tests__/velocity/util/general-utils.test.ts +++ b/packages/amplify-appsync-simulator/src/__tests__/velocity/util/general-utils.test.ts @@ -1,8 +1,9 @@ import { create } from '../../../velocity/util/index'; import { JavaMap } from '../../../velocity/value-mapper/map'; import { GraphQLResolveInfo } from 'graphql'; -import { hasUncaughtExceptionCaptureCallback } from 'process'; import { generalUtils } from '../../../velocity/util/general-utils'; +import { AppSyncGraphQLExecutionContext } from '../../../utils/graphql-runner'; +import { AmplifyAppSyncSimulatorAuthenticationType } from '../../../type-definition'; const stubInfo = { fieldName: 'testFieldName', @@ -47,7 +48,13 @@ const stubJavaMap: JavaMap = new JavaMap({ field1: 'field1Value', field2: 'field var util; beforeEach(() => { - util = create(undefined, undefined, mockInfo); + const executionContext: AppSyncGraphQLExecutionContext = { + headers: { 'x-api-key': 'da-fake-key' }, + requestAuthorizationMode: AmplifyAppSyncSimulatorAuthenticationType.API_KEY, + appsyncErrors: [], + }; + + util = create(undefined, undefined, mockInfo, executionContext); }); it('error_filterDataJavaMap', () => { diff --git a/packages/amplify-appsync-simulator/src/__tests__/velocity/util/list-utils.test.ts b/packages/amplify-appsync-simulator/src/__tests__/velocity/util/list-utils.test.ts index 0a02067a45b..ea1bf7f3298 100644 --- a/packages/amplify-appsync-simulator/src/__tests__/velocity/util/list-utils.test.ts +++ b/packages/amplify-appsync-simulator/src/__tests__/velocity/util/list-utils.test.ts @@ -1,13 +1,21 @@ import { create } from '../../../velocity/util/index'; import { GraphQLResolveInfo } from 'graphql'; import { map, random } from 'lodash'; +import { AppSyncGraphQLExecutionContext } from '../../../utils/graphql-runner'; +import { AmplifyAppSyncSimulatorAuthenticationType } from '../../../type-definition'; const stubInfo = {} as unknown; export const mockInfo = stubInfo as GraphQLResolveInfo; var util; beforeEach(() => { - util = create(undefined, undefined, mockInfo); + const executionContext: AppSyncGraphQLExecutionContext = { + headers: { 'x-api-key': 'da-fake-key' }, + requestAuthorizationMode: AmplifyAppSyncSimulatorAuthenticationType.API_KEY, + appsyncErrors: [], + }; + + util = create(undefined, undefined, mockInfo, executionContext); }); describe('$utils.list.copyAndRetainAll', () => { diff --git a/packages/amplify-appsync-simulator/src/__tests__/velocity/util/math.test.ts b/packages/amplify-appsync-simulator/src/__tests__/velocity/util/math.test.ts index 55d4ad4de8b..00fe68423ea 100644 --- a/packages/amplify-appsync-simulator/src/__tests__/velocity/util/math.test.ts +++ b/packages/amplify-appsync-simulator/src/__tests__/velocity/util/math.test.ts @@ -1,12 +1,20 @@ import { create } from '../../../velocity/util/index'; import { GraphQLResolveInfo } from 'graphql'; +import { AppSyncGraphQLExecutionContext } from '../../../utils/graphql-runner'; +import { AmplifyAppSyncSimulatorAuthenticationType } from '../../../type-definition'; const stubInfo = {} as unknown; export const mockInfo = stubInfo as GraphQLResolveInfo; var util; beforeEach(() => { - util = create(undefined, undefined, mockInfo); + const executionContext: AppSyncGraphQLExecutionContext = { + headers: { 'x-api-key': 'da-fake-key' }, + requestAuthorizationMode: AmplifyAppSyncSimulatorAuthenticationType.API_KEY, + appsyncErrors: [], + }; + + util = create(undefined, undefined, mockInfo, executionContext); }); describe('$utils.math.round', () => { diff --git a/packages/amplify-appsync-simulator/src/__tests__/velocity/util/rds.test.ts b/packages/amplify-appsync-simulator/src/__tests__/velocity/util/rds.test.ts index 9a6155c20f8..bd44c7b7ada 100644 --- a/packages/amplify-appsync-simulator/src/__tests__/velocity/util/rds.test.ts +++ b/packages/amplify-appsync-simulator/src/__tests__/velocity/util/rds.test.ts @@ -1,13 +1,21 @@ import { create } from '../../../velocity/util/index'; import { mockedInputToRdsJsonString, mockedOutputFromRdsJsonString } from './mock-data'; import { GraphQLResolveInfo } from 'graphql'; +import { AppSyncGraphQLExecutionContext } from '../../../utils/graphql-runner'; +import { AmplifyAppSyncSimulatorAuthenticationType } from '../../../type-definition'; const stubInfo = {} as unknown; const mockInfo = stubInfo as GraphQLResolveInfo; let util; beforeEach(() => { - util = create(undefined, undefined, mockInfo); + const executionContext: AppSyncGraphQLExecutionContext = { + headers: { 'x-api-key': 'da-fake-key' }, + requestAuthorizationMode: AmplifyAppSyncSimulatorAuthenticationType.API_KEY, + appsyncErrors: [], + }; + + util = create(undefined, undefined, mockInfo, executionContext); }); describe('$utils.rds.toJsonString', () => { diff --git a/packages/amplify-appsync-simulator/src/__tests__/velocity/util/str.test.ts b/packages/amplify-appsync-simulator/src/__tests__/velocity/util/str.test.ts index 5a2d253b3a4..622d75c1a3c 100644 --- a/packages/amplify-appsync-simulator/src/__tests__/velocity/util/str.test.ts +++ b/packages/amplify-appsync-simulator/src/__tests__/velocity/util/str.test.ts @@ -1,12 +1,20 @@ import { create } from '../../../velocity/util/index'; import { GraphQLResolveInfo } from 'graphql'; +import { AmplifyAppSyncSimulatorAuthenticationType } from '../../../type-definition'; +import { AppSyncGraphQLExecutionContext } from '../../../utils/graphql-runner'; const stubInfo = {} as unknown; export const mockInfo = stubInfo as GraphQLResolveInfo; var util; beforeEach(() => { - util = create(undefined, undefined, mockInfo); + const executionContext: AppSyncGraphQLExecutionContext = { + headers: { 'x-api-key': 'da-fake-key' }, + requestAuthorizationMode: AmplifyAppSyncSimulatorAuthenticationType.API_KEY, + appsyncErrors: [], + }; + + util = create(undefined, undefined, mockInfo, executionContext); }); describe('$utils.str.toLower', () => { diff --git a/packages/amplify-appsync-simulator/src/velocity/index.ts b/packages/amplify-appsync-simulator/src/velocity/index.ts index e93591849a1..f51d4d138bf 100644 --- a/packages/amplify-appsync-simulator/src/velocity/index.ts +++ b/packages/amplify-appsync-simulator/src/velocity/index.ts @@ -93,7 +93,7 @@ export class VelocityTemplate { const { jwt } = requestContext; const { iss: issuer, sub, 'cognito:username': cognitoUserName, username } = jwt || {}; - const util = createUtil([], new Date(Date.now()), info); + const util = createUtil([], new Date(Date.now()), info, requestContext); const args = convertToJavaTypes(argument); // Identity is null for API Key let identity = null; diff --git a/packages/amplify-appsync-simulator/src/velocity/util/auth-utils.ts b/packages/amplify-appsync-simulator/src/velocity/util/auth-utils.ts new file mode 100644 index 00000000000..ddd3f668564 --- /dev/null +++ b/packages/amplify-appsync-simulator/src/velocity/util/auth-utils.ts @@ -0,0 +1,17 @@ +import { AmplifyAppSyncSimulatorAuthenticationType } from '../../type-definition'; + +export const authUtils = context => ({ + authType() { + if (context.requestAuthorizationMode === AmplifyAppSyncSimulatorAuthenticationType.API_KEY) { + return 'API Key Authorization'; + } else if (context.requestAuthorizationMode === AmplifyAppSyncSimulatorAuthenticationType.AWS_IAM) { + return 'IAM Authorization'; + } else if (context.requestAuthorizationMode === AmplifyAppSyncSimulatorAuthenticationType.AMAZON_COGNITO_USER_POOLS) { + return 'User Pool Authorization'; + } else if (context.requestAuthorizationMode === AmplifyAppSyncSimulatorAuthenticationType.OPENID_CONNECT) { + return 'Open ID Connect Authorization'; + } + + return 'API Key Authorization'; + }, +}); diff --git a/packages/amplify-appsync-simulator/src/velocity/util/index.ts b/packages/amplify-appsync-simulator/src/velocity/util/index.ts index 4844ddc1eec..3001ea9df11 100644 --- a/packages/amplify-appsync-simulator/src/velocity/util/index.ts +++ b/packages/amplify-appsync-simulator/src/velocity/util/index.ts @@ -3,14 +3,17 @@ import { generalUtils } from './general-utils'; import { dynamodbUtils } from './dynamodb-utils'; import { listUtils } from './list-utils'; import { mapUtils } from './map-utils'; +import { authUtils } from './auth-utils'; import { transformUtils } from './transform'; import { time } from './time'; import { rds } from './rds'; import { str } from './str'; import { math } from './math'; import { GraphQLResolveInfo } from 'graphql'; -export function create(errors = [], now: Date = new Date(), info: GraphQLResolveInfo) { +import { AppSyncGraphQLExecutionContext } from '../../utils/graphql-runner'; +export function create(errors = [], now: Date = new Date(), info: GraphQLResolveInfo, context: AppSyncGraphQLExecutionContext) { return { + ...authUtils(context), ...generalUtils, dynamodb: dynamodbUtils, list: listUtils,