Skip to content

Commit ab05253

Browse files
authored
chore(test): Streaming mock fixes. Mock cleanup. (#549)
1 parent c77339e commit ab05253

File tree

5 files changed

+32
-45
lines changed

5 files changed

+32
-45
lines changed

packages/shared/mocks/src/crypto.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
import type { Hasher } from '@common';
22

3-
// eslint-disable-next-line import/no-mutable-exports
4-
export let hasher: Hasher;
5-
63
export const setupCrypto = () => {
74
let counter = 0;
8-
hasher = {
9-
update: jest.fn(() => hasher),
5+
const hasher = {
6+
update: jest.fn((): Hasher => hasher),
107
digest: jest.fn(() => '1234567890123456'),
118
};
129

packages/shared/mocks/src/hasher.ts

Lines changed: 0 additions & 25 deletions
This file was deleted.

packages/shared/mocks/src/streamingProcessor.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ export const setupMockStreamingProcessor = (
1616
errorTimeoutSeconds: number = 0,
1717
initTimeoutMs: number = 0,
1818
) => {
19+
let initTimeoutHandle: any;
20+
let patchTimeoutHandle: any;
21+
let deleteTimeoutHandle: any;
22+
1923
MockStreamingProcessor.mockImplementation(
2024
(
2125
sdkKey: string,
@@ -28,26 +32,36 @@ export const setupMockStreamingProcessor = (
2832
) => ({
2933
start: jest.fn(async () => {
3034
if (shouldError) {
31-
setTimeout(() => {
35+
initTimeoutHandle = setTimeout(() => {
3236
const unauthorized = new Error('test-error') as LDStreamingError;
3337
// @ts-ignore
3438
unauthorized.code = 401;
3539
errorHandler(unauthorized);
3640
}, errorTimeoutSeconds * 1000);
3741
} else {
3842
// execute put which will resolve the identify promise
39-
setTimeout(() => listeners.get('put')?.processJson(putResponseJson), initTimeoutMs);
43+
initTimeoutHandle = setTimeout(() => {
44+
listeners.get('put')?.processJson(putResponseJson);
45+
}, initTimeoutMs);
4046

4147
if (patchResponseJson) {
42-
setTimeout(() => listeners.get('patch')?.processJson(patchResponseJson));
48+
patchTimeoutHandle = setTimeout(() =>
49+
listeners.get('patch')?.processJson(patchResponseJson),
50+
);
4351
}
4452

4553
if (deleteResponseJson) {
46-
setTimeout(() => listeners.get('delete')?.processJson(deleteResponseJson));
54+
deleteTimeoutHandle = setTimeout(() =>
55+
listeners.get('delete')?.processJson(deleteResponseJson),
56+
);
4757
}
4858
}
4959
}),
50-
close: jest.fn(),
60+
close: jest.fn(() => {
61+
clearTimeout(initTimeoutHandle);
62+
clearTimeout(patchTimeoutHandle);
63+
clearTimeout(deleteTimeoutHandle);
64+
}),
5165
eventSource: {},
5266
}),
5367
);

packages/shared/sdk-client/src/LDClientImpl.test.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@ describe('sdk-client object', () => {
5757
defaultPutResponse = clone<Flags>(mockResponseJson);
5858
setupMockStreamingProcessor(false, defaultPutResponse);
5959
mockPlatform.crypto.randomUUID.mockReturnValue('random1');
60-
const hasher: Hasher = {
61-
update: jest.fn(() => hasher),
60+
const hasher = {
61+
update: jest.fn((): Hasher => hasher),
6262
digest: jest.fn(() => 'digested1'),
6363
};
64-
mockPlatform.crypto.createHash = jest.fn(() => hasher);
64+
mockPlatform.crypto.createHash.mockReturnValue(hasher);
6565

6666
ldc = new LDClientImpl(testSdkKey, AutoEnvAttributes.Enabled, mockPlatform, {
6767
logger,
@@ -72,7 +72,8 @@ describe('sdk-client object', () => {
7272
.mockReturnValue('/stream/path');
7373
});
7474

75-
afterEach(() => {
75+
afterEach(async () => {
76+
await ldc.close();
7677
jest.resetAllMocks();
7778
});
7879

packages/shared/sdk-server/__tests__/evaluation/Bucketer.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,11 @@ describe('Bucketer.test', () => {
8585
],
8686
])('given bucketing parameters', (context, key, attr, salt, kindForRollout, seed, expected) => {
8787
it('hashes the correct string', () => {
88-
const hasher: Hasher = {
89-
update: jest.fn(() => hasher),
88+
const hasher = {
89+
update: jest.fn((): Hasher => hasher),
9090
digest: jest.fn(() => '1234567890123456'),
9191
};
92-
mockPlatform.crypto.createHash = jest.fn(() => hasher);
92+
mockPlatform.crypto.createHash.mockReturnValue(hasher);
9393

9494
const validatedContext = Context.fromLDContext(context);
9595
const attrRef = new AttributeReference(attr);
@@ -120,11 +120,11 @@ describe('Bucketer.test', () => {
120120
['bad', 'key'],
121121
])('when given a non string or integer reference', (kind, attr) => {
122122
it('buckets to 0 when given bad data', () => {
123-
const hasher: Hasher = {
124-
update: jest.fn(() => hasher),
123+
const hasher = {
124+
update: jest.fn((): Hasher => hasher),
125125
digest: jest.fn(() => 'digested1'),
126126
};
127-
mockPlatform.crypto.createHash = jest.fn(() => hasher);
127+
mockPlatform.crypto.createHash.mockReturnValue(hasher);
128128

129129
const validatedContext = Context.fromLDContext({
130130
key: 'context-key',

0 commit comments

Comments
 (0)