@@ -139,25 +139,35 @@ describe('remote db', function() {
139
139
it (
140
140
'session token handling' ,
141
141
( ) => {
142
- var tokenId
142
+ let tokenId
143
+
144
+ // Fetch all sessions for the account
143
145
return db . sessions ( account . uid )
144
- . then ( function ( sessions ) {
146
+ . then ( sessions => {
145
147
assert . ok ( Array . isArray ( sessions ) , 'sessions is array' )
146
148
assert . equal ( sessions . length , 0 , 'sessions is empty' )
149
+
150
+ // Fetch the email record
147
151
return db . emailRecord ( account . email )
148
152
} )
149
- . then ( function ( emailRecord ) {
153
+ . then ( emailRecord => {
150
154
emailRecord . createdAt = Date . now ( )
151
155
emailRecord . tokenVerificationId = account . tokenVerificationId
156
+
157
+ // Create a session token
152
158
return db . createSessionToken ( emailRecord , 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:41.0) Gecko/20100101 Firefox/41.0' )
153
159
} )
154
- . then ( function ( sessionToken ) {
160
+ . then ( sessionToken => {
155
161
assert . deepEqual ( sessionToken . uid , account . uid )
156
162
tokenId = sessionToken . tokenId
163
+
164
+ // Simulate a cache miss in redis
157
165
redisGetSpy . returns ( P . resolve ( null ) )
166
+
167
+ // Fetch all sessions for the account
158
168
return db . sessions ( account . uid )
159
169
} )
160
- . then ( function ( sessions ) {
170
+ . then ( sessions => {
161
171
assert . equal ( sessions . length , 1 , 'sessions contains one item' )
162
172
assert . equal ( Object . keys ( sessions [ 0 ] ) . length , 16 , 'session has correct number of properties' )
163
173
assert . equal ( typeof sessions [ 0 ] . tokenId , 'string' , 'tokenId property is not a buffer' )
@@ -169,6 +179,8 @@ describe('remote db', function() {
169
179
assert . equal ( sessions [ 0 ] . uaOSVersion , '10.10' , 'uaOSVersion property is correct' )
170
180
assert . equal ( sessions [ 0 ] . uaDeviceType , null , 'uaDeviceType property is correct' )
171
181
assert . equal ( sessions [ 0 ] . lastAccessTime , sessions [ 0 ] . createdAt , 'lastAccessTime property is correct' )
182
+
183
+ // Fetch the session token
172
184
return db . sessionToken ( tokenId )
173
185
} )
174
186
. then ( sessionToken => {
@@ -184,25 +196,30 @@ describe('remote db', function() {
184
196
assert . equal ( sessionToken . emailCode , account . emailCode )
185
197
assert . equal ( sessionToken . emailVerified , account . emailVerified )
186
198
assert . equal ( sessionToken . lifetime < Infinity , true )
187
- return sessionToken
188
- } )
189
- . then ( function ( sessionToken ) {
190
- // override lastAccessTimeUpdates flag
199
+
200
+ // Disable session token updates
191
201
lastAccessTimeUpdates . enabled = false
202
+
203
+ // Attempt to update the session token
192
204
return db . updateSessionToken ( sessionToken )
193
205
} )
194
- . then ( function ( result ) {
195
- assert . equal ( undefined , result )
206
+ . then ( result => {
207
+ assert . equal ( result , undefined )
196
208
assert . equal ( redisSetSpy . lastCall , null , 'session token was not updated if lastAccessTimeUpdates flag is false' )
197
- // reset lastAccessTimeUpdates flag
209
+
210
+ // Enable session token updates
198
211
lastAccessTimeUpdates . enabled = true
212
+
213
+ // Fetch the session token
199
214
return db . sessionToken ( tokenId )
200
215
} )
201
- . then ( function ( sessionToken ) {
216
+ . then ( sessionToken => {
202
217
getGeoDataSpy . returns ( P . resolve ( { location : { state : 'Mordor' , country : 'ME' } } ) )
218
+
219
+ // Update the session token
203
220
return db . updateSessionToken ( sessionToken , 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:41.0) Gecko/20100101 Firefox/41.0' , '1.1.1.1' )
204
221
} )
205
- . then ( function ( sessionTokens ) {
222
+ . then ( ( ) => {
206
223
assert . equal ( redisSetSpy . lastCall . args [ 0 ] , account . uid )
207
224
208
225
const redisSetArgs = JSON . parse ( redisSetSpy . lastCall . args [ 1 ] )
@@ -217,37 +234,43 @@ describe('remote db', function() {
217
234
assert . equal ( token . location . country , 'ME' , 'country is correct' )
218
235
assert . ok ( token . lastAccessTime )
219
236
assert . ok ( token . createdAt )
237
+
238
+ // Fetch the session token
220
239
return db . sessionToken ( tokenId )
221
240
} )
222
- . then ( function ( sessionToken ) {
241
+ . then ( sessionToken => {
223
242
getGeoDataSpy . returns ( P . reject ( ) )
243
+
244
+ // Update the session token
224
245
return db . updateSessionToken ( sessionToken , 'Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0' , '1.1.1.1' )
225
246
} )
226
- . then ( function ( tokens ) {
247
+ . then ( tokens => {
227
248
redisGetSpy . returns ( P . resolve ( JSON . stringify ( tokens ) ) )
249
+
250
+ // Fetch all sessions for the account
228
251
return db . sessions ( account . uid )
229
252
} )
230
- . then ( function ( sessions ) {
253
+ . then ( sessions => {
231
254
assert . equal ( sessions . length , 1 , 'sessions still contains one item' )
232
255
assert . equal ( sessions [ 0 ] . uaBrowser , 'Firefox Mobile' , 'uaBrowser property is correct' )
233
256
assert . equal ( sessions [ 0 ] . uaBrowserVersion , '41' , 'uaBrowserVersion property is correct' )
234
257
assert . equal ( sessions [ 0 ] . uaOS , 'Android' , 'uaOS property is correct' )
235
258
assert . equal ( sessions [ 0 ] . uaOSVersion , '4.4' , 'uaOSVersion property is correct' )
236
259
assert . equal ( sessions [ 0 ] . uaDeviceType , 'mobile' , 'uaDeviceType property is correct' )
237
260
assert . equal ( sessions [ 0 ] . location , null , 'location property is correct' )
261
+
262
+ // Fetch the session token
238
263
return db . sessionToken ( tokenId )
239
264
} )
240
- . then ( function ( sessionToken ) {
265
+ . then ( sessionToken => {
241
266
// this returns previously stored data since sessionToken doesnt read from cache
242
267
assert . equal ( sessionToken . uaBrowser , 'Firefox' )
243
268
assert . equal ( sessionToken . uaBrowserVersion , '41' )
244
269
assert . equal ( sessionToken . uaOS , 'Mac OS X' )
245
270
assert . equal ( sessionToken . uaOSVersion , '10.10' )
246
271
assert . ok ( sessionToken . lastAccessTime >= sessionToken . createdAt )
247
272
assert . ok ( sessionToken . lastAccessTime <= Date . now ( ) )
248
- return sessionToken
249
- } )
250
- . then ( function ( sessionToken ) {
273
+
251
274
const mockTokens = JSON . stringify ( {
252
275
idToNotDelete : {
253
276
uid : sessionToken . uid ,
@@ -259,21 +282,24 @@ describe('remote db', function() {
259
282
}
260
283
} )
261
284
redisGetSpy . returns ( P . resolve ( mockTokens ) )
285
+
286
+ // Delete the session token
262
287
return db . deleteSessionToken ( sessionToken )
263
288
} )
264
- . then ( function ( ) {
289
+ . then ( ( ) => {
265
290
const redisSetArgs = JSON . parse ( redisSetSpy . lastCall . args [ 1 ] )
266
291
assert . equal ( Object . keys ( redisSetArgs ) . length , 1 )
267
292
assert . ok ( redisSetArgs . idToNotDelete )
268
293
294
+ // Attempt to delete the deleted session token
269
295
return db . sessionToken ( tokenId )
270
- . then ( function ( sessionToken ) {
271
- assert ( false , 'The above sessionToken() call should fail, since the sessionToken has been deleted ' )
272
- } , function ( err ) {
273
- assert . equal ( err . errno , 110 , 'sessionToken() fails with the correct error code' )
274
- var msg = 'Error: The authentication token could not be found'
275
- assert . equal ( msg , '' + err , 'sessionToken() fails with the correct message' )
276
- } )
296
+ . then ( sessionToken => {
297
+ assert ( false , 'db. sessionToken should have failed ' )
298
+ } , err => {
299
+ assert . equal ( err . errno , 110 , 'sessionToken() fails with the correct error code' )
300
+ var msg = 'Error: The authentication token could not be found'
301
+ assert . equal ( msg , '' + err , 'sessionToken() fails with the correct message' )
302
+ } )
277
303
} )
278
304
}
279
305
)
0 commit comments