@@ -5,6 +5,7 @@ package entity_test
55import (
66 "context"
77 "testing"
8+ "time"
89
910 "github.com/stretchr/testify/assert"
1011 "github.com/stretchr/testify/require"
@@ -62,10 +63,11 @@ func setup(t *testing.T, cdcm *mock.CDCStore) entity.Store {
6263 _ , err = iv .CreateOne (context .TODO (), idx )
6364 require .NoError (t , err )
6465
66+ now := time .Now ().UnixNano ()
6567 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 },
6971 }
7072 res , err := nodesColl .InsertMany (context .TODO (), docs (testNodes ))
7173 require .NoError (t , err )
@@ -210,11 +212,12 @@ func TestReadEntitiesFilterReturnMetalabels(t *testing.T) {
210212 q , err := query .Translate ("y=a" )
211213 require .NoError (t , err )
212214
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" }})
214216 require .NoError (t , err )
215217
216218 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" ]},
218221 }
219222 assert .Equal (t , expect , actual )
220223}
@@ -248,6 +251,9 @@ func TestCreateEntitiesMultiple(t *testing.T) {
248251 id1 , _ := primitive .ObjectIDFromHex (ids [0 ])
249252 id2 , _ := primitive .ObjectIDFromHex (ids [1 ])
250253 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" ])
251257 expectEvents := []etre.CDCEvent {
252258 {
253259 Id : gotEvents [0 ].Id , // non-deterministic
@@ -258,7 +264,7 @@ func TestCreateEntitiesMultiple(t *testing.T) {
258264 Caller : username ,
259265 Op : "i" ,
260266 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 },
262268 },
263269 {
264270 Id : gotEvents [1 ].Id , // non-deterministic
@@ -269,7 +275,7 @@ func TestCreateEntitiesMultiple(t *testing.T) {
269275 Caller : username ,
270276 Op : "i" ,
271277 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 },
273279 },
274280 {
275281 Id : gotEvents [2 ].Id , // non-deterministic
@@ -280,7 +286,7 @@ func TestCreateEntitiesMultiple(t *testing.T) {
280286 Caller : username ,
281287 Op : "i" ,
282288 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 },
284290 SetId : "343" ,
285291 SetOp : "something" ,
286292 SetSize : 1 ,
@@ -317,6 +323,7 @@ func TestCreateEntitiesMultiplePartialSuccess(t *testing.T) {
317323
318324 // Only x=5 written/inserted, so only a CDC event for it
319325 id1 , _ := primitive .ObjectIDFromHex (ids [0 ])
326+ upd1 := (* gotEvents [0 ].New )["_updated" ].(int64 )
320327 expectEvents := []etre.CDCEvent {
321328 {
322329 Id : gotEvents [0 ].Id , // non-deterministic
@@ -327,9 +334,10 @@ func TestCreateEntitiesMultiplePartialSuccess(t *testing.T) {
327334 Caller : username ,
328335 Op : "i" ,
329336 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 },
331338 },
332339 }
340+ assert .Greater (t , upd1 , time .Now ().Add (- 10 * time .Second ).UnixNano (), "expected _created/_updated to be within the last 10 seconds" )
333341 assert .Equal (t , expectEvents , gotEvents )
334342}
335343
@@ -368,10 +376,11 @@ func TestUpdateEntities(t *testing.T) {
368376 assert .Len (t , gotDiffs , 1 )
369377 expectDiffs := []etre.Entity {
370378 {
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" ,
375384 },
376385 }
377386 assert .Equal (t , expectDiffs , gotDiffs )
@@ -394,16 +403,18 @@ func TestUpdateEntities(t *testing.T) {
394403 assert .Len (t , gotDiffs , 2 )
395404 expectDiffs = []etre.Entity {
396405 {
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" ,
401411 },
402412 {
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" ,
407418 },
408419 }
409420 assert .Equal (t , expectDiffs , gotDiffs )
@@ -417,15 +428,18 @@ func TestUpdateEntities(t *testing.T) {
417428 id1 , _ := testNodes [0 ]["_id" ].(primitive.ObjectID )
418429 id2 , _ := testNodes [1 ]["_id" ].(primitive.ObjectID )
419430 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 )
420434 expectEvent := []etre.CDCEvent {
421435 {
422436 EntityId : id1 .Hex (),
423437 EntityType : entityType ,
424438 EntityRev : int64 (1 ),
425439 Caller : username ,
426440 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 },
429443 SetId : "111" ,
430444 SetOp : "update-y1" ,
431445 SetSize : 1 ,
@@ -436,8 +450,8 @@ func TestUpdateEntities(t *testing.T) {
436450 EntityRev : int64 (1 ),
437451 Caller : username ,
438452 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 },
441455 SetId : "222" ,
442456 SetOp : "update-y2" ,
443457 SetSize : 1 ,
@@ -448,14 +462,17 @@ func TestUpdateEntities(t *testing.T) {
448462 EntityRev : int64 (1 ),
449463 Caller : username ,
450464 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 },
453467 SetId : "222" ,
454468 SetOp : "update-y2" ,
455469 SetSize : 1 ,
456470 },
457471 }
458472 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" )
459476}
460477
461478func TestUpdateEntitiesById (t * testing.T ) {
@@ -488,10 +505,11 @@ func TestUpdateEntitiesById(t *testing.T) {
488505 require .NoError (t , err )
489506 expectDiffs := []etre.Entity {
490507 {
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" ,
495513 },
496514 }
497515 assert .Equal (t , expectDiffs , gotDiffs )
@@ -513,16 +531,18 @@ func TestUpdateEntitiesById(t *testing.T) {
513531 require .NoError (t , err )
514532 expectDiffs = []etre.Entity {
515533 {
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" ,
520539 },
521540 {
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" ,
526546 },
527547 }
528548 assert .Equal (t , expectDiffs , gotDiffs )
@@ -536,15 +556,18 @@ func TestUpdateEntitiesById(t *testing.T) {
536556 id1 , _ := testNodes [0 ]["_id" ].(primitive.ObjectID )
537557 id2 , _ := testNodes [1 ]["_id" ].(primitive.ObjectID )
538558 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 )
539562 expectEvent := []etre.CDCEvent {
540563 {
541564 EntityId : id1 .Hex (),
542565 EntityType : entityType ,
543566 EntityRev : int64 (1 ),
544567 Caller : username ,
545568 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 },
548571 SetId : "111" ,
549572 SetOp : "update-y1" ,
550573 SetSize : 1 ,
@@ -555,8 +578,8 @@ func TestUpdateEntitiesById(t *testing.T) {
555578 EntityRev : int64 (1 ),
556579 Caller : username ,
557580 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 },
560583 SetId : "222" ,
561584 SetOp : "update-y2" ,
562585 SetSize : 1 ,
@@ -567,13 +590,16 @@ func TestUpdateEntitiesById(t *testing.T) {
567590 EntityRev : int64 (1 ),
568591 Caller : username ,
569592 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 },
572595 SetId : "222" ,
573596 SetOp : "update-y2" ,
574597 SetSize : 1 ,
575598 },
576599 }
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" )
577603 assert .Equal (t , expectEvent , gotEvents )
578604}
579605
0 commit comments