@@ -5,6 +5,7 @@ package entity_test
5
5
import (
6
6
"context"
7
7
"testing"
8
+ "time"
8
9
9
10
"github.com/stretchr/testify/assert"
10
11
"github.com/stretchr/testify/require"
@@ -62,10 +63,11 @@ func setup(t *testing.T, cdcm *mock.CDCStore) entity.Store {
62
63
_ , err = iv .CreateOne (context .TODO (), idx )
63
64
require .NoError (t , err )
64
65
66
+ now := time .Now ().UnixNano ()
65
67
testNodes = []etre.Entity {
66
- {"_type" : entityType , "_rev" : int64 (0 ), "x" : int64 (2 ), "y" : "a" , "z" : int64 (9 ), "foo" : "" },
67
- {"_type" : entityType , "_rev" : int64 (0 ), "x" : int64 (4 ), "y" : "b" , "bar" : "" },
68
- {"_type" : entityType , "_rev" : int64 (0 ), "x" : int64 (6 ), "y" : "b" , "bar" : "" },
68
+ {"_type" : entityType , "_rev" : int64 (0 ), "x" : int64 (2 ), "y" : "a" , "z" : int64 (9 ), "foo" : "" , "_created" : now , "_updated" : now },
69
+ {"_type" : entityType , "_rev" : int64 (0 ), "x" : int64 (4 ), "y" : "b" , "bar" : "" , "_created" : now , "_updated" : now },
70
+ {"_type" : entityType , "_rev" : int64 (0 ), "x" : int64 (6 ), "y" : "b" , "bar" : "" , "_created" : now , "_updated" : now },
69
71
}
70
72
res , err := nodesColl .InsertMany (context .TODO (), docs (testNodes ))
71
73
require .NoError (t , err )
@@ -210,11 +212,12 @@ func TestReadEntitiesFilterReturnMetalabels(t *testing.T) {
210
212
q , err := query .Translate ("y=a" )
211
213
require .NoError (t , err )
212
214
213
- actual , err := store .ReadEntities (entityType , q , etre.QueryFilter {ReturnLabels : []string {"_id" , "_type" , "_rev" , "y" }})
215
+ actual , err := store .ReadEntities (entityType , q , etre.QueryFilter {ReturnLabels : []string {"_id" , "_type" , "_rev" , "y" , "_created" , "_updated" }})
214
216
require .NoError (t , err )
215
217
216
218
expect := []etre.Entity {
217
- {"_id" : testNodes [0 ]["_id" ], "_type" : entityType , "_rev" : int64 (0 ), "y" : "a" },
219
+ {"_id" : testNodes [0 ]["_id" ], "_type" : entityType , "_rev" : int64 (0 ), "y" : "a" ,
220
+ "_created" : testNodes [0 ]["_created" ], "_updated" : testNodes [0 ]["_updated" ]},
218
221
}
219
222
assert .Equal (t , expect , actual )
220
223
}
@@ -248,6 +251,9 @@ func TestCreateEntitiesMultiple(t *testing.T) {
248
251
id1 , _ := primitive .ObjectIDFromHex (ids [0 ])
249
252
id2 , _ := primitive .ObjectIDFromHex (ids [1 ])
250
253
id3 , _ := primitive .ObjectIDFromHex (ids [2 ])
254
+
255
+ createTime , ok := (* gotEvents [0 ].New )["_created" ].(int64 )
256
+ require .True (t , ok , "expected _created to be int64, got %T" , (* gotEvents [0 ].New )["_created" ])
251
257
expectEvents := []etre.CDCEvent {
252
258
{
253
259
Id : gotEvents [0 ].Id , // non-deterministic
@@ -258,7 +264,7 @@ func TestCreateEntitiesMultiple(t *testing.T) {
258
264
Caller : username ,
259
265
Op : "i" ,
260
266
Old : nil ,
261
- New : & etre.Entity {"_id" : id1 , "_type" : entityType , "_rev" : int64 (0 ), "x" : 7 },
267
+ New : & etre.Entity {"_id" : id1 , "_type" : entityType , "_rev" : int64 (0 ), "x" : 7 , "_created" : createTime , "_updated" : createTime },
262
268
},
263
269
{
264
270
Id : gotEvents [1 ].Id , // non-deterministic
@@ -269,7 +275,7 @@ func TestCreateEntitiesMultiple(t *testing.T) {
269
275
Caller : username ,
270
276
Op : "i" ,
271
277
Old : nil ,
272
- New : & etre.Entity {"_id" : id2 , "_type" : entityType , "_rev" : int64 (0 ), "x" : 8 },
278
+ New : & etre.Entity {"_id" : id2 , "_type" : entityType , "_rev" : int64 (0 ), "x" : 8 , "_created" : createTime , "_updated" : createTime },
273
279
},
274
280
{
275
281
Id : gotEvents [2 ].Id , // non-deterministic
@@ -280,7 +286,7 @@ func TestCreateEntitiesMultiple(t *testing.T) {
280
286
Caller : username ,
281
287
Op : "i" ,
282
288
Old : nil ,
283
- New : & etre.Entity {"_id" : id3 , "_type" : entityType , "_rev" : int64 (0 ), "x" : 9 , "_setId" : "343" , "_setOp" : "something" , "_setSize" : 1 },
289
+ New : & etre.Entity {"_id" : id3 , "_type" : entityType , "_rev" : int64 (0 ), "x" : 9 , "_setId" : "343" , "_setOp" : "something" , "_setSize" : 1 , "_created" : createTime , "_updated" : createTime },
284
290
SetId : "343" ,
285
291
SetOp : "something" ,
286
292
SetSize : 1 ,
@@ -317,6 +323,7 @@ func TestCreateEntitiesMultiplePartialSuccess(t *testing.T) {
317
323
318
324
// Only x=5 written/inserted, so only a CDC event for it
319
325
id1 , _ := primitive .ObjectIDFromHex (ids [0 ])
326
+ upd1 := (* gotEvents [0 ].New )["_updated" ].(int64 )
320
327
expectEvents := []etre.CDCEvent {
321
328
{
322
329
Id : gotEvents [0 ].Id , // non-deterministic
@@ -327,9 +334,10 @@ func TestCreateEntitiesMultiplePartialSuccess(t *testing.T) {
327
334
Caller : username ,
328
335
Op : "i" ,
329
336
Old : nil ,
330
- New : & etre.Entity {"_id" : id1 , "_type" : entityType , "_rev" : int64 (0 ), "x" : 5 },
337
+ New : & etre.Entity {"_id" : id1 , "_type" : entityType , "_rev" : int64 (0 ), "x" : 5 , "_created" : upd1 , "_updated" : upd1 },
331
338
},
332
339
}
340
+ assert .Greater (t , upd1 , time .Now ().Add (- 10 * time .Second ).UnixNano (), "expected _created/_updated to be within the last 10 seconds" )
333
341
assert .Equal (t , expectEvents , gotEvents )
334
342
}
335
343
@@ -368,10 +376,11 @@ func TestUpdateEntities(t *testing.T) {
368
376
assert .Len (t , gotDiffs , 1 )
369
377
expectDiffs := []etre.Entity {
370
378
{
371
- "_id" : testNodes [0 ]["_id" ],
372
- "_type" : entityType ,
373
- "_rev" : int64 (0 ),
374
- "y" : "a" ,
379
+ "_id" : testNodes [0 ]["_id" ],
380
+ "_type" : entityType ,
381
+ "_rev" : int64 (0 ),
382
+ "_updated" : testNodes [0 ]["_updated" ],
383
+ "y" : "a" ,
375
384
},
376
385
}
377
386
assert .Equal (t , expectDiffs , gotDiffs )
@@ -394,16 +403,18 @@ func TestUpdateEntities(t *testing.T) {
394
403
assert .Len (t , gotDiffs , 2 )
395
404
expectDiffs = []etre.Entity {
396
405
{
397
- "_id" : testNodes [1 ]["_id" ],
398
- "_type" : entityType ,
399
- "_rev" : int64 (0 ),
400
- "y" : "b" ,
406
+ "_id" : testNodes [1 ]["_id" ],
407
+ "_type" : entityType ,
408
+ "_rev" : int64 (0 ),
409
+ "_updated" : testNodes [1 ]["_updated" ],
410
+ "y" : "b" ,
401
411
},
402
412
{
403
- "_id" : testNodes [2 ]["_id" ],
404
- "_type" : entityType ,
405
- "_rev" : int64 (0 ),
406
- "y" : "b" ,
413
+ "_id" : testNodes [2 ]["_id" ],
414
+ "_type" : entityType ,
415
+ "_rev" : int64 (0 ),
416
+ "_updated" : testNodes [2 ]["_updated" ],
417
+ "y" : "b" ,
407
418
},
408
419
}
409
420
assert .Equal (t , expectDiffs , gotDiffs )
@@ -417,15 +428,18 @@ func TestUpdateEntities(t *testing.T) {
417
428
id1 , _ := testNodes [0 ]["_id" ].(primitive.ObjectID )
418
429
id2 , _ := testNodes [1 ]["_id" ].(primitive.ObjectID )
419
430
id3 , _ := testNodes [2 ]["_id" ].(primitive.ObjectID )
431
+ upd1 := (* gotEvents [0 ].New )["_updated" ].(int64 )
432
+ upd2 := (* gotEvents [1 ].New )["_updated" ].(int64 )
433
+ upd3 := (* gotEvents [2 ].New )["_updated" ].(int64 )
420
434
expectEvent := []etre.CDCEvent {
421
435
{
422
436
EntityId : id1 .Hex (),
423
437
EntityType : entityType ,
424
438
EntityRev : int64 (1 ),
425
439
Caller : username ,
426
440
Op : "u" ,
427
- Old : & etre.Entity {"y" : "a" },
428
- New : & etre.Entity {"y" : "y" },
441
+ Old : & etre.Entity {"y" : "a" , "_updated" : testNodes [ 0 ][ "_updated" ] },
442
+ New : & etre.Entity {"y" : "y" , "_updated" : upd1 },
429
443
SetId : "111" ,
430
444
SetOp : "update-y1" ,
431
445
SetSize : 1 ,
@@ -436,8 +450,8 @@ func TestUpdateEntities(t *testing.T) {
436
450
EntityRev : int64 (1 ),
437
451
Caller : username ,
438
452
Op : "u" ,
439
- Old : & etre.Entity {"y" : "b" },
440
- New : & etre.Entity {"y" : "c" },
453
+ Old : & etre.Entity {"y" : "b" , "_updated" : testNodes [ 0 ][ "_updated" ] },
454
+ New : & etre.Entity {"y" : "c" , "_updated" : upd2 },
441
455
SetId : "222" ,
442
456
SetOp : "update-y2" ,
443
457
SetSize : 1 ,
@@ -448,14 +462,17 @@ func TestUpdateEntities(t *testing.T) {
448
462
EntityRev : int64 (1 ),
449
463
Caller : username ,
450
464
Op : "u" ,
451
- Old : & etre.Entity {"y" : "b" },
452
- New : & etre.Entity {"y" : "c" },
465
+ Old : & etre.Entity {"y" : "b" , "_updated" : testNodes [ 0 ][ "_updated" ] },
466
+ New : & etre.Entity {"y" : "c" , "_updated" : upd3 },
453
467
SetId : "222" ,
454
468
SetOp : "update-y2" ,
455
469
SetSize : 1 ,
456
470
},
457
471
}
458
472
assert .Equal (t , expectEvent , gotEvents )
473
+ assert .Greater (t , upd1 , testNodes [0 ]["_updated" ].(int64 ), "expected _updated to be greater than original value" )
474
+ assert .Greater (t , upd2 , testNodes [1 ]["_updated" ].(int64 ), "expected _updated to be greater than original value" )
475
+ assert .Greater (t , upd3 , testNodes [2 ]["_updated" ].(int64 ), "expected _updated to be greater than original value" )
459
476
}
460
477
461
478
func TestUpdateEntitiesById (t * testing.T ) {
@@ -488,10 +505,11 @@ func TestUpdateEntitiesById(t *testing.T) {
488
505
require .NoError (t , err )
489
506
expectDiffs := []etre.Entity {
490
507
{
491
- "_id" : testNodes [0 ]["_id" ],
492
- "_type" : entityType ,
493
- "_rev" : int64 (0 ),
494
- "y" : "a" ,
508
+ "_id" : testNodes [0 ]["_id" ],
509
+ "_type" : entityType ,
510
+ "_rev" : int64 (0 ),
511
+ "_updated" : testNodes [0 ]["_updated" ],
512
+ "y" : "a" ,
495
513
},
496
514
}
497
515
assert .Equal (t , expectDiffs , gotDiffs )
@@ -513,16 +531,18 @@ func TestUpdateEntitiesById(t *testing.T) {
513
531
require .NoError (t , err )
514
532
expectDiffs = []etre.Entity {
515
533
{
516
- "_id" : testNodes [1 ]["_id" ],
517
- "_type" : entityType ,
518
- "_rev" : int64 (0 ),
519
- "y" : "b" ,
534
+ "_id" : testNodes [1 ]["_id" ],
535
+ "_type" : entityType ,
536
+ "_rev" : int64 (0 ),
537
+ "_updated" : testNodes [1 ]["_updated" ],
538
+ "y" : "b" ,
520
539
},
521
540
{
522
- "_id" : testNodes [2 ]["_id" ],
523
- "_type" : entityType ,
524
- "_rev" : int64 (0 ),
525
- "y" : "b" ,
541
+ "_id" : testNodes [2 ]["_id" ],
542
+ "_type" : entityType ,
543
+ "_rev" : int64 (0 ),
544
+ "_updated" : testNodes [2 ]["_updated" ],
545
+ "y" : "b" ,
526
546
},
527
547
}
528
548
assert .Equal (t , expectDiffs , gotDiffs )
@@ -536,15 +556,18 @@ func TestUpdateEntitiesById(t *testing.T) {
536
556
id1 , _ := testNodes [0 ]["_id" ].(primitive.ObjectID )
537
557
id2 , _ := testNodes [1 ]["_id" ].(primitive.ObjectID )
538
558
id3 , _ := testNodes [2 ]["_id" ].(primitive.ObjectID )
559
+ upd1 := (* gotEvents [0 ].New )["_updated" ].(int64 )
560
+ upd2 := (* gotEvents [1 ].New )["_updated" ].(int64 )
561
+ upd3 := (* gotEvents [2 ].New )["_updated" ].(int64 )
539
562
expectEvent := []etre.CDCEvent {
540
563
{
541
564
EntityId : id1 .Hex (),
542
565
EntityType : entityType ,
543
566
EntityRev : int64 (1 ),
544
567
Caller : username ,
545
568
Op : "u" ,
546
- Old : & etre.Entity {"y" : "a" },
547
- New : & etre.Entity {"y" : "y" },
569
+ Old : & etre.Entity {"y" : "a" , "_updated" : testNodes [ 0 ][ "_updated" ] },
570
+ New : & etre.Entity {"y" : "y" , "_updated" : upd1 },
548
571
SetId : "111" ,
549
572
SetOp : "update-y1" ,
550
573
SetSize : 1 ,
@@ -555,8 +578,8 @@ func TestUpdateEntitiesById(t *testing.T) {
555
578
EntityRev : int64 (1 ),
556
579
Caller : username ,
557
580
Op : "u" ,
558
- Old : & etre.Entity {"y" : "b" },
559
- New : & etre.Entity {"y" : "c" },
581
+ Old : & etre.Entity {"y" : "b" , "_updated" : testNodes [ 1 ][ "_updated" ] },
582
+ New : & etre.Entity {"y" : "c" , "_updated" : upd2 },
560
583
SetId : "222" ,
561
584
SetOp : "update-y2" ,
562
585
SetSize : 1 ,
@@ -567,13 +590,16 @@ func TestUpdateEntitiesById(t *testing.T) {
567
590
EntityRev : int64 (1 ),
568
591
Caller : username ,
569
592
Op : "u" ,
570
- Old : & etre.Entity {"y" : "b" },
571
- New : & etre.Entity {"y" : "c" },
593
+ Old : & etre.Entity {"y" : "b" , "_updated" : testNodes [ 2 ][ "_updated" ] },
594
+ New : & etre.Entity {"y" : "c" , "_updated" : upd3 },
572
595
SetId : "222" ,
573
596
SetOp : "update-y2" ,
574
597
SetSize : 1 ,
575
598
},
576
599
}
600
+ assert .Greater (t , upd1 , testNodes [0 ]["_updated" ].(int64 ), "expected _updated to increase after update" )
601
+ assert .Greater (t , upd2 , testNodes [1 ]["_updated" ].(int64 ), "expected _updated to increase after update" )
602
+ assert .Greater (t , upd3 , testNodes [2 ]["_updated" ].(int64 ), "expected _updated to increase after update" )
577
603
assert .Equal (t , expectEvent , gotEvents )
578
604
}
579
605
0 commit comments