From c1644e658c1289d978e9b09e8576a84207ba772b Mon Sep 17 00:00:00 2001 From: Emmanuel Zamora Date: Mon, 6 Jun 2022 14:42:01 -0300 Subject: [PATCH 1/3] SDKS-5789. Add singleSync config parameter --- package-lock.json | 4 ++-- src/types.ts | 8 +++++++- src/utils/settingsValidation/__tests__/index.spec.ts | 1 + src/utils/settingsValidation/__tests__/settings.mocks.ts | 3 ++- src/utils/settingsValidation/index.ts | 3 ++- 5 files changed, 14 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2be921ba..be95b5e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4836,7 +4836,7 @@ "lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", "dev": true }, "lodash.flatten": { @@ -4848,7 +4848,7 @@ "lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", "dev": true }, "lodash.isequal": { diff --git a/src/types.ts b/src/types.ts index dd2cb085..a8d7b45c 100644 --- a/src/types.ts +++ b/src/types.ts @@ -117,7 +117,8 @@ export interface ISettings { splitFilters: SplitIO.SplitFilter[], impressionsMode: SplitIO.ImpressionsMode, __splitFiltersValidation: ISplitFiltersValidation, - localhostMode?: SplitIO.LocalhostFactory + localhostMode?: SplitIO.LocalhostFactory, + singleSync: boolean }, readonly runtime: { ip: string | false @@ -214,6 +215,11 @@ interface ISharedSettings { * @default 'OPTIMIZED' */ impressionsMode?: SplitIO.ImpressionsMode, + /** + * single Sync enables. + * @property {boolean} singleSync + */ + singleSync: boolean } } /** diff --git a/src/utils/settingsValidation/__tests__/index.spec.ts b/src/utils/settingsValidation/__tests__/index.spec.ts index e82d1d99..a9484dcd 100644 --- a/src/utils/settingsValidation/__tests__/index.spec.ts +++ b/src/utils/settingsValidation/__tests__/index.spec.ts @@ -40,6 +40,7 @@ describe('settingsValidation', () => { telemetry: 'https://telemetry.split.io/api', }); expect(settings.sync.impressionsMode).toBe(OPTIMIZED); + expect(settings.sync.singleSync).toBe(false); }); test('override with default impressionMode if provided one is invalid', () => { diff --git a/src/utils/settingsValidation/__tests__/settings.mocks.ts b/src/utils/settingsValidation/__tests__/settings.mocks.ts index 908bfdc4..5e79e487 100644 --- a/src/utils/settingsValidation/__tests__/settings.mocks.ts +++ b/src/utils/settingsValidation/__tests__/settings.mocks.ts @@ -78,7 +78,8 @@ export const fullSettings: ISettings = { validFilters: [], queryString: null, groupedFilters: { byName: [], byPrefix: [] } - } + }, + singleSync: false }, version: 'jest', runtime: { diff --git a/src/utils/settingsValidation/index.ts b/src/utils/settingsValidation/index.ts index 2269721f..1d05a061 100644 --- a/src/utils/settingsValidation/index.ts +++ b/src/utils/settingsValidation/index.ts @@ -83,7 +83,8 @@ export const base = { splitFilters: undefined, // impressions collection mode impressionsMode: OPTIMIZED, - localhostMode: undefined + localhostMode: undefined, + singleSync: false }, // Logger From 19cf490f30fce78b7f922ab3658049d9f671ebb0 Mon Sep 17 00:00:00 2001 From: Emmanuel Zamora Date: Mon, 6 Jun 2022 15:24:08 -0300 Subject: [PATCH 2/3] Add singleSync setting validation and test --- .../__tests__/index.spec.ts | 20 +++++++++++++++++++ src/utils/settingsValidation/index.ts | 5 +++++ 2 files changed, 25 insertions(+) diff --git a/src/utils/settingsValidation/__tests__/index.spec.ts b/src/utils/settingsValidation/__tests__/index.spec.ts index a9484dcd..0ea181e2 100644 --- a/src/utils/settingsValidation/__tests__/index.spec.ts +++ b/src/utils/settingsValidation/__tests__/index.spec.ts @@ -164,6 +164,26 @@ describe('settingsValidation', () => { expect(settingsWithStreamingEnabled.streamingEnabled).toBe(true); // If streamingEnabled is not provided, it will be true. }); + test('singleSync should be overwritable and false by default', () => { + const settingsWithSingleSyncDisabled = settingsValidation({ + core: { + authorizationKey: 'dummy token', + } + }, minimalSettingsParams); + const settingsWithSingleSyncEnabled = settingsValidation({ + core: { + authorizationKey: 'dummy token' + }, + sync: { + singleSync: true + } + }, minimalSettingsParams); + + expect(settingsWithSingleSyncDisabled.sync.singleSync).toBe(false); // If singleSync is not provided, it will be true. + expect(settingsWithSingleSyncEnabled.sync.singleSync).toBe(true); // When creating a setting instance, it will have the provided value for singleSync + + }); + const storageMock = () => { }; const integrationsMock = [() => { }]; diff --git a/src/utils/settingsValidation/index.ts b/src/utils/settingsValidation/index.ts index 1d05a061..277063e8 100644 --- a/src/utils/settingsValidation/index.ts +++ b/src/utils/settingsValidation/index.ts @@ -192,6 +192,11 @@ export function settingsValidation(config: unknown, validationParams: ISettingsV scheduler.pushRetryBackoffBase = fromSecondsToMillis(scheduler.pushRetryBackoffBase); } + // validate singleSync + if (withDefaults.sync.singleSync !== true) { // @ts-ignore, modify readonly prop + withDefaults.sync.singleSync = false; + } + // validate the `splitFilters` settings and parse splits query const splitFiltersValidation = validateSplitFilters(log, withDefaults.sync.splitFilters, withDefaults.mode); withDefaults.sync.splitFilters = splitFiltersValidation.validFilters; From d401084adccfaf0e32446805e5ec8182ff62964b Mon Sep 17 00:00:00 2001 From: Emmanuel Zamora Date: Mon, 6 Jun 2022 15:28:10 -0300 Subject: [PATCH 3/3] fix check --- src/utils/settingsValidation/__tests__/index.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/settingsValidation/__tests__/index.spec.ts b/src/utils/settingsValidation/__tests__/index.spec.ts index 0ea181e2..8b53f43f 100644 --- a/src/utils/settingsValidation/__tests__/index.spec.ts +++ b/src/utils/settingsValidation/__tests__/index.spec.ts @@ -165,7 +165,7 @@ describe('settingsValidation', () => { }); test('singleSync should be overwritable and false by default', () => { - const settingsWithSingleSyncDisabled = settingsValidation({ + const settingsWithSingleSyncDisabled = settingsValidation({ core: { authorizationKey: 'dummy token', }