diff --git a/packages/agent/src/utils/query-string.ts b/packages/agent/src/utils/query-string.ts index 1a0ebb7a24..2d148f3549 100644 --- a/packages/agent/src/utils/query-string.ts +++ b/packages/agent/src/utils/query-string.ts @@ -14,6 +14,7 @@ import { ValidationError, } from '@forestadmin/datasource-toolkit'; import { Context } from 'koa'; +import { v4 as uuidv4 } from 'uuid'; import ConditionTreeParser from './condition-tree-parser'; @@ -139,7 +140,7 @@ export default class QueryStringParser { QueryStringParser.VALID_TIMEZONES.add(timezone); } - return { ...context.state.user, timezone }; + return { ...context.state.user, timezone, requestId: uuidv4() }; } static parsePagination(context: Context): Page { diff --git a/packages/agent/test/routes/access/api-chart-collection.test.ts b/packages/agent/test/routes/access/api-chart-collection.test.ts index 5087d15135..4c2efb7172 100644 --- a/packages/agent/test/routes/access/api-chart-collection.test.ts +++ b/packages/agent/test/routes/access/api-chart-collection.test.ts @@ -48,7 +48,7 @@ describe('CollectionApiChartRoute', () => { await route.handleApiChart(context); expect(dataSource.getCollection('books').renderChart).toHaveBeenCalledWith( - { email: 'marty@doclabs.com', timezone: 'Europe/Paris' }, + { email: 'marty@doclabs.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, 'myChart', [123], ); @@ -71,7 +71,7 @@ describe('CollectionApiChartRoute', () => { await route.handleSmartChart(context); expect(dataSource.getCollection('books').renderChart).toHaveBeenCalledWith( - { email: 'marty@doclabs.com', timezone: 'Europe/Paris' }, + { email: 'marty@doclabs.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, 'myChart', [123], ); diff --git a/packages/agent/test/routes/access/api-chart-datasource.test.ts b/packages/agent/test/routes/access/api-chart-datasource.test.ts index 394d84f972..f5448fe07d 100644 --- a/packages/agent/test/routes/access/api-chart-datasource.test.ts +++ b/packages/agent/test/routes/access/api-chart-datasource.test.ts @@ -41,7 +41,7 @@ describe('DataSourceApiChartRoute', () => { await route.handleApiChart(context); expect(dataSource.renderChart).toHaveBeenCalledWith( - { email: 'marty@doclabs.com', timezone: 'Europe/Paris' }, + { email: 'marty@doclabs.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, 'myChart', ); expect(context.response.body).toMatchObject({ @@ -63,7 +63,7 @@ describe('DataSourceApiChartRoute', () => { await route.handleSmartChart(context); expect(dataSource.renderChart).toHaveBeenCalledWith( - { email: 'marty@doclabs.com', timezone: 'Europe/Paris' }, + { email: 'marty@doclabs.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, 'myChart', ); expect(context.response.body).toStrictEqual({ countCurrent: 12 }); diff --git a/packages/agent/test/routes/access/chart.test.ts b/packages/agent/test/routes/access/chart.test.ts index cdf6605507..d8414cf6a7 100644 --- a/packages/agent/test/routes/access/chart.test.ts +++ b/packages/agent/test/routes/access/chart.test.ts @@ -119,7 +119,7 @@ describe('ChartRoute', () => { await chart.handleChart(context); expect(dataSource.getCollection('books').aggregate).toHaveBeenCalledWith( - { ...user, timezone: 'Europe/Paris' }, + { ...user, requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: null, search: null, searchExtended: false, segment: null }, { field: undefined, groups: undefined, operation: 'Count' }, ); @@ -252,7 +252,7 @@ describe('ChartRoute', () => { expect(dataSource.getCollection('books').aggregate).toHaveBeenCalledTimes(1); expect(dataSource.getCollection('books').aggregate).toHaveBeenCalledWith( - { ...user, timezone: 'Europe/Paris' }, + { ...user, requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: { field: 'name', operator: 'Present', value: null }, search: null, @@ -298,7 +298,11 @@ describe('ChartRoute', () => { expect(dataSource.getCollection('books').aggregate).toHaveBeenCalledTimes(1); expect(dataSource.getCollection('books').aggregate).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, { conditionTree: { aggregator: 'And', @@ -382,7 +386,7 @@ describe('ChartRoute', () => { await chart.handleChart(context); expect(dataSource.getCollection('books').aggregate).toHaveBeenCalledWith( - { ...user, timezone: 'Europe/Paris' }, + { ...user, requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: null, search: null, searchExtended: false, segment: null }, { field: undefined, groups: undefined, operation: 'Count' }, ); @@ -423,7 +427,7 @@ describe('ChartRoute', () => { await chart.handleChart(context); expect(dataSource.getCollection('books').aggregate).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: { field: 'title', operator: 'NotContains', value: '[test]' }, search: null, @@ -467,7 +471,7 @@ describe('ChartRoute', () => { await chart.handleChart(context); expect(dataSource.getCollection('books').aggregate).toHaveBeenCalledWith( - { ...user, timezone: 'Europe/Paris' }, + { ...user, requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: null, search: null, searchExtended: false, segment: null }, { field: undefined, groups: [{ field: 'author:firstName' }], operation: 'Count' }, ); @@ -519,7 +523,7 @@ describe('ChartRoute', () => { await chart.handleChart(context); expect(dataSource.getCollection('books').aggregate).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: { field: 'title', operator: 'NotContains', value: '[test]' }, search: null, @@ -573,7 +577,7 @@ describe('ChartRoute', () => { await chart.handleChart(context); expect(dataSource.getCollection('books').aggregate).toHaveBeenCalledWith( - { ...user, timezone: 'Europe/Paris' }, + { ...user, requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: factories.conditionTreeLeaf.build({ operator: 'Present', @@ -638,7 +642,7 @@ describe('ChartRoute', () => { await chart.handleChart(context); expect(dataSource.getCollection('books').aggregate).toHaveBeenCalledWith( - { ...user, timezone: 'Europe/Paris' }, + { ...user, requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -712,7 +716,7 @@ describe('ChartRoute', () => { await chart.handleChart(context); expect(dataSource.getCollection('books').aggregate).toHaveBeenCalledWith( - { ...user, timezone: 'Europe/Paris' }, + { ...user, requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: null, search: null, searchExtended: false, segment: null }, { field: 'id', groups: [{ field: 'author:id' }], operation: 'Sum' }, 2, @@ -758,7 +762,7 @@ describe('ChartRoute', () => { await chart.handleChart(context); expect(dataSource.getCollection('books').aggregate).toHaveBeenCalledWith( - { ...user, timezone: 'Europe/Paris' }, + { ...user, requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: null, search: null, searchExtended: false, segment: null }, { operation: 'Count', field: null, groups: [{ field: 'publisher:id' }] }, 2, @@ -811,7 +815,7 @@ describe('ChartRoute', () => { await chart.handleChart(context); expect(dataSource.getCollection('books').aggregate).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: { field: 'author:name', @@ -868,7 +872,7 @@ describe('ChartRoute', () => { await chart.handleChart(context); expect(dataSource.getCollection('books').aggregate).toHaveBeenCalledWith( - { ...user, timezone: 'Europe/Paris' }, + { ...user, requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: null, search: null, searchExtended: false, segment: null }, { groups: [{ field: 'author:id' }], operation: 'Count' }, 2, diff --git a/packages/agent/test/routes/access/count-related.test.ts b/packages/agent/test/routes/access/count-related.test.ts index 92f2943784..9c37a65a2e 100644 --- a/packages/agent/test/routes/access/count-related.test.ts +++ b/packages/agent/test/routes/access/count-related.test.ts @@ -124,7 +124,7 @@ describe('CountRelatedRoute', () => { dataSource.getCollection('books'), ['2d162303-78bf-599e-b197-93590ac3d315'], 'myBookPersons', - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ search: 'searched argument', searchExtended: false, @@ -223,7 +223,7 @@ describe('CountRelatedRoute', () => { dataSource.getCollection('books'), ['2d162303-78bf-599e-b197-93590ac3d315'], 'myBookPersons', - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ search: 'searched argument', searchExtended: false, diff --git a/packages/agent/test/routes/access/count.test.ts b/packages/agent/test/routes/access/count.test.ts index 188acd20da..245d2c9783 100644 --- a/packages/agent/test/routes/access/count.test.ts +++ b/packages/agent/test/routes/access/count.test.ts @@ -32,7 +32,7 @@ describe('CountRoute', () => { await count.handleCount(context); expect(aggregateSpy).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: null, search: null, searchExtended: false, segment: null }, { operation: 'Count' }, ); @@ -74,7 +74,7 @@ describe('CountRoute', () => { await count.handleCount(context); expect(aggregateSpy).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: { field: 'title', diff --git a/packages/agent/test/routes/access/csv-related.test.ts b/packages/agent/test/routes/access/csv-related.test.ts index 5f770ab8f2..958a6b3b88 100644 --- a/packages/agent/test/routes/access/csv-related.test.ts +++ b/packages/agent/test/routes/access/csv-related.test.ts @@ -122,7 +122,7 @@ describe('CsvRelatedRoute', () => { await readCsv(context.response.body as AsyncGenerator); expect(csvGenerator).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Projection('id', 'name'), 'id,name', paginatedFilter, @@ -134,7 +134,7 @@ describe('CsvRelatedRoute', () => { dataSource.getCollection('books'), ['123e4567-e89b-12d3-a456-111111111111'], 'myPersons', - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, expect.any(PaginatedFilter), expect.any(Projection), ); @@ -216,7 +216,7 @@ describe('CsvRelatedRoute', () => { await readCsv(context.response.body as AsyncGenerator); expect(csvGenerator).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Projection('id', 'name'), 'id,name', paginatedFilter, @@ -228,7 +228,7 @@ describe('CsvRelatedRoute', () => { dataSource.getCollection('books'), ['123e4567-e89b-12d3-a456-111111111111'], 'myPersons', - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, expect.any(PaginatedFilter), expect.any(Projection), ); diff --git a/packages/agent/test/routes/access/csv.test.ts b/packages/agent/test/routes/access/csv.test.ts index 834c654415..b3ea0114e1 100644 --- a/packages/agent/test/routes/access/csv.test.ts +++ b/packages/agent/test/routes/access/csv.test.ts @@ -91,7 +91,7 @@ describe('CsvRoute', () => { await readCsv(context.response.body as AsyncGenerator); expect(csvGenerator).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, ['id', 'name'], 'id,name', paginatedFilter, diff --git a/packages/agent/test/routes/access/get.test.ts b/packages/agent/test/routes/access/get.test.ts index ae069f709f..b2ad7ba061 100644 --- a/packages/agent/test/routes/access/get.test.ts +++ b/packages/agent/test/routes/access/get.test.ts @@ -7,7 +7,6 @@ import { createMockContext } from '@shopify/jest-koa-mocks'; import Get from '../../../src/routes/access/get'; import { HttpCode } from '../../../src/types'; -import QueryStringParser from '../../../src/utils/query-string'; import * as factories from '../../__factories__'; describe('GetRoute', () => { @@ -67,7 +66,7 @@ describe('GetRoute', () => { await get.handleGet(context); expect(dataSource.getCollection('books').list).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: { field: 'id', @@ -128,7 +127,7 @@ describe('GetRoute', () => { ); expect(dataSource.getCollection('books').list).toHaveBeenCalledWith( - QueryStringParser.parseCaller(context), + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new PaginatedFilter({ conditionTree: ConditionTreeFactory.fromPlainObject({ aggregator: 'And', diff --git a/packages/agent/test/routes/access/list-related.test.ts b/packages/agent/test/routes/access/list-related.test.ts index c73668eaf4..d05c4deec5 100644 --- a/packages/agent/test/routes/access/list-related.test.ts +++ b/packages/agent/test/routes/access/list-related.test.ts @@ -103,7 +103,7 @@ describe('ListRelatedRoute', () => { dataSource.getCollection('books'), ['2d162303-78bf-599e-b197-93590ac3d315'], 'myPersons', - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new PaginatedFilter({ search: 'aName', searchExtended: false, @@ -208,7 +208,7 @@ describe('ListRelatedRoute', () => { dataSource.getCollection('books'), ['2d162303-78bf-599e-b197-93590ac3d315'], 'myPersons', - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new PaginatedFilter({ search: 'aName', searchExtended: false, diff --git a/packages/agent/test/routes/access/list.test.ts b/packages/agent/test/routes/access/list.test.ts index ec4353e225..702b68a732 100644 --- a/packages/agent/test/routes/access/list.test.ts +++ b/packages/agent/test/routes/access/list.test.ts @@ -50,7 +50,7 @@ describe('ListRoute', () => { // then expect(collection.list).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: null, search: '2', @@ -113,7 +113,7 @@ describe('ListRoute', () => { // then expect(collection.list).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, { conditionTree: { field: 'title', diff --git a/packages/agent/test/routes/modification/action/action.test.ts b/packages/agent/test/routes/modification/action/action.test.ts index 5b96401a61..8c533bf917 100644 --- a/packages/agent/test/routes/modification/action/action.test.ts +++ b/packages/agent/test/routes/modification/action/action.test.ts @@ -301,7 +301,12 @@ describe('ActionRoute', () => { await route.handleExecute(context); expect(dataSource.getCollection('books').execute).toHaveBeenCalledWith( - { id: '42', email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + id: '42', + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, 'MySingleAction', { firstname: 'John' }, { @@ -516,7 +521,12 @@ describe('ActionRoute', () => { await route.handleHook(context); expect(dataSource.getCollection('books').getForm).toHaveBeenCalledWith( - { id: '42', email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + id: '42', + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, 'MySingleAction', null, { @@ -551,7 +561,12 @@ describe('ActionRoute', () => { await route.handleHook(context); expect(dataSource.getCollection('books').getForm).toHaveBeenCalledWith( - { id: '42', email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + id: '42', + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, 'MySingleAction', { firstname: 'John' }, { @@ -608,7 +623,12 @@ describe('ActionRoute', () => { await route.handleExecute(context); expect(dataSource.getCollection('books').execute).toHaveBeenCalledWith( - { id: '42', email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + id: '42', + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, 'MyBulkAction', { firstname: 'John' }, { @@ -662,7 +682,12 @@ describe('ActionRoute', () => { await route.handleExecute(context); expect(dataSource.getCollection('books').execute).toHaveBeenCalledWith( - { id: '42', email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + id: '42', + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, 'MyGlobalAction', expect.any(Object), new Filter({ @@ -729,7 +754,12 @@ describe('ActionRoute', () => { await route.handleExecute(context); expect(dataSource.getCollection('reviews').execute).toHaveBeenCalledWith( - { id: '42', email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + id: '42', + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, 'MySingleAction', expect.any(Object), new Filter({ @@ -810,7 +840,12 @@ describe('ActionRoute', () => { await route.handleExecute(context); expect(dataSource.getCollection('reviews').execute).toHaveBeenCalledWith( - { id: '42', email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + id: '42', + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, 'MyBulkAction', expect.any(Object), new Filter({ diff --git a/packages/agent/test/routes/modification/associate-related.test.ts b/packages/agent/test/routes/modification/associate-related.test.ts index dee65d1222..96a541716b 100644 --- a/packages/agent/test/routes/modification/associate-related.test.ts +++ b/packages/agent/test/routes/modification/associate-related.test.ts @@ -87,7 +87,7 @@ describe('AssociateRelatedRoute', () => { // then expect(dataSource.getCollection('bookPersons').update).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -207,7 +207,7 @@ describe('AssociateRelatedRoute', () => { // then expect(dataSource.getCollection('librariesBooks').create).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, [ { bookId: '123e4567-e89b-12d3-a456-111111111111', diff --git a/packages/agent/test/routes/modification/create.test.ts b/packages/agent/test/routes/modification/create.test.ts index b151c52027..5596325958 100644 --- a/packages/agent/test/routes/modification/create.test.ts +++ b/packages/agent/test/routes/modification/create.test.ts @@ -63,7 +63,7 @@ describe('CreateRoute', () => { await create.handleCreate(context); expect(collection.create).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, [attributes], ); @@ -145,12 +145,20 @@ describe('CreateRoute', () => { expect(dataSource.getCollection('persons').create).toHaveBeenCalled(); expect(spy.mock.calls).toEqual([ [ - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, new Filter({ conditionTree: new ConditionTreeLeaf('personId', 'Equal', 1) }), { personId: null }, ], [ - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, new Filter({ conditionTree: new ConditionTreeLeaf( 'id', @@ -239,7 +247,7 @@ describe('CreateRoute', () => { await create.handleCreate(context); expect(dataSource.getCollection('passports').create).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, [{ personId: '1d162304-78bf-599e-b197-000000000000' }], ); diff --git a/packages/agent/test/routes/modification/delete-related.test.ts b/packages/agent/test/routes/modification/delete-related.test.ts index f23bca639c..0d964cbb0a 100644 --- a/packages/agent/test/routes/modification/delete-related.test.ts +++ b/packages/agent/test/routes/modification/delete-related.test.ts @@ -73,7 +73,7 @@ describe('DissociateDeleteRelatedRoute > delete', () => { await count.handleDissociateDeleteRelatedRoute(context); expect(dataSource.getCollection('bookPersons').delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -135,7 +135,7 @@ describe('DissociateDeleteRelatedRoute > delete', () => { await count.handleDissociateDeleteRelatedRoute(context); expect(dataSource.getCollection('bookPersons').delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -189,7 +189,11 @@ describe('DissociateDeleteRelatedRoute > delete', () => { await count.handleDissociateDeleteRelatedRoute(context); expect(dataSource.getCollection('bookPersons').delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, new Filter({ conditionTree: factories.conditionTreeLeaf.build({ operator: 'Equal', @@ -306,7 +310,7 @@ describe('DissociateDeleteRelatedRoute > delete', () => { await count.handleDissociateDeleteRelatedRoute(context); expect(dataSource.getCollection('librariesBooks').delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -334,7 +338,7 @@ describe('DissociateDeleteRelatedRoute > delete', () => { ); expect(dataSource.getCollection('libraries').delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -409,7 +413,7 @@ describe('DissociateDeleteRelatedRoute > delete', () => { await count.handleDissociateDeleteRelatedRoute(context); expect(dataSource.getCollection('librariesBooks').delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -437,7 +441,7 @@ describe('DissociateDeleteRelatedRoute > delete', () => { ); expect(dataSource.getCollection('libraries').delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -503,7 +507,11 @@ describe('DissociateDeleteRelatedRoute > delete', () => { await count.handleDissociateDeleteRelatedRoute(context); expect(dataSource.getCollection('librariesBooks').delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, new Filter({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -523,7 +531,11 @@ describe('DissociateDeleteRelatedRoute > delete', () => { ); expect(dataSource.getCollection('libraries').delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, new Filter({ conditionTree: factories.conditionTreeLeaf.build({ operator: 'In', diff --git a/packages/agent/test/routes/modification/delete.test.ts b/packages/agent/test/routes/modification/delete.test.ts index bdc7344db0..7985c2b804 100644 --- a/packages/agent/test/routes/modification/delete.test.ts +++ b/packages/agent/test/routes/modification/delete.test.ts @@ -49,7 +49,7 @@ describe('DeleteRoute', () => { expect(services.authorization.assertCanDelete).toHaveBeenCalledWith(context, 'books'); expect(bookCollection.delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, factories.filter.build({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -111,7 +111,7 @@ describe('DeleteRoute', () => { await deleteRoute.handleDelete(context); expect(bookCollection.delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, factories.filter.build({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -172,7 +172,7 @@ describe('DeleteRoute', () => { expect(services.authorization.assertCanDelete).toHaveBeenCalledWith(context, 'books'); expect(bookCollection.delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, factories.filter.build({ conditionTree: factories.conditionTreeLeaf.build({ operator: 'Equal', @@ -224,7 +224,7 @@ describe('DeleteRoute', () => { expect(services.authorization.assertCanDelete).toHaveBeenCalledWith(context, 'books'); expect(bookCollection.delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, factories.filter.build({ conditionTree: factories.conditionTreeLeaf.build({ operator: 'In', @@ -270,7 +270,11 @@ describe('DeleteRoute', () => { expect(services.authorization.assertCanDelete).toHaveBeenCalledWith(context, 'books'); expect(bookCollection.delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, factories.filter.build({ conditionTree: factories.conditionTreeLeaf.build({ operator: 'NotEqual', @@ -317,7 +321,7 @@ describe('DeleteRoute', () => { expect(services.authorization.assertCanDelete).toHaveBeenCalledWith(context, 'books'); expect(bookCollection.delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, factories.filter.build({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'Or', @@ -396,7 +400,11 @@ describe('DeleteRoute', () => { expect(services.authorization.assertCanDelete).toHaveBeenCalledWith(context, 'books'); expect(bookCollection.delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, factories.filter.build({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'Or', diff --git a/packages/agent/test/routes/modification/dissociate-delete-related.test.ts b/packages/agent/test/routes/modification/dissociate-delete-related.test.ts index 1f3e140f80..c8a8dd387f 100644 --- a/packages/agent/test/routes/modification/dissociate-delete-related.test.ts +++ b/packages/agent/test/routes/modification/dissociate-delete-related.test.ts @@ -202,7 +202,7 @@ describe('DissociateDeleteRelatedRoute', () => { await count.handleDissociateDeleteRelatedRoute(context); expect(dataSource.getCollection('bookPersons').update).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', diff --git a/packages/agent/test/routes/modification/dissociate-related.test.ts b/packages/agent/test/routes/modification/dissociate-related.test.ts index 68a754d82c..7f73e21517 100644 --- a/packages/agent/test/routes/modification/dissociate-related.test.ts +++ b/packages/agent/test/routes/modification/dissociate-related.test.ts @@ -76,7 +76,7 @@ describe('DissociateDeleteRelatedRoute > dissociate', () => { await count.handleDissociateDeleteRelatedRoute(context); expect(dataSource.getCollection('bookPersons').update).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new PaginatedFilter({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -141,7 +141,7 @@ describe('DissociateDeleteRelatedRoute > dissociate', () => { await count.handleDissociateDeleteRelatedRoute(context); expect(dataSource.getCollection('bookPersons').update).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new PaginatedFilter({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -203,7 +203,11 @@ describe('DissociateDeleteRelatedRoute > dissociate', () => { await count.handleDissociateDeleteRelatedRoute(context); expect(dataSource.getCollection('bookPersons').update).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, new PaginatedFilter({ conditionTree: factories.conditionTreeLeaf.build({ operator: 'Equal', @@ -324,7 +328,7 @@ describe('DissociateDeleteRelatedRoute > dissociate', () => { await count.handleDissociateDeleteRelatedRoute(context); expect(dataSource.getCollection('librariesBooks').delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -388,7 +392,7 @@ describe('DissociateDeleteRelatedRoute > dissociate', () => { await count.handleDissociateDeleteRelatedRoute(context); expect(dataSource.getCollection('librariesBooks').delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -449,7 +453,11 @@ describe('DissociateDeleteRelatedRoute > dissociate', () => { await count.handleDissociateDeleteRelatedRoute(context); expect(dataSource.getCollection('librariesBooks').delete).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { + email: 'john.doe@domain.com', + requestId: expect.any(String), + timezone: 'Europe/Paris', + }, new Filter({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', diff --git a/packages/agent/test/routes/modification/update-field.test.ts b/packages/agent/test/routes/modification/update-field.test.ts index 962e452943..0cd7202ac0 100644 --- a/packages/agent/test/routes/modification/update-field.test.ts +++ b/packages/agent/test/routes/modification/update-field.test.ts @@ -106,12 +106,12 @@ describe('UpdateField', () => { }); expect(dataSource.getCollection('books').list).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, expectedFilter, new Projection('itemList'), ); expect(dataSource.getCollection('books').update).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, expectedFilter, { itemList: [ @@ -162,12 +162,12 @@ describe('UpdateField', () => { }); expect(dataSource.getCollection('books').list).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, expectedFilter, new Projection('itemList'), ); expect(dataSource.getCollection('books').update).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, expectedFilter, { itemList: [ diff --git a/packages/agent/test/routes/modification/update-relation.test.ts b/packages/agent/test/routes/modification/update-relation.test.ts index 39fe39675b..44d7d50fef 100644 --- a/packages/agent/test/routes/modification/update-relation.test.ts +++ b/packages/agent/test/routes/modification/update-relation.test.ts @@ -72,7 +72,7 @@ describe('UpdateRelationRoute', () => { await update.handleUpdateRelationRoute(context); expect(dataSource.getCollection('books').update).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -114,7 +114,7 @@ describe('UpdateRelationRoute', () => { await update.handleUpdateRelationRoute(context); expect(dataSource.getCollection('books').update).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ conditionTree: factories.conditionTreeBranch.build({ aggregator: 'And', @@ -190,7 +190,7 @@ describe('UpdateRelationRoute', () => { expect(dataSource.getCollection('owner').update).toHaveBeenCalledTimes(1); expect(dataSource.getCollection('owner').update).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ conditionTree: factories.conditionTreeLeaf.build({ operator: 'Equal', @@ -224,7 +224,7 @@ describe('UpdateRelationRoute', () => { expect(dataSource.getCollection('owner').update).toHaveBeenNthCalledWith( 1, - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ conditionTree: factories.conditionTreeLeaf.build({ operator: 'Equal', @@ -237,7 +237,7 @@ describe('UpdateRelationRoute', () => { expect(dataSource.getCollection('owner').update).toHaveBeenNthCalledWith( 2, - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, new Filter({ conditionTree: factories.conditionTreeLeaf.build({ operator: 'Equal', diff --git a/packages/agent/test/routes/modification/update.test.ts b/packages/agent/test/routes/modification/update.test.ts index d663ad52ba..e09e14c8aa 100644 --- a/packages/agent/test/routes/modification/update.test.ts +++ b/packages/agent/test/routes/modification/update.test.ts @@ -56,12 +56,12 @@ describe('UpdateRoute', () => { }); expect(bookCollection.update).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, expectedFilter, { name: 'foo name' }, ); expect(bookCollection.list).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, expectedFilter, new Projection('id', 'name'), ); @@ -119,12 +119,12 @@ describe('UpdateRoute', () => { }); expect(bookCollection.update).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, expectedFilter, { name: 'foo name' }, ); expect(bookCollection.list).toHaveBeenCalledWith( - { email: 'john.doe@domain.com', timezone: 'Europe/Paris' }, + { email: 'john.doe@domain.com', requestId: expect.any(String), timezone: 'Europe/Paris' }, expectedFilter, new Projection('id', 'name'), ); diff --git a/packages/agent/test/utils/query-string.test.ts b/packages/agent/test/utils/query-string.test.ts index a949a5df82..bd4159e6ad 100644 --- a/packages/agent/test/utils/query-string.test.ts +++ b/packages/agent/test/utils/query-string.test.ts @@ -394,6 +394,7 @@ describe('QueryStringParser', () => { expect(QueryStringParser.parseCaller(context)).toEqual({ email: 'john.doe@domain.com', + requestId: expect.any(String), timezone: 'America/Los_Angeles', }); }); diff --git a/packages/datasource-toolkit/src/interfaces/caller.ts b/packages/datasource-toolkit/src/interfaces/caller.ts index 5cb41edd3b..8621a90265 100644 --- a/packages/datasource-toolkit/src/interfaces/caller.ts +++ b/packages/datasource-toolkit/src/interfaces/caller.ts @@ -5,6 +5,7 @@ export type Caller = { lastName: string; team: string; renderingId: number; + requestId: string; role: string; tags: { [key: string]: string }; timezone: string; diff --git a/packages/datasource-toolkit/test/__factories__/caller.ts b/packages/datasource-toolkit/test/__factories__/caller.ts index 5f83bd1010..35141bcbf2 100644 --- a/packages/datasource-toolkit/test/__factories__/caller.ts +++ b/packages/datasource-toolkit/test/__factories__/caller.ts @@ -8,6 +8,7 @@ export default Factory.define(() => ({ id: 1, lastName: 'domain', renderingId: 1, + requestId: '00000000-0000-0000-0000-000000000000', role: 'role', tags: {}, team: 'team',