11import '../../../env-test' ;
22import GrouperWorker from '../src' ;
3- import { GroupWorkerTask } from '../types/group-worker-task' ;
4- import { createClient , RedisClientType } from 'redis' ;
5- import { Collection , MongoClient } from 'mongodb' ;
6- import { EventAddons , EventDataAccepted } from '@hawk.so/types' ;
3+ import type { GroupWorkerTask , RepetitionDelta } from '../types/group-worker-task' ;
4+ import type { RedisClientType } from 'redis' ;
5+ import { createClient } from 'redis' ;
6+ import type { Collection } from 'mongodb' ;
7+ import { MongoClient } from 'mongodb' ;
8+ import type { EventAddons , EventDataAccepted } from '@hawk.so/types' ;
79import { MS_IN_SEC } from '../../../lib/utils/consts' ;
810import * as mongodb from 'mongodb' ;
11+ import { patch } from '@n1ru4l/json-patch-plus' ;
912
1013jest . mock ( 'amqplib' ) ;
1114
@@ -374,7 +377,7 @@ describe('GrouperWorker', () => {
374377 } ) . toArray ( ) ) . length ) . toBe ( 2 ) ;
375378 } ) ;
376379
377- test ( 'Should stringify payload`s addons and context fields ' , async ( ) => {
380+ test ( 'Should stringify delta ' , async ( ) => {
378381 const generatedTask = generateTask ( ) ;
379382
380383 await worker . handle ( generateTask ( ) ) ;
@@ -389,35 +392,39 @@ describe('GrouperWorker', () => {
389392
390393 const savedRepetition = await repetitionsCollection . findOne ( { } ) ;
391394
392- expect ( typeof savedRepetition . payload . addons ) . toBe ( 'string' ) ;
393- expect ( typeof savedRepetition . payload . context ) . toBe ( 'string' ) ;
395+ expect ( typeof savedRepetition . delta ) . toBe ( 'string' ) ;
394396 } ) ;
395397
396398 test ( 'Should correctly calculate diff after encoding original event when they are the same' , async ( ) => {
397- await worker . handle ( generateTask ( ) ) ;
398- await worker . handle ( generateTask ( ) ) ;
399+ await worker . handle ( generateTask ( { user : { id : '123' } } ) ) ;
400+ await worker . handle ( generateTask ( { user : { id : '123' } } ) ) ;
399401
400402 const savedRepetition = await repetitionsCollection . findOne ( { } ) ;
401- const savedPayload = savedRepetition . payload as EventDataAccepted < EventAddons > ;
402403
403- expect ( savedPayload . title ) . toBe ( undefined ) ;
404- expect ( savedPayload . type ) . toBe ( undefined ) ;
405- expect ( savedPayload . backtrace ) . toBe ( undefined ) ;
406- expect ( savedPayload . context ) . toBe ( undefined ) ;
407- expect ( savedPayload . addons ) . toBe ( undefined ) ;
408- expect ( savedPayload . release ) . toBe ( undefined ) ;
409- expect ( savedPayload . user ) . toBe ( undefined ) ;
410- expect ( savedPayload . catcherVersion ) . toBe ( undefined ) ;
404+ const savedDelta = savedRepetition . delta as string ;
405+ const parsedDelta = JSON . parse ( savedDelta ) as RepetitionDelta ;
406+
407+ console . log ( 'parsedDelta' , parsedDelta ) ;
408+
409+ expect ( parsedDelta . type ) . toBe ( undefined ) ;
410+ expect ( parsedDelta . backtrace ) . toBe ( undefined ) ;
411+ expect ( parsedDelta . context ) . toBe ( undefined ) ;
412+ expect ( parsedDelta . addons ) . toBe ( undefined ) ;
413+ expect ( parsedDelta . release ) . toBe ( undefined ) ;
414+ expect ( parsedDelta . user ) . toBe ( undefined ) ;
415+ expect ( parsedDelta . catcherVersion ) . toBe ( undefined ) ;
411416
412417 /**
413418 * Timestamp always unique, so it should be present in a stored payload diff
414419 */
415- expect ( savedPayload . timestamp ) . not . toBe ( undefined ) ;
416- expect ( typeof savedPayload . timestamp ) . toBe ( 'number ' ) ;
420+ expect ( parsedDelta . timestamp ) . not . toBe ( undefined ) ;
421+ expect ( typeof parsedDelta . timestamp ) . toBe ( 'object ' ) ;
417422 } ) ;
418423
419424 test ( 'Should correctly calculate diff after encoding original event when they are different' , async ( ) => {
420- await worker . handle ( generateTask ( ) ) ;
425+ const originalGeneratedEvent = generateTask ( ) ;
426+
427+ await worker . handle ( originalGeneratedEvent ) ;
421428
422429 const generatedTask = generateTask ( ) ;
423430
@@ -436,11 +443,33 @@ describe('GrouperWorker', () => {
436443 } ,
437444 } ) ;
438445
446+ const savedEvent = await eventsCollection . findOne ( { } ) ;
439447 const savedRepetition = await repetitionsCollection . findOne ( { } ) ;
440- const savedPayload = savedRepetition . payload as EventDataAccepted < EventAddons > ;
448+ const savedDelta = savedRepetition . delta as string ;
449+ const parsedDelta = JSON . parse ( savedDelta ) as RepetitionDelta ;
441450
442- expect ( savedPayload . context ) . toBe ( '{"testField":9}' ) ;
443- expect ( savedPayload . addons ) . toBe ( '{"vue":{"props":{"test-test":true}}}' ) ;
451+ /**
452+ * Parse context and addons from string to object
453+ */
454+ savedEvent . payload . context = JSON . parse ( savedEvent . payload . context ) ;
455+ savedEvent . payload . addons = JSON . parse ( savedEvent . payload . addons ) ;
456+
457+ expect ( typeof parsedDelta . context ) . toBe ( 'object' ) ;
458+ expect ( typeof parsedDelta . addons ) . toBe ( 'object' ) ;
459+
460+ const patched = patch ( {
461+ left : savedEvent . payload ,
462+ delta : parsedDelta ,
463+ } ) ;
464+
465+ expect ( patched . context ) . toEqual ( {
466+ testField : 9 ,
467+ } ) ;
468+ expect ( patched . addons ) . toEqual ( {
469+ vue : {
470+ props : { 'test-test' : true } ,
471+ } ,
472+ } ) ;
444473 } ) ;
445474 } ) ;
446475
0 commit comments