1 | const DynamoDBStreamLabel = require('../functions/dynamodb-stream-label');
|
2 | const test = require('tape');
|
3 | const AWS = require('@mapbox/mock-aws-sdk-js');
|
4 | const http = require('http');
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | test('[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 |
|
28 | test('[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 |
|
48 | test('[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 |
|
65 | test('[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 |
|
85 | test('[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 |
|
104 | test('[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 | });
|