Skip to content

Commit 3acab7c

Browse files
committed
add tests
1 parent 38fda80 commit 3acab7c

7 files changed

+250
-7
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import { describe, it, expect, beforeEach, vi } from 'vitest';
2+
3+
vi.mock('./config_manager_factory', () => {
4+
return {
5+
getPollingConfigManager: vi.fn().mockReturnValueOnce({ foo: 'bar' }),
6+
};
7+
});
8+
9+
vi.mock('../utils/http_request_handler/browser_request_handler', () => {
10+
const BrowserRequestHandler = vi.fn();
11+
return { BrowserRequestHandler };
12+
});
13+
14+
import { getPollingConfigManager, PollingConfigManagerConfig, PollingConfigManagerFactoryOptions } from './config_manager_factory';
15+
import { createPollingProjectConfigManager } from './config_manager_factory.browser';
16+
import { BrowserRequestHandler } from '../utils/http_request_handler/browser_request_handler';
17+
18+
describe('createPollingConfigManager', () => {
19+
const mockGetPollingConfigManager = vi.mocked(getPollingConfigManager);
20+
const MockBrowserRequestHandler = vi.mocked(BrowserRequestHandler);
21+
22+
beforeEach(() => {
23+
mockGetPollingConfigManager.mockClear();
24+
MockBrowserRequestHandler.mockClear();
25+
});
26+
27+
it('creates and returns the instance by calling getPollingConfigManager', () => {
28+
const config = {
29+
sdkKey: 'sdkKey',
30+
};
31+
32+
const projectConfigManager = createPollingProjectConfigManager(config);
33+
expect(Object.is(projectConfigManager, mockGetPollingConfigManager.mock.results[0].value)).toBe(true);
34+
});
35+
36+
it('uses an instance of BrowserRequestHandler as requestHandler', () => {
37+
const config = {
38+
sdkKey: 'sdkKey',
39+
};
40+
41+
const projectConfigManager = createPollingProjectConfigManager(config);
42+
expect(Object.is(mockGetPollingConfigManager.mock.calls[0][0].requestHandler, MockBrowserRequestHandler.mock.instances[0])).toBe(true);
43+
});
44+
45+
it('uses uses autoUpdate = false by default', () => {
46+
const config = {
47+
sdkKey: 'sdkKey',
48+
};
49+
50+
const projectConfigManager = createPollingProjectConfigManager(config);
51+
expect(mockGetPollingConfigManager.mock.calls[0][0].autoUpdate).toBe(false);
52+
});
53+
54+
it('uses the provided options', () => {
55+
const config: PollingConfigManagerConfig = {
56+
datafile: '{}',
57+
jsonSchemaValidator: vi.fn(),
58+
sdkKey: 'sdkKey',
59+
updateInterval: 50000,
60+
autoUpdate: true,
61+
urlTemplate: 'urlTemplate',
62+
datafileAccessToken: 'datafileAccessToken',
63+
cache: { get: vi.fn(), set: vi.fn(), contains: vi.fn(), remove: vi.fn() },
64+
};
65+
66+
const projectConfigManager = createPollingProjectConfigManager(config);
67+
expect(mockGetPollingConfigManager).toHaveBeenNthCalledWith(1, expect.objectContaining(config));
68+
});
69+
});

lib/project_config/config_manager_factory.browser.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { getPollingConfigManager, PollingConfigManagerConfig } from "./config_manager_factory";
2-
import { BrowserRequestHandler } from "../utils/http_request_handler/browser_request_handler";
3-
import { ProjectConfigManager } from "./project_config_manager";
1+
import { getPollingConfigManager, PollingConfigManagerConfig } from './config_manager_factory';
2+
import { BrowserRequestHandler } from '../utils/http_request_handler/browser_request_handler';
3+
import { ProjectConfigManager } from './project_config_manager';
44

55
export const createPollingProjectConfigManager = (config: PollingConfigManagerConfig): ProjectConfigManager => {
66
const defaultConfig = {
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import { describe, it, expect, beforeEach, vi } from 'vitest';
2+
3+
vi.mock('./config_manager_factory', () => {
4+
return {
5+
getPollingConfigManager: vi.fn().mockReturnValueOnce({ foo: 'bar' }),
6+
};
7+
});
8+
9+
vi.mock('../utils/http_request_handler/node_request_handler', () => {
10+
const NodeRequestHandler = vi.fn();
11+
return { NodeRequestHandler };
12+
});
13+
14+
import { getPollingConfigManager, PollingConfigManagerConfig, PollingConfigManagerFactoryOptions } from './config_manager_factory';
15+
import { createPollingProjectConfigManager } from './config_manager_factory.node';
16+
import { NodeRequestHandler } from '../utils/http_request_handler/node_request_handler';
17+
import { DEFAULT_AUTHENTICATED_URL_TEMPLATE, DEFAULT_URL_TEMPLATE } from './config';
18+
19+
describe('createPollingConfigManager', () => {
20+
const mockGetPollingConfigManager = vi.mocked(getPollingConfigManager);
21+
const MockNodeRequestHandler = vi.mocked(NodeRequestHandler);
22+
23+
beforeEach(() => {
24+
mockGetPollingConfigManager.mockClear();
25+
MockNodeRequestHandler.mockClear();
26+
});
27+
28+
it('creates and returns the instance by calling getPollingConfigManager', () => {
29+
const config = {
30+
sdkKey: 'sdkKey',
31+
};
32+
33+
const projectConfigManager = createPollingProjectConfigManager(config);
34+
expect(Object.is(projectConfigManager, mockGetPollingConfigManager.mock.results[0].value)).toBe(true);
35+
});
36+
37+
it('uses an instance of NodeRequestHandler as requestHandler', () => {
38+
const config = {
39+
sdkKey: 'sdkKey',
40+
};
41+
42+
const projectConfigManager = createPollingProjectConfigManager(config);
43+
expect(Object.is(mockGetPollingConfigManager.mock.calls[0][0].requestHandler, MockNodeRequestHandler.mock.instances[0])).toBe(true);
44+
});
45+
46+
it('uses uses autoUpdate = true by default', () => {
47+
const config = {
48+
sdkKey: 'sdkKey',
49+
};
50+
51+
const projectConfigManager = createPollingProjectConfigManager(config);
52+
expect(mockGetPollingConfigManager.mock.calls[0][0].autoUpdate).toBe(true);
53+
});
54+
55+
it('uses the default urlTemplate if datafileAccessToken is not provided', () => {
56+
const config = {
57+
sdkKey: 'sdkKey',
58+
};
59+
60+
const projectConfigManager = createPollingProjectConfigManager(config);
61+
expect(mockGetPollingConfigManager.mock.calls[0][0].urlTemplate).toBe(DEFAULT_URL_TEMPLATE);
62+
});
63+
64+
it('uses the default authenticated urlTemplate if datafileAccessToken is provided', () => {
65+
const config = {
66+
sdkKey: 'sdkKey',
67+
datafileAccessToken: 'datafileAccessToken',
68+
};
69+
70+
const projectConfigManager = createPollingProjectConfigManager(config);
71+
expect(mockGetPollingConfigManager.mock.calls[0][0].urlTemplate).toBe(DEFAULT_AUTHENTICATED_URL_TEMPLATE);
72+
});
73+
74+
it('uses the provided options', () => {
75+
const config: PollingConfigManagerConfig = {
76+
datafile: '{}',
77+
jsonSchemaValidator: vi.fn(),
78+
sdkKey: 'sdkKey',
79+
updateInterval: 50000,
80+
autoUpdate: false,
81+
urlTemplate: 'urlTemplate',
82+
datafileAccessToken: 'datafileAccessToken',
83+
cache: { get: vi.fn(), set: vi.fn(), contains: vi.fn(), remove: vi.fn() },
84+
};
85+
86+
const projectConfigManager = createPollingProjectConfigManager(config);
87+
expect(mockGetPollingConfigManager).toHaveBeenNthCalledWith(1, expect.objectContaining(config));
88+
});
89+
});
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import { describe, it, expect, beforeEach, vi } from 'vitest';
2+
3+
vi.mock('./config_manager_factory', () => {
4+
return {
5+
getPollingConfigManager: vi.fn().mockReturnValueOnce({ foo: 'bar' }),
6+
};
7+
});
8+
9+
vi.mock('../utils/http_request_handler/browser_request_handler', () => {
10+
const BrowserRequestHandler = vi.fn();
11+
return { BrowserRequestHandler };
12+
});
13+
14+
vi.mock('../plugins/key_value_cache/reactNativeAsyncStorageCache', () => {
15+
const ReactNativeAsyncStorageCache = vi.fn();
16+
return { 'default': ReactNativeAsyncStorageCache };
17+
});
18+
19+
import { getPollingConfigManager, PollingConfigManagerConfig, PollingConfigManagerFactoryOptions } from './config_manager_factory';
20+
import { createPollingProjectConfigManager } from './config_manager_factory.react_native';
21+
import { BrowserRequestHandler } from '../utils/http_request_handler/browser_request_handler';
22+
import ReactNativeAsyncStorageCache from '../plugins/key_value_cache/reactNativeAsyncStorageCache';
23+
24+
describe('createPollingConfigManager', () => {
25+
const mockGetPollingConfigManager = vi.mocked(getPollingConfigManager);
26+
const MockBrowserRequestHandler = vi.mocked(BrowserRequestHandler);
27+
const MockReactNativeAsyncStorageCache = vi.mocked(ReactNativeAsyncStorageCache);
28+
29+
beforeEach(() => {
30+
mockGetPollingConfigManager.mockClear();
31+
MockBrowserRequestHandler.mockClear();
32+
MockReactNativeAsyncStorageCache.mockClear();
33+
});
34+
35+
it('creates and returns the instance by calling getPollingConfigManager', () => {
36+
const config = {
37+
sdkKey: 'sdkKey',
38+
};
39+
40+
const projectConfigManager = createPollingProjectConfigManager(config);
41+
expect(Object.is(projectConfigManager, mockGetPollingConfigManager.mock.results[0].value)).toBe(true);
42+
});
43+
44+
it('uses an instance of BrowserRequestHandler as requestHandler', () => {
45+
const config = {
46+
sdkKey: 'sdkKey',
47+
};
48+
49+
const projectConfigManager = createPollingProjectConfigManager(config);
50+
expect(Object.is(mockGetPollingConfigManager.mock.calls[0][0].requestHandler, MockBrowserRequestHandler.mock.instances[0])).toBe(true);
51+
});
52+
53+
it('uses uses autoUpdate = true by default', () => {
54+
const config = {
55+
sdkKey: 'sdkKey',
56+
};
57+
58+
const projectConfigManager = createPollingProjectConfigManager(config);
59+
expect(mockGetPollingConfigManager.mock.calls[0][0].autoUpdate).toBe(true);
60+
});
61+
62+
it('uses an instance of ReactNativeAsyncStorageCache for caching by default', () => {
63+
const config = {
64+
sdkKey: 'sdkKey',
65+
};
66+
67+
const projectConfigManager = createPollingProjectConfigManager(config);
68+
expect(Object.is(mockGetPollingConfigManager.mock.calls[0][0].cache, MockReactNativeAsyncStorageCache.mock.instances[0])).toBe(true);
69+
});
70+
71+
it('uses the provided options', () => {
72+
const config: PollingConfigManagerConfig = {
73+
datafile: '{}',
74+
jsonSchemaValidator: vi.fn(),
75+
sdkKey: 'sdkKey',
76+
updateInterval: 50000,
77+
autoUpdate: false,
78+
urlTemplate: 'urlTemplate',
79+
datafileAccessToken: 'datafileAccessToken',
80+
cache: { get: vi.fn(), set: vi.fn(), contains: vi.fn(), remove: vi.fn() },
81+
};
82+
83+
const projectConfigManager = createPollingProjectConfigManager(config);
84+
expect(mockGetPollingConfigManager).toHaveBeenNthCalledWith(1, expect.objectContaining(config));
85+
});
86+
});

lib/project_config/config_manager_factory.react_native.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { getPollingConfigManager, PollingConfigManagerConfig } from "./config_manager_factory";
2-
import { NodeRequestHandler } from "../utils/http_request_handler/node_request_handler";
2+
import { BrowserRequestHandler } from "../utils/http_request_handler/browser_request_handler";
33
import { ProjectConfigManager } from "./project_config_manager";
44
import ReactNativeAsyncStorageCache from "../plugins/key_value_cache/reactNativeAsyncStorageCache";
55

66
export const createPollingProjectConfigManager = (config: PollingConfigManagerConfig): ProjectConfigManager => {
77
const defaultConfig = {
88
autoUpdate: true,
9-
requestHandler: new NodeRequestHandler(),
9+
requestHandler: new BrowserRequestHandler(),
1010
cache: new ReactNativeAsyncStorageCache(),
1111
};
1212
return getPollingConfigManager({ ...defaultConfig, ...config });

lib/project_config/config_manager_factory.spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import { PollingDatafileManager } from './polling_datafile_manager';
2121
import { ExponentialBackoff, IntervalRepeater } from '../utils/repeater/repeater';
2222
import { getPollingConfigManager } from './config_manager_factory';
2323
import { DEFAULT_UPDATE_INTERVAL } from './config';
24-
import exp from 'constants';
2524

2625
describe('getPollingConfigManager', () => {
2726
const MockProjectConfigManagerImpl = vi.mocked(ProjectConfigManagerImpl);

vitest.config.mts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export default defineConfig({
44
test: {
55
onConsoleLog: () => true,
66
environment: 'happy-dom',
7-
include: ["**/config_manager_factory.spec.ts"],
7+
include: ["**/config_manager_factory.react_native.spec.ts"],
88
typecheck: {
99
tsconfig: 'tsconfig.spec.json',
1010
exclude: ['**/index.react_native.spec.ts'],

0 commit comments

Comments
 (0)