Skip to content

Commit df1c3f2

Browse files
committed
fix
1 parent 4435ca7 commit df1c3f2

File tree

4 files changed

+81
-27
lines changed

4 files changed

+81
-27
lines changed

lib/event_processor/event_processor_factory.browser.spec.ts

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,19 +37,29 @@ vi.mock('../utils/cache/local_storage_cache.browser', () => {
3737
return { LocalStorageCache: vi.fn() };
3838
});
3939

40-
vi.mock('../utils/cache/store', () => {
41-
return { SyncPrefixStore: vi.fn() };
40+
vi.mock('./event_store', async (importOriginal) => {
41+
const actual: any = await importOriginal()
42+
return {
43+
...actual,
44+
EventStore: vi.fn(),
45+
}
46+
});
47+
48+
vi.mock('../utils/cache/store', async (importOriginal) => {
49+
const actual: any = await importOriginal()
50+
return { ...actual, SyncPrefixStore: vi.fn(), AsyncPrefixStore: vi.fn() };
4251
});
4352

4453

4554
import defaultEventDispatcher from './event_dispatcher/default_dispatcher.browser';
4655
import { LocalStorageCache } from '../utils/cache/local_storage_cache.browser';
4756
import { SyncPrefixStore } from '../utils/cache/store';
4857
import { createForwardingEventProcessor, createBatchEventProcessor } from './event_processor_factory.browser';
49-
import { EVENT_STORE_PREFIX, extractEventProcessor, getForwardingEventProcessor, FAILED_EVENT_RETRY_INTERVAL } from './event_processor_factory';
58+
import { extractEventProcessor, getForwardingEventProcessor, FAILED_EVENT_RETRY_INTERVAL } from './event_processor_factory';
5059
import sendBeaconEventDispatcher from './event_dispatcher/send_beacon_dispatcher.browser';
5160
import browserDefaultEventDispatcher from './event_dispatcher/default_dispatcher.browser';
5261
import { getOpaqueBatchEventProcessor } from './event_processor_factory';
62+
import { EVENT_STORE_PREFIX, EventStore} from './event_store';
5363

5464
describe('createForwardingEventProcessor', () => {
5565
const mockGetForwardingEventProcessor = vi.mocked(getForwardingEventProcessor);
@@ -81,26 +91,44 @@ describe('createBatchEventProcessor', () => {
8191
const mockGetOpaqueBatchEventProcessor = vi.mocked(getOpaqueBatchEventProcessor);
8292
const MockLocalStorageCache = vi.mocked(LocalStorageCache);
8393
const MockSyncPrefixStore = vi.mocked(SyncPrefixStore);
94+
const MockEventStore = vi.mocked(EventStore);
8495

8596
beforeEach(() => {
8697
mockGetOpaqueBatchEventProcessor.mockClear();
8798
MockLocalStorageCache.mockClear();
8899
MockSyncPrefixStore.mockClear();
100+
MockEventStore.mockClear();
89101
});
90102

91-
it('uses LocalStorageCache and SyncPrefixStore to create eventStore', () => {
92-
const processor = createBatchEventProcessor({});
103+
it('uses an EventStore instance with AsyncStorageCache and correct options if no eventStore is provided', () => {
104+
const processor = createBatchEventProcessor({
105+
storeTtl: 60_000,
106+
});
107+
93108
expect(Object.is(processor, mockGetOpaqueBatchEventProcessor.mock.results[0].value)).toBe(true);
94109
const eventStore = mockGetOpaqueBatchEventProcessor.mock.calls[0][0].eventStore;
95-
expect(Object.is(eventStore, MockSyncPrefixStore.mock.results[0].value)).toBe(true);
110+
expect(Object.is(eventStore, MockEventStore.mock.instances[0])).toBe(true);
111+
112+
let { store, ttl, maxSize } = MockEventStore.mock.calls[0][0];
113+
expect(Object.is(store, MockLocalStorageCache.mock.instances[0])).toBe(true);
114+
115+
expect(ttl).toBe(60_000);
116+
expect(maxSize).toBe(500); // the default max size * 2 < 500
117+
118+
const processor2 = createBatchEventProcessor({
119+
storeTtl: 10_000,
120+
batchSize: 260,
121+
});
122+
123+
expect(Object.is(processor2, mockGetOpaqueBatchEventProcessor.mock.results[1].value)).toBe(true);
124+
const eventStore2 = mockGetOpaqueBatchEventProcessor.mock.calls[1][0].eventStore;
125+
expect(Object.is(eventStore2, MockEventStore.mock.instances[1])).toBe(true);
96126

97-
const [cache, prefix, transformGet, transformSet] = MockSyncPrefixStore.mock.calls[0];
98-
expect(Object.is(cache, MockLocalStorageCache.mock.results[0].value)).toBe(true);
99-
expect(prefix).toBe(EVENT_STORE_PREFIX);
127+
({ store, ttl, maxSize } = MockEventStore.mock.calls[1][0]);
128+
expect(Object.is(store, MockLocalStorageCache.mock.instances[1])).toBe(true);
100129

101-
// transformGet and transformSet should be identity functions
102-
expect(transformGet('value')).toBe('value');
103-
expect(transformSet('value')).toBe('value');
130+
expect(ttl).toBe(10_000);
131+
expect(maxSize).toBe(520); // the provided batch size * 2 > 500
104132
});
105133

106134
it('uses the provided eventDispatcher', () => {

lib/event_processor/event_processor_factory.browser.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import {
2222
OpaqueEventProcessor,
2323
wrapEventProcessor,
2424
getForwardingEventProcessor,
25-
transformEventStore,
2625
getPrefixEventStore,
2726
} from './event_processor_factory';
2827
import defaultEventDispatcher from './event_dispatcher/default_dispatcher.browser';

lib/event_processor/event_processor_factory.node.spec.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,18 @@ vi.mock('../utils/cache/async_storage_cache.react_native', () => {
3535
return { AsyncStorageCache: vi.fn() };
3636
});
3737

38-
vi.mock('../utils/cache/store', () => {
39-
return { SyncPrefixStore: vi.fn(), AsyncPrefixStore: vi.fn() };
38+
vi.mock('../utils/cache/store', async (importActual) => {
39+
const actual: any = await importActual();
40+
return { ...actual, SyncPrefixStore: vi.fn(), AsyncPrefixStore: vi.fn() };
4041
});
4142

4243
import { createBatchEventProcessor, createForwardingEventProcessor } from './event_processor_factory.node';
4344
import nodeDefaultEventDispatcher from './event_dispatcher/default_dispatcher.node';
44-
import { EVENT_STORE_PREFIX, extractEventProcessor, getForwardingEventProcessor, FAILED_EVENT_RETRY_INTERVAL } from './event_processor_factory';
45+
import { extractEventProcessor, getForwardingEventProcessor, FAILED_EVENT_RETRY_INTERVAL } from './event_processor_factory';
4546
import { getOpaqueBatchEventProcessor } from './event_processor_factory';
4647
import { AsyncStore, AsyncPrefixStore, SyncStore, SyncPrefixStore } from '../utils/cache/store';
4748
import { AsyncStorageCache } from '../utils/cache/async_storage_cache.react_native';
49+
import { EVENT_STORE_PREFIX } from './event_store';
4850

4951
describe('createForwardingEventProcessor', () => {
5052
const mockGetForwardingEventProcessor = vi.mocked(getForwardingEventProcessor);

lib/event_processor/event_processor_factory.react_native.spec.ts

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,17 @@ vi.mock('../utils/cache/async_storage_cache.react_native', () => {
3737
return { AsyncStorageCache: vi.fn() };
3838
});
3939

40-
vi.mock('../utils/cache/store', () => {
41-
return { SyncPrefixStore: vi.fn(), AsyncPrefixStore: vi.fn() };
40+
vi.mock('./event_store', async (importOriginal) => {
41+
const actual: any = await importOriginal()
42+
return {
43+
...actual,
44+
EventStore: vi.fn(),
45+
}
46+
});
47+
48+
vi.mock('../utils/cache/store', async (importOriginal) => {
49+
const actual: any = await importOriginal()
50+
return { ...actual, SyncPrefixStore: vi.fn(), AsyncPrefixStore: vi.fn() };
4251
});
4352

4453
vi.mock('@react-native-community/netinfo', () => {
@@ -66,10 +75,11 @@ async function mockRequireNetInfo() {
6675

6776
import { createForwardingEventProcessor, createBatchEventProcessor } from './event_processor_factory.react_native';
6877
import defaultEventDispatcher from './event_dispatcher/default_dispatcher.browser';
69-
import { EVENT_STORE_PREFIX, extractEventProcessor, getForwardingEventProcessor, FAILED_EVENT_RETRY_INTERVAL } from './event_processor_factory';
78+
import { extractEventProcessor, getForwardingEventProcessor, FAILED_EVENT_RETRY_INTERVAL } from './event_processor_factory';
7079
import { getOpaqueBatchEventProcessor } from './event_processor_factory';
7180
import { AsyncStore, AsyncPrefixStore, SyncStore, SyncPrefixStore } from '../utils/cache/store';
7281
import { AsyncStorageCache } from '../utils/cache/async_storage_cache.react_native';
82+
import { EVENT_STORE_PREFIX, EventStore } from './event_store';
7383
import { MODULE_NOT_FOUND_REACT_NATIVE_ASYNC_STORAGE } from '../utils/import.react_native/@react-native-async-storage/async-storage';
7484

7585
describe('createForwardingEventProcessor', () => {
@@ -103,30 +113,45 @@ describe('createBatchEventProcessor', () => {
103113
const MockAsyncStorageCache = vi.mocked(AsyncStorageCache);
104114
const MockSyncPrefixStore = vi.mocked(SyncPrefixStore);
105115
const MockAsyncPrefixStore = vi.mocked(AsyncPrefixStore);
116+
const MockEventStore = vi.mocked(EventStore);
106117

107118
beforeEach(() => {
108119
mockGetOpaqueBatchEventProcessor.mockClear();
109120
MockAsyncStorageCache.mockClear();
110121
MockSyncPrefixStore.mockClear();
111122
MockAsyncPrefixStore.mockClear();
123+
MockEventStore.mockClear();
112124
});
113125

114-
it('uses an EventStore instance with correct options if no eventStore is provided', () => {
126+
it('uses an EventStore instance with AsyncStorageCache and correct options if no eventStore is provided', () => {
115127
const processor = createBatchEventProcessor({
116128
storeTtl: 60_000,
117129
});
118130

119131
expect(Object.is(processor, mockGetOpaqueBatchEventProcessor.mock.results[0].value)).toBe(true);
120132
const eventStore = mockGetOpaqueBatchEventProcessor.mock.calls[0][0].eventStore;
121-
expect(Object.is(eventStore, MockAsyncPrefixStore.mock.results[0].value)).toBe(true);
133+
expect(Object.is(eventStore, MockEventStore.mock.instances[0])).toBe(true);
122134

123-
const [cache, prefix, transformGet, transformSet] = MockAsyncPrefixStore.mock.calls[0];
124-
expect(Object.is(cache, MockAsyncStorageCache.mock.results[0].value)).toBe(true);
125-
expect(prefix).toBe(EVENT_STORE_PREFIX);
135+
let { store, ttl, maxSize } = MockEventStore.mock.calls[0][0];
136+
expect(Object.is(store, MockAsyncStorageCache.mock.instances[0])).toBe(true);
137+
138+
expect(ttl).toBe(60_000);
139+
expect(maxSize).toBe(500); // the default max size * 2 < 500
140+
141+
const processor2 = createBatchEventProcessor({
142+
storeTtl: 10_000,
143+
batchSize: 260,
144+
});
145+
146+
expect(Object.is(processor2, mockGetOpaqueBatchEventProcessor.mock.results[1].value)).toBe(true);
147+
const eventStore2 = mockGetOpaqueBatchEventProcessor.mock.calls[1][0].eventStore;
148+
expect(Object.is(eventStore2, MockEventStore.mock.instances[1])).toBe(true);
149+
150+
({ store, ttl, maxSize } = MockEventStore.mock.calls[1][0]);
151+
expect(Object.is(store, MockAsyncStorageCache.mock.instances[1])).toBe(true);
126152

127-
// transformGet and transformSet should be identity functions
128-
expect(transformGet('value')).toBe('value');
129-
expect(transformSet('value')).toBe('value');
153+
expect(ttl).toBe(10_000);
154+
expect(maxSize).toBe(520); // the provided batch size * 2 > 500
130155
});
131156

132157
it('should throw error if @react-native-async-storage/async-storage is not available', async () => {

0 commit comments

Comments
 (0)