This repository has been archived by the owner on Aug 25, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathserver.dynamodb.ts
166 lines (143 loc) · 7.1 KB
/
server.dynamodb.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/// <reference path="../typings/chai-as-promised/chai-as-promised.d.ts"/>
/// <reference path="../typings/mocha/mocha.d.ts" />
/// <reference path="../typings/es6-polyfill/es6-polyfill.d.ts" />
/// <reference path='../typings/aws-sdk/aws-sdk.d.ts'/>
import DBTypes = require('../core/src/dbtypes');
import Helpers = require('../core/src/utils/helpers');
import TestHelpers = require('./helpers');
import Chai = require('chai');
import ChaiAsPromised = require('chai-as-promised');
Chai.use(ChaiAsPromised);
// Load and init AWS
import AWS = require('aws-sdk');
import Config = require('../server/src/config');
import DynamoDB = require('../server/src/dynamodb');
const credentials = Config.loadCredentials('./server');
const config = Helpers.assign(Config.config, { credentials });
AWS.config.update(credentials);
const db = DynamoDB.createDynamoDBCalls(config);
const player = TestHelpers.createPlayer0();
const modifiedPlayer = Helpers.assign(player, { utcOffset: 10 });
const message0 = TestHelpers.createMessage0();
const modifiedMessage0 = Helpers.assign(message0, { fallbackSent: true });
const message1 = TestHelpers.createMessage1();
const key = TestHelpers.createGameKey();
describe('DB', function () {
describe('addPlayer', function () {
it('should return new player', function () {
const promise = db.addPlayer(player);
return Chai.assert.eventually.deepEqual(promise, player);
})
});
describe('getPlayer', function () {
it('should return the player', function () {
const promise = db.getPlayer(player.email);
return Chai.assert.eventually.deepEqual(promise, player);
})
});
describe('updatePlayer', function () {
it('should return the updated player', function () {
const promise = db.updatePlayer(modifiedPlayer).then(
updatedPlayer => db.getPlayer(player.email)
);
return Chai.assert.eventually.deepEqual(
promise, modifiedPlayer);
})
});
describe('deletePlayer', function () {
it('should return the deleted player', function () {
const deletePromise = db.deletePlayer(player.email);
return Chai.assert.eventually.deepEqual(
deletePromise, modifiedPlayer);
})
});
describe('addMessage', function () {
it('should return new message', function () {
const promise = db.addMessage(message0);
return Chai.assert.eventually.deepEqual(promise, message0);
})
});
describe('getMessage', function () {
it('should return the message', function () {
const promise = db.getMessage(message0.id);
return Chai.assert.eventually.deepEqual(promise, message0);
})
});
describe('getMessages', function () {
it('should return second message with exclusive start key', function () {
const exclusiveStartKey = message0.id;
const maxResults = 1;
const promise = db.addMessage(message1).then(message =>
db.getMessages({exclusiveStartKey, maxResults})
);
return Chai.assert.eventually.deepEqual(promise, {
lastEvaluatedKey: message1.id,
messages: [message1]
});
})
it('should return first message with null start key', function () {
const exclusiveStartKey: string = null;
const maxResults = 1;
const promise = db.getMessages(
{exclusiveStartKey, maxResults});
return Chai.assert.eventually.deepEqual(promise, {
lastEvaluatedKey: message0.id,
messages: [message0]
});
})
it('should return null lastEvaluatedKey', function () {
const exclusiveStartKey: string = null;
const maxResults = 10;
const promise = db.getMessages(
{exclusiveStartKey, maxResults});
return Chai.assert.eventually.deepEqual(promise, {
lastEvaluatedKey: null,
messages: [message0, message1]
});
})
});
describe('updateMessage', function () {
it('should return the updated message', function () {
const fallbackSent = true;
const modifiedMessage = Helpers.assign(
message0, { fallbackSent });
const promise = db.updateMessage(modifiedMessage).then(
updatedMessage => db.getMessage(modifiedMessage.id)
);
return Chai.assert.eventually.deepEqual(
promise, modifiedMessage);
})
});
describe('deleteMessage', function () {
it('should return the deleted message', function () {
const deletePromise = db.deleteMessage(message0.id);
return Chai.assert.eventually.deepEqual(
deletePromise, modifiedMessage0);
})
});
describe('deleteAllMessages', function () {
it('should delete all the player\'s messages in db', function () {
const promise = db.deleteAllMessages(message0.email);
const get0Promise = promise.then(message =>
db.getMessage(message0.id));
const get1Promise = promise.then(message =>
db.getMessage(message1.id));
return Promise.all([
Chai.assert.eventually.isUndefined(get0Promise),
Chai.assert.eventually.isUndefined(get1Promise),
]);
})
});
describe('addGameKey', function () {
it('should return new game key', function () {
const promise = db.addGameKey(key);
return Chai.assert.eventually.deepEqual(promise, key);
})
});
describe('getGameKey', function () {
it('should return the game key', function () {
const promise = db.getGameKey(key.gameKey);
return Chai.assert.eventually.deepEqual(promise, key);
})
});
});