-
Notifications
You must be signed in to change notification settings - Fork 3.9k
/
appsync-mapping-template.test.ts
70 lines (60 loc) · 2.21 KB
/
appsync-mapping-template.test.ts
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
import * as path from 'path';
import { Template } from '@aws-cdk/assertions';
import * as lambda from '@aws-cdk/aws-lambda';
import * as cdk from '@aws-cdk/core';
import * as appsync from '../lib';
let stack: cdk.Stack;
let api: appsync.GraphqlApi;
beforeEach(() => {
// GIVEN
stack = new cdk.Stack();
api = new appsync.GraphqlApi(stack, 'api', {
name: 'api',
schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.lambda.graphql')),
});
});
describe('Lambda Mapping Templates', () => {
// GIVEN
let func: lambda.Function;
const invokeMT = '{"version": "2017-02-28", "operation": "Invoke", "payload": $util.toJson($ctx)}';
const batchMT = '{"version": "2017-02-28", "operation": "BatchInvoke", "payload": $util.toJson($ctx)}';
beforeEach(() => {
func = new lambda.Function(stack, 'func', {
code: lambda.Code.fromAsset(path.join(__dirname, 'verify/lambda-tutorial')),
handler: 'lambda-tutorial.handler',
runtime: lambda.Runtime.NODEJS_14_X,
});
});
test('Lambda request default operation is "Invoke"', () => {
// WHEN
const lambdaDS = api.addLambdaDataSource('LambdaDS', func);
lambdaDS.createResolver('QueryAllPosts', {
typeName: 'Query',
fieldName: 'allPosts',
requestMappingTemplate: appsync.MappingTemplate.lambdaRequest(),
responseMappingTemplate: appsync.MappingTemplate.lambdaResult(),
});
// THEN
Template.fromStack(stack).hasResourceProperties('AWS::AppSync::Resolver', {
FieldName: 'allPosts',
RequestMappingTemplate: invokeMT,
});
});
test('Lambda request supports "BatchInvoke" through custom operation', () => {
// WHEN
const lambdaDS = api.addLambdaDataSource('LambdaDS', func);
lambdaDS.createResolver('PostRelatedPosts', {
typeName: 'Post',
fieldName: 'relatedPosts',
requestMappingTemplate: appsync.MappingTemplate.lambdaRequest('$util.toJson($ctx)', 'BatchInvoke'),
responseMappingTemplate: appsync.MappingTemplate.lambdaResult(),
maxBatchSize: 10,
});
// THEN
Template.fromStack(stack).hasResourceProperties('AWS::AppSync::Resolver', {
FieldName: 'relatedPosts',
RequestMappingTemplate: batchMT,
MaxBatchSize: 10,
});
});
});