UNPKG

4.37 kBJavaScriptView Raw
1const DynamoDBStreamLabel = require('../functions/dynamodb-stream-label');
2const test = require('tape');
3const AWS = require('@mapbox/mock-aws-sdk-js');
4const http = require('http');
5
6// Confirm create calls describe table and returns LatestStreamLabel
7// Confirm create handles labelless table
8// Confirm create handles error
9// Confirm update calls create
10// Confirm delete does nothing
11// Confirm manage function parses event and relays LatestStreamLabel through Response
12
13test('[dynamodb-stream-label] create handles errors', assert => {
14 AWS.stub('DynamoDB', 'describeTable', (opts, cb) => {
15 assert.deepEquals(opts, { TableName: 'special-table' }, 'describeTable params');
16 return cb(new Error('random error'));
17 });
18
19 const stream = new DynamoDBStreamLabel('special-table', 'us-east-1');
20
21 stream.create((err) => {
22 assert.equals(err.message, 'random error');
23 AWS.DynamoDB.restore();
24 assert.end();
25 });
26});
27
28test('[dynamodb-stream-label] create handles success', assert => {
29 AWS.stub('DynamoDB', 'describeTable', (opts, cb) => {
30 assert.deepEquals(opts, { TableName: 'special-table' }, 'describeTable params');
31 return cb(null, {
32 Table: {
33 LatestStreamLabel: '2017-03-02T05:00:00.000Z'
34 }
35 });
36 });
37
38 const stream = new DynamoDBStreamLabel('special-table', 'us-east-1');
39
40 stream.create((err, label) => {
41 assert.ifError(err, 'should not error');
42 assert.equals(label, '2017-03-02T05:00:00.000Z', 'stream label');
43 AWS.DynamoDB.restore();
44 assert.end();
45 });
46});
47
48test('[dynamodb-stream-label] create handles missing stream label', assert => {
49 AWS.stub('DynamoDB', 'describeTable', (opts, cb) => {
50 assert.deepEquals(opts, { TableName: 'special-table' }, 'describeTable params');
51 return cb(null, {
52 Table: {}
53 });
54 });
55
56 const stream = new DynamoDBStreamLabel('special-table', 'us-east-1');
57
58 stream.create((err) => {
59 assert.equals(err.message, 'Table is not stream enabled', 'missing label error');
60 AWS.DynamoDB.restore();
61 assert.end();
62 });
63});
64
65test('[dynamodb-stream-label] update does the same thing as create', assert => {
66 AWS.stub('DynamoDB', 'describeTable', (opts, cb) => {
67 assert.deepEquals(opts, { TableName: 'special-table' }, 'describeTable params');
68 return cb(null, {
69 Table: {
70 LatestStreamLabel: '2017-03-02T05:00:00.000Z'
71 }
72 });
73 });
74
75 const stream = new DynamoDBStreamLabel('special-table', 'us-east-1');
76
77 stream.update((err, label) => {
78 assert.ifError(err, 'should not error');
79 assert.equals(label, '2017-03-02T05:00:00.000Z', 'stream label');
80 AWS.DynamoDB.restore();
81 assert.end();
82 });
83});
84
85test('[dynamodb-stream-label] delete does nothing', assert => {
86 const describe = AWS.stub('DynamoDB', 'describeTable', (opts, cb) => {
87 assert.deepEquals(opts, { TableName: 'special-table' }, 'describeTable params');
88 return cb(null, {
89 Table: {
90 LatestStreamLabel: '2017-03-02T05:00:00.000Z'
91 }
92 });
93 });
94
95 const stream = new DynamoDBStreamLabel('special-table', 'us-east-1');
96
97 stream.delete(() => {
98 assert.equals(describe.callCount, 0, 'describe should not be called');
99 AWS.DynamoDB.restore();
100 assert.end();
101 });
102});
103
104test('[dynamodb-stream-label] manage parses events and relays LatestStreamLabel through Response', assert => {
105 AWS.stub('DynamoDB', 'describeTable', (opts, cb) => {
106 assert.deepEquals(opts, { TableName: 'special-table' }, 'describeTable params');
107 return cb(null, {
108 Table: {
109 LatestStreamLabel: '2017-03-02T05:00:00.000Z'
110 }
111 });
112 });
113
114 http.request = (options, cb) => {
115 return {
116 on: function() {
117 return this;
118 },
119 write: () => {},
120 end: () => {
121 return cb();
122 }
123 };
124 };
125
126 DynamoDBStreamLabel.manage({
127 ResponseURL: 'https://api.mapbox.com/hello',
128 PhysicalResourceId: 'abc',
129 StackId: 'abc',
130 LogicalResourceId: 'abc',
131 ResourceProperties: {
132 TableName: 'special-table',
133 TableRegion: 'us-east-1'
134 },
135 RequestId: 'abc',
136 RequestType: 'CREATE'
137 }, {
138 done: (err, body) => {
139 assert.ifError(err, 'should not error');
140 assert.equals(JSON.parse(body).PhysicalResourceId, '2017-03-02T05:00:00.000Z', 'PhysicalResourceId is stream label');
141 AWS.DynamoDB.restore();
142 assert.end();
143 }
144 });
145});