-
Notifications
You must be signed in to change notification settings - Fork 86
Expand file tree
/
Copy pathodp_manager_factory.browser.spec.ts
More file actions
129 lines (113 loc) · 6.02 KB
/
odp_manager_factory.browser.spec.ts
File metadata and controls
129 lines (113 loc) · 6.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/**
* Copyright 2024-2025, Optimizely
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
vi.mock('../utils/http_request_handler/request_handler.browser', () => {
return { BrowserRequestHandler: vi.fn() };
});
vi.mock('./odp_manager_factory', () => {
return {
getOdpManager: vi.fn().mockImplementation(() => ({})),
getOpaqueOdpManager: vi.fn().mockImplementation(() => ({}))
};
});
import { describe, it, expect, beforeEach, vi } from 'vitest';
import { getOpaqueOdpManager, OdpManagerOptions } from './odp_manager_factory';
import { BROWSER_DEFAULT_API_TIMEOUT, BROWSER_DEFAULT_BATCH_SIZE, BROWSER_DEFAULT_FLUSH_INTERVAL, createOdpManager } from './odp_manager_factory.browser';
import { BrowserRequestHandler } from '../utils/http_request_handler/request_handler.browser';
import { eventApiRequestGenerator, pixelApiRequestGenerator } from './event_manager/odp_event_api_manager';
describe('createOdpManager', () => {
const MockBrowserRequestHandler = vi.mocked(BrowserRequestHandler);
const mockGetOpaqueOdpManager = vi.mocked(getOpaqueOdpManager);
beforeEach(() => {
MockBrowserRequestHandler.mockClear();
mockGetOpaqueOdpManager.mockClear();
});
it('should use BrowserRequestHandler with the provided timeout as the segment request handler', () => {
const odpManager = createOdpManager({ segmentsApiTimeout: 3456 });
expect(odpManager).toBe(mockGetOpaqueOdpManager.mock.results[0].value);
const { segmentRequestHandler } = mockGetOpaqueOdpManager.mock.calls[0][0];
expect(segmentRequestHandler).toBe(MockBrowserRequestHandler.mock.instances[0]);
const requestHandlerOptions = MockBrowserRequestHandler.mock.calls[0][0];
expect(requestHandlerOptions?.timeout).toBe(3456);
});
it('should use BrowserRequestHandler with the browser default timeout as the segment request handler', () => {
const odpManager = createOdpManager({});
expect(odpManager).toBe(mockGetOpaqueOdpManager.mock.results[0].value);
const { segmentRequestHandler } = mockGetOpaqueOdpManager.mock.calls[0][0];
expect(segmentRequestHandler).toBe(MockBrowserRequestHandler.mock.instances[0]);
const requestHandlerOptions = MockBrowserRequestHandler.mock.calls[0][0];
expect(requestHandlerOptions?.timeout).toBe(BROWSER_DEFAULT_API_TIMEOUT);
});
it('should use BrowserRequestHandler with the provided timeout as the event request handler', () => {
const odpManager = createOdpManager({ eventApiTimeout: 2345 });
expect(odpManager).toBe(mockGetOpaqueOdpManager.mock.results[0].value);
const { eventRequestHandler } = mockGetOpaqueOdpManager.mock.calls[0][0];
expect(eventRequestHandler).toBe(MockBrowserRequestHandler.mock.instances[1]);
const requestHandlerOptions = MockBrowserRequestHandler.mock.calls[1][0];
expect(requestHandlerOptions?.timeout).toBe(2345);
});
it('should use BrowserRequestHandler with the browser default timeout as the event request handler', () => {
const odpManager = createOdpManager({});
expect(odpManager).toBe(mockGetOpaqueOdpManager.mock.results[0].value);
const { eventRequestHandler } = mockGetOpaqueOdpManager.mock.calls[0][0];
expect(eventRequestHandler).toBe(MockBrowserRequestHandler.mock.instances[1]);
const requestHandlerOptions = MockBrowserRequestHandler.mock.calls[1][0];
expect(requestHandlerOptions?.timeout).toBe(BROWSER_DEFAULT_API_TIMEOUT);
});
it('should use the provided eventBatchSize', () => {
const odpManager = createOdpManager({ eventBatchSize: 99 });
expect(odpManager).toBe(mockGetOpaqueOdpManager.mock.results[0].value);
const { eventBatchSize } = mockGetOpaqueOdpManager.mock.calls[0][0];
expect(eventBatchSize).toBe(99);
});
it('should use the browser default eventBatchSize if none provided', () => {
const odpManager = createOdpManager({});
expect(odpManager).toBe(mockGetOpaqueOdpManager.mock.results[0].value);
const { eventBatchSize } = mockGetOpaqueOdpManager.mock.calls[0][0];
expect(eventBatchSize).toBe(BROWSER_DEFAULT_BATCH_SIZE);
});
it('should use the provided eventFlushInterval', () => {
const odpManager = createOdpManager({ eventFlushInterval: 9999 });
expect(odpManager).toBe(mockGetOpaqueOdpManager.mock.results[0].value);
const { eventFlushInterval } = mockGetOpaqueOdpManager.mock.calls[0][0];
expect(eventFlushInterval).toBe(9999);
});
it('should use the browser default eventFlushInterval if none provided', () => {
const odpManager = createOdpManager({});
expect(odpManager).toBe(mockGetOpaqueOdpManager.mock.results[0].value);
const { eventFlushInterval } = mockGetOpaqueOdpManager.mock.calls[0][0];
expect(eventFlushInterval).toBe(BROWSER_DEFAULT_FLUSH_INTERVAL);
});
it('uses the event api request generator', () => {
const odpManager = createOdpManager({ });
expect(odpManager).toBe(mockGetOpaqueOdpManager.mock.results[0].value);
const { eventRequestGenerator } = mockGetOpaqueOdpManager.mock.calls[0][0];
expect(eventRequestGenerator).toBe(eventApiRequestGenerator);
});
it('uses the passed options for relevant fields', () => {
const options: OdpManagerOptions = {
segmentsCache: {} as any,
segmentsCacheSize: 11,
segmentsCacheTimeout: 2025,
segmentManager: {} as any,
eventFlushInterval: 2222,
eventManager: {} as any,
userAgentParser: {} as any,
};
const odpManager = createOdpManager(options);
expect(odpManager).toBe(mockGetOpaqueOdpManager.mock.results[0].value);
expect(mockGetOpaqueOdpManager).toHaveBeenNthCalledWith(1, expect.objectContaining(options));
});
});