Skip to content

Commit 93bc874

Browse files
committed
factory tests
1 parent a8f783d commit 93bc874

6 files changed

+321
-22
lines changed
Lines changed: 90 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,96 @@
1-
import { describe, it, expect, beforeEach, vi } from 'vitest';
1+
vi.mock('../utils/http_request_handler/browser_request_handler', () => {
2+
return { BrowserRequestHandler: vi.fn() };
3+
});
4+
5+
vi.mock('./odp_manager_factory', () => {
6+
return { getOdpManager: vi.fn().mockImplementation(() => ({})) };
7+
});
8+
29

3-
import { createOdpManager } from './odp_manager_factory.browser';
4-
import { getMockRequestHandler } from '../tests/mock/mock_request_handler';
10+
import { describe, it, expect, beforeEach, vi } from 'vitest';
11+
import { getOdpManager, OdpManagerOptions } from './odp_manager_factory';
12+
import { BROWSER_DEFAULT_API_TIMEOUT, createOdpManager } from './odp_manager_factory.browser';
13+
import { BrowserRequestHandler } from '../utils/http_request_handler/browser_request_handler';
14+
import { pixelApiRequestGenerator } from './event_manager/odp_event_api_manager';
515

616
describe('createOdpManager', () => {
17+
const MockBrowserRequestHandler = vi.mocked(BrowserRequestHandler);
18+
const mockGetOdpManager = vi.mocked(getOdpManager);
19+
20+
beforeEach(() => {
21+
MockBrowserRequestHandler.mockClear();
22+
mockGetOdpManager.mockClear();
23+
});
24+
725
it('should use BrowserRequestHandler with the provided timeout as the segment request handler', () => {
8-
const odpManager = createOdpManager({ segmentsApiTimeout: 1000 });
9-
expect((odpManager as any).segmentRequestHandler.timeout).toBe(1000);
26+
const odpManager = createOdpManager({ segmentsApiTimeout: 3456 });
27+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
28+
const { segmentRequestHandler } = mockGetOdpManager.mock.calls[0][0];
29+
expect(segmentRequestHandler).toBe(MockBrowserRequestHandler.mock.instances[0]);
30+
const requestHandlerOptions = MockBrowserRequestHandler.mock.calls[0][0];
31+
expect(requestHandlerOptions?.timeout).toBe(3456);
32+
});
33+
34+
it('should use BrowserRequestHandler with the browser default timeout as the segment request handler', () => {
35+
const odpManager = createOdpManager({});
36+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
37+
const { segmentRequestHandler } = mockGetOdpManager.mock.calls[0][0];
38+
expect(segmentRequestHandler).toBe(MockBrowserRequestHandler.mock.instances[0]);
39+
const requestHandlerOptions = MockBrowserRequestHandler.mock.calls[0][0];
40+
expect(requestHandlerOptions?.timeout).toBe(BROWSER_DEFAULT_API_TIMEOUT);
41+
});
42+
43+
it('should use BrowserRequestHandler with the provided timeout as the event request handler', () => {
44+
const odpManager = createOdpManager({ eventApiTimeout: 2345 });
45+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
46+
const { eventRequestHandler } = mockGetOdpManager.mock.calls[0][0];
47+
expect(eventRequestHandler).toBe(MockBrowserRequestHandler.mock.instances[1]);
48+
const requestHandlerOptions = MockBrowserRequestHandler.mock.calls[1][0];
49+
expect(requestHandlerOptions?.timeout).toBe(2345);
50+
});
51+
52+
it('should use BrowserRequestHandler with the browser default timeout as the event request handler', () => {
53+
const odpManager = createOdpManager({});
54+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
55+
const { eventRequestHandler } = mockGetOdpManager.mock.calls[0][0];
56+
expect(eventRequestHandler).toBe(MockBrowserRequestHandler.mock.instances[1]);
57+
const requestHandlerOptions = MockBrowserRequestHandler.mock.calls[1][0];
58+
expect(requestHandlerOptions?.timeout).toBe(BROWSER_DEFAULT_API_TIMEOUT);
59+
});
60+
61+
it('should use batchSize 1 if batchSize is not provided', () => {
62+
const odpManager = createOdpManager({});
63+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
64+
const { eventBatchSize } = mockGetOdpManager.mock.calls[0][0];
65+
expect(eventBatchSize).toBe(1);
66+
});
67+
68+
it('should use batchSize 1 event if some other batchSize value is provided', () => {
69+
const odpManager = createOdpManager({ eventBatchSize: 99 });
70+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
71+
const { eventBatchSize } = mockGetOdpManager.mock.calls[0][0];
72+
expect(eventBatchSize).toBe(1);
73+
});
74+
75+
it('uses the pixel api request generator', () => {
76+
const odpManager = createOdpManager({ });
77+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
78+
const { eventRequestGenerator } = mockGetOdpManager.mock.calls[0][0];
79+
expect(eventRequestGenerator).toBe(pixelApiRequestGenerator);
80+
});
81+
82+
it('uses the passed options for relevant fields', () => {
83+
const options: OdpManagerOptions = {
84+
segmentsCache: {} as any,
85+
segmentsCacheSize: 11,
86+
segmentsCacheTimeout: 2025,
87+
segmentManager: {} as any,
88+
eventFlushInterval: 2222,
89+
eventManager: {} as any,
90+
userAgentParser: {} as any,
91+
};
92+
const odpManager = createOdpManager(options);
93+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
94+
expect(mockGetOdpManager).toHaveBeenNthCalledWith(1, expect.objectContaining(options));
1095
});
1196
});
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
vi.mock('../utils/http_request_handler/node_request_handler', () => {
2+
return { NodeRequestHandler: vi.fn() };
3+
});
4+
5+
vi.mock('./odp_manager_factory', () => {
6+
return { getOdpManager: vi.fn().mockImplementation(() => ({})) };
7+
});
8+
9+
10+
import { describe, it, expect, beforeEach, vi } from 'vitest';
11+
import { getOdpManager, OdpManagerOptions } from './odp_manager_factory';
12+
import { NODE_DEFAULT_API_TIMEOUT, NODE_DEFAULT_BATCH_SIZE, NODE_DEFAULT_FLUSH_INTERVAL, createOdpManager } from './odp_manager_factory.node';
13+
import { NodeRequestHandler } from '../utils/http_request_handler/node_request_handler';
14+
import { eventApiRequestGenerator } from './event_manager/odp_event_api_manager';
15+
16+
describe('createOdpManager', () => {
17+
const MockNodeRequestHandler = vi.mocked(NodeRequestHandler);
18+
const mockGetOdpManager = vi.mocked(getOdpManager);
19+
20+
beforeEach(() => {
21+
MockNodeRequestHandler.mockClear();
22+
mockGetOdpManager.mockClear();
23+
});
24+
25+
it('should use NodeRequestHandler with the provided timeout as the segment request handler', () => {
26+
const odpManager = createOdpManager({ segmentsApiTimeout: 3456 });
27+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
28+
const { segmentRequestHandler } = mockGetOdpManager.mock.calls[0][0];
29+
expect(segmentRequestHandler).toBe(MockNodeRequestHandler.mock.instances[0]);
30+
const requestHandlerOptions = MockNodeRequestHandler.mock.calls[0][0];
31+
expect(requestHandlerOptions?.timeout).toBe(3456);
32+
});
33+
34+
it('should use NodeRequestHandler with the node default timeout as the segment request handler', () => {
35+
const odpManager = createOdpManager({});
36+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
37+
const { segmentRequestHandler } = mockGetOdpManager.mock.calls[0][0];
38+
expect(segmentRequestHandler).toBe(MockNodeRequestHandler.mock.instances[0]);
39+
const requestHandlerOptions = MockNodeRequestHandler.mock.calls[0][0];
40+
expect(requestHandlerOptions?.timeout).toBe(NODE_DEFAULT_API_TIMEOUT);
41+
});
42+
43+
it('should use NodeRequestHandler with the provided timeout as the event request handler', () => {
44+
const odpManager = createOdpManager({ eventApiTimeout: 2345 });
45+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
46+
const { eventRequestHandler } = mockGetOdpManager.mock.calls[0][0];
47+
expect(eventRequestHandler).toBe(MockNodeRequestHandler.mock.instances[1]);
48+
const requestHandlerOptions = MockNodeRequestHandler.mock.calls[1][0];
49+
expect(requestHandlerOptions?.timeout).toBe(2345);
50+
});
51+
52+
it('should use NodeRequestHandler with the node default timeout as the event request handler', () => {
53+
const odpManager = createOdpManager({});
54+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
55+
const { eventRequestHandler } = mockGetOdpManager.mock.calls[0][0];
56+
expect(eventRequestHandler).toBe(MockNodeRequestHandler.mock.instances[1]);
57+
const requestHandlerOptions = MockNodeRequestHandler.mock.calls[1][0];
58+
expect(requestHandlerOptions?.timeout).toBe(NODE_DEFAULT_API_TIMEOUT);
59+
});
60+
61+
it('uses the event api request generator', () => {
62+
const odpManager = createOdpManager({ });
63+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
64+
const { eventRequestGenerator } = mockGetOdpManager.mock.calls[0][0];
65+
expect(eventRequestGenerator).toBe(eventApiRequestGenerator);
66+
});
67+
68+
it('should use the provided eventBatchSize', () => {
69+
const odpManager = createOdpManager({ eventBatchSize: 99 });
70+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
71+
const { eventBatchSize } = mockGetOdpManager.mock.calls[0][0];
72+
expect(eventBatchSize).toBe(99);
73+
});
74+
75+
it('should use the node default eventBatchSize if none provided', () => {
76+
const odpManager = createOdpManager({});
77+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
78+
const { eventBatchSize } = mockGetOdpManager.mock.calls[0][0];
79+
expect(eventBatchSize).toBe(NODE_DEFAULT_BATCH_SIZE);
80+
});
81+
82+
it('should use the provided eventFlushInterval', () => {
83+
const odpManager = createOdpManager({ eventFlushInterval: 9999 });
84+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
85+
const { eventFlushInterval } = mockGetOdpManager.mock.calls[0][0];
86+
expect(eventFlushInterval).toBe(9999);
87+
});
88+
89+
it('should use the node default eventFlushInterval if none provided', () => {
90+
const odpManager = createOdpManager({});
91+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
92+
const { eventFlushInterval } = mockGetOdpManager.mock.calls[0][0];
93+
expect(eventFlushInterval).toBe(NODE_DEFAULT_FLUSH_INTERVAL);
94+
});
95+
96+
it('uses the passed options for relevant fields', () => {
97+
const options: OdpManagerOptions = {
98+
segmentsCache: {} as any,
99+
segmentsCacheSize: 11,
100+
segmentsCacheTimeout: 2025,
101+
segmentManager: {} as any,
102+
eventManager: {} as any,
103+
userAgentParser: {} as any,
104+
};
105+
const odpManager = createOdpManager(options);
106+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
107+
expect(mockGetOdpManager).toHaveBeenNthCalledWith(1, expect.objectContaining(options));
108+
});
109+
});

lib/odp/odp_manager_factory.node.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,13 @@ export const NODE_DEFAULT_BATCH_SIZE = 10;
88
export const NODE_DEFAULT_FLUSH_INTERVAL = 1000;
99

1010
export const createOdpManager = (options: OdpManagerOptions): OdpManager => {
11-
let defaultRequestHandler = new NodeRequestHandler({ timeout: NODE_DEFAULT_API_TIMEOUT });
12-
13-
const segmentRequestHandler = options.segmentsApiTimeout !== undefined ?
14-
new NodeRequestHandler({ timeout: options.segmentsApiTimeout }) :
15-
defaultRequestHandler;
11+
const segmentRequestHandler = new NodeRequestHandler({
12+
timeout: options.segmentsApiTimeout || NODE_DEFAULT_API_TIMEOUT,
13+
});
1614

17-
const eventRequestHandler = options.eventApiTimeout !== undefined ?
18-
new NodeRequestHandler({ timeout: options.eventApiTimeout }) :
19-
defaultRequestHandler;
15+
const eventRequestHandler = new NodeRequestHandler({
16+
timeout: options.eventApiTimeout || NODE_DEFAULT_API_TIMEOUT,
17+
});
2018

2119
return getOdpManager({
2220
...options,
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
vi.mock('../utils/http_request_handler/browser_request_handler', () => {
2+
return { BrowserRequestHandler: vi.fn() };
3+
});
4+
5+
vi.mock('./odp_manager_factory', () => {
6+
return { getOdpManager: vi.fn().mockImplementation(() => ({})) };
7+
});
8+
9+
10+
import { describe, it, expect, beforeEach, vi } from 'vitest';
11+
import { getOdpManager, OdpManagerOptions } from './odp_manager_factory';
12+
import { RN_DEFAULT_API_TIMEOUT, RN_DEFAULT_BATCH_SIZE, RN_DEFAULT_FLUSH_INTERVAL, createOdpManager } from './odp_manager_factory.react_native';
13+
import { BrowserRequestHandler } from '../utils/http_request_handler/browser_request_handler'
14+
import { eventApiRequestGenerator } from './event_manager/odp_event_api_manager';
15+
16+
describe('createOdpManager', () => {
17+
const MockBrowserRequestHandler = vi.mocked(BrowserRequestHandler);
18+
const mockGetOdpManager = vi.mocked(getOdpManager);
19+
20+
beforeEach(() => {
21+
MockBrowserRequestHandler.mockClear();
22+
mockGetOdpManager.mockClear();
23+
});
24+
25+
it('should use BrowserRequestHandler with the provided timeout as the segment request handler', () => {
26+
const odpManager = createOdpManager({ segmentsApiTimeout: 3456 });
27+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
28+
const { segmentRequestHandler } = mockGetOdpManager.mock.calls[0][0];
29+
expect(segmentRequestHandler).toBe(MockBrowserRequestHandler.mock.instances[0]);
30+
const requestHandlerOptions = MockBrowserRequestHandler.mock.calls[0][0];
31+
expect(requestHandlerOptions?.timeout).toBe(3456);
32+
});
33+
34+
it('should use BrowserRequestHandler with the node default timeout as the segment request handler', () => {
35+
const odpManager = createOdpManager({});
36+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
37+
const { segmentRequestHandler } = mockGetOdpManager.mock.calls[0][0];
38+
expect(segmentRequestHandler).toBe(MockBrowserRequestHandler.mock.instances[0]);
39+
const requestHandlerOptions = MockBrowserRequestHandler.mock.calls[0][0];
40+
expect(requestHandlerOptions?.timeout).toBe(RN_DEFAULT_API_TIMEOUT);
41+
});
42+
43+
it('should use BrowserRequestHandler with the provided timeout as the event request handler', () => {
44+
const odpManager = createOdpManager({ eventApiTimeout: 2345 });
45+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
46+
const { eventRequestHandler } = mockGetOdpManager.mock.calls[0][0];
47+
expect(eventRequestHandler).toBe(MockBrowserRequestHandler.mock.instances[1]);
48+
const requestHandlerOptions = MockBrowserRequestHandler.mock.calls[1][0];
49+
expect(requestHandlerOptions?.timeout).toBe(2345);
50+
});
51+
52+
it('should use BrowserRequestHandler with the node default timeout as the event request handler', () => {
53+
const odpManager = createOdpManager({});
54+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
55+
const { eventRequestHandler } = mockGetOdpManager.mock.calls[0][0];
56+
expect(eventRequestHandler).toBe(MockBrowserRequestHandler.mock.instances[1]);
57+
const requestHandlerOptions = MockBrowserRequestHandler.mock.calls[1][0];
58+
expect(requestHandlerOptions?.timeout).toBe(RN_DEFAULT_API_TIMEOUT);
59+
});
60+
61+
it('uses the event api request generator', () => {
62+
const odpManager = createOdpManager({ });
63+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
64+
const { eventRequestGenerator } = mockGetOdpManager.mock.calls[0][0];
65+
expect(eventRequestGenerator).toBe(eventApiRequestGenerator);
66+
});
67+
68+
it('should use the provided eventBatchSize', () => {
69+
const odpManager = createOdpManager({ eventBatchSize: 99 });
70+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
71+
const { eventBatchSize } = mockGetOdpManager.mock.calls[0][0];
72+
expect(eventBatchSize).toBe(99);
73+
});
74+
75+
it('should use the react_native default eventBatchSize if none provided', () => {
76+
const odpManager = createOdpManager({});
77+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
78+
const { eventBatchSize } = mockGetOdpManager.mock.calls[0][0];
79+
expect(eventBatchSize).toBe(RN_DEFAULT_BATCH_SIZE);
80+
});
81+
82+
it('should use the provided eventFlushInterval', () => {
83+
const odpManager = createOdpManager({ eventFlushInterval: 9999 });
84+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
85+
const { eventFlushInterval } = mockGetOdpManager.mock.calls[0][0];
86+
expect(eventFlushInterval).toBe(9999);
87+
});
88+
89+
it('should use the react_native default eventFlushInterval if none provided', () => {
90+
const odpManager = createOdpManager({});
91+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
92+
const { eventFlushInterval } = mockGetOdpManager.mock.calls[0][0];
93+
expect(eventFlushInterval).toBe(RN_DEFAULT_FLUSH_INTERVAL);
94+
});
95+
96+
it('uses the passed options for relevant fields', () => {
97+
const options: OdpManagerOptions = {
98+
segmentsCache: {} as any,
99+
segmentsCacheSize: 11,
100+
segmentsCacheTimeout: 2025,
101+
segmentManager: {} as any,
102+
eventManager: {} as any,
103+
userAgentParser: {} as any,
104+
};
105+
const odpManager = createOdpManager(options);
106+
expect(odpManager).toBe(mockGetOdpManager.mock.results[0].value);
107+
expect(mockGetOdpManager).toHaveBeenNthCalledWith(1, expect.objectContaining(options));
108+
});
109+
});

lib/odp/odp_manager_factory.react_native.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,13 @@ export const RN_DEFAULT_BATCH_SIZE = 10;
88
export const RN_DEFAULT_FLUSH_INTERVAL = 1000;
99

1010
export const createOdpManager = (options: OdpManagerOptions): OdpManager => {
11-
let defaultRequestHandler = new BrowserRequestHandler({ timeout: RN_DEFAULT_API_TIMEOUT });
12-
13-
const segmentRequestHandler = options.segmentsApiTimeout !== undefined ?
14-
new BrowserRequestHandler({ timeout: options.segmentsApiTimeout }) :
15-
defaultRequestHandler;
11+
const segmentRequestHandler = new BrowserRequestHandler({
12+
timeout: options.segmentsApiTimeout || RN_DEFAULT_API_TIMEOUT,
13+
});
1614

17-
const eventRequestHandler = options.eventApiTimeout !== undefined ?
18-
new BrowserRequestHandler({ timeout: options.eventApiTimeout }) :
19-
defaultRequestHandler;
15+
const eventRequestHandler = new BrowserRequestHandler({
16+
timeout: options.eventApiTimeout || RN_DEFAULT_API_TIMEOUT,
17+
});
2018

2119
return getOdpManager({
2220
...options,

vitest.config.mts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export default defineConfig({
2020
test: {
2121
onConsoleLog: () => true,
2222
environment: 'happy-dom',
23-
include: ['**/odp_manager_factory.spec.ts'],
23+
include: ['**/odp_manager_factory.react_native.spec.ts'],
2424
typecheck: {
2525
tsconfig: 'tsconfig.spec.json',
2626
},

0 commit comments

Comments
 (0)