Skip to content

Commit 705c63e

Browse files
committed
Updated tests to conform to the new testing guidelines.
1 parent fdd6b82 commit 705c63e

File tree

3 files changed

+161
-7
lines changed

3 files changed

+161
-7
lines changed

src/types/extraction.test.ts

Lines changed: 77 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
import { EventContext, EventType, InitialSyncScope } from './extraction';
22
import { createEvent } from '../tests/test-helpers';
33

4-
describe('EventContext', () => {
4+
// Test the EventContext interface and related extraction types
5+
describe('ExtractionTypes', () => {
56
const baseEvent = createEvent({ eventType: EventType.ExtractionDataStart });
67

78
it('should create event context without optional fields', () => {
89
const event = { ...baseEvent };
10+
911
// If this compiles, the test passes
1012
expect(event).toBeDefined();
13+
expect(event.payload.event_context).toBeDefined();
1114
});
1215

1316
it('should create event context with all optional fields', () => {
@@ -20,8 +23,10 @@ describe('EventContext', () => {
2023
reset_extract_from: true
2124
} as EventContext;
2225

23-
// Test with all optionals present
2426
expect(event).toBeDefined();
27+
expect(event.payload.event_context.extract_from).toBe('2024-01-01T00:00:00Z');
28+
expect(event.payload.event_context.initial_sync_scope).toBe(InitialSyncScope.TIME_SCOPED);
29+
expect(event.payload.event_context.reset_extract_from).toBe(true);
2530
});
2631

2732
it('should create event context with partial optional fields', () => {
@@ -33,5 +38,75 @@ describe('EventContext', () => {
3338
} as EventContext;
3439

3540
expect(event).toBeDefined();
41+
expect(event.payload.event_context.extract_from).toBe('2024-01-01T00:00:00Z');
42+
});
43+
44+
it('should handle different InitialSyncScope values', () => {
45+
const event = { ...baseEvent };
46+
47+
event.payload.event_context = {
48+
...baseEvent.payload.event_context,
49+
initial_sync_scope: InitialSyncScope.FULL_HISTORY
50+
} as EventContext;
51+
52+
expect(event.payload.event_context.initial_sync_scope).toBe(InitialSyncScope.FULL_HISTORY);
53+
});
54+
55+
describe('[Edges]', () => {
56+
it('should handle null event context gracefully', () => {
57+
const event = { ...baseEvent };
58+
59+
event.payload.event_context = null as any;
60+
61+
expect(event.payload.event_context).toBeNull();
62+
});
63+
64+
it('should handle undefined optional fields', () => {
65+
const event = { ...baseEvent };
66+
67+
event.payload.event_context = {
68+
...baseEvent.payload.event_context,
69+
extract_from: undefined,
70+
initial_sync_scope: undefined,
71+
reset_extract_from: undefined
72+
} as EventContext;
73+
74+
expect(event.payload.event_context.extract_from).toBeUndefined();
75+
expect(event.payload.event_context.initial_sync_scope).toBeUndefined();
76+
expect(event.payload.event_context.reset_extract_from).toBeUndefined();
77+
});
78+
79+
it('should handle invalid date format in extract_from', () => {
80+
const event = { ...baseEvent };
81+
82+
event.payload.event_context = {
83+
...baseEvent.payload.event_context,
84+
extract_from: 'invalid-date-format'
85+
} as EventContext;
86+
87+
expect(event.payload.event_context.extract_from).toBe('invalid-date-format');
88+
// Note: Type validation would typically happen at runtime, not compile time
89+
});
90+
91+
it('should handle explicit boolean values for reset_extract_from', () => {
92+
const eventWithTrue = createEvent({
93+
eventType: EventType.ExtractionDataStart,
94+
eventContextOverrides: {
95+
reset_extract_from: true
96+
}
97+
});
98+
99+
const eventWithFalse = createEvent({
100+
eventType: EventType.ExtractionDataStart,
101+
eventContextOverrides: {
102+
reset_extract_from: false
103+
}
104+
});
105+
106+
expect(eventWithTrue.payload.event_context.reset_extract_from).toBe(true);
107+
expect(eventWithFalse.payload.event_context.reset_extract_from).toBe(false);
108+
expect(typeof eventWithTrue.payload.event_context.reset_extract_from).toBe('boolean');
109+
expect(typeof eventWithFalse.payload.event_context.reset_extract_from).toBe('boolean');
110+
});
36111
});
37112
});

src/workers/create-worker.test.ts

Lines changed: 80 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ import { EventType } from '../types/extraction';
55
import { createWorker } from './create-worker';
66

77
describe(createWorker.name, () => {
8-
it('should create a Worker instance when valid worker script path is provided', async () => {
8+
it('should create a Worker instance when valid parameters are provided', async () => {
99
const workerPath = __dirname + '../tests/dummy-worker.ts';
10+
1011
const worker = isMainThread
1112
? await createWorker<object>({
1213
event: createEvent({
@@ -24,4 +25,82 @@ describe(createWorker.name, () => {
2425
await worker.terminate();
2526
}
2627
});
28+
29+
it('should throw error when not in main thread', async () => {
30+
const originalIsMainThread = isMainThread;
31+
(isMainThread as any) = false;
32+
const workerPath = __dirname + '../tests/dummy-worker.ts';
33+
34+
await expect(
35+
createWorker<object>({
36+
event: createEvent({
37+
eventType: EventType.ExtractionExternalSyncUnitsStart,
38+
}),
39+
initialState: {},
40+
workerPath,
41+
})
42+
).rejects.toThrow('Worker threads can not start more worker threads.');
43+
44+
// Restore original value
45+
(isMainThread as any) = originalIsMainThread;
46+
});
47+
48+
describe('[Edges]', () => {
49+
it('should handle worker creation with minimal valid data', async () => {
50+
const workerPath = __dirname + '../tests/dummy-worker.ts';
51+
52+
if (isMainThread) {
53+
const worker = await createWorker<object>({
54+
event: createEvent({
55+
eventType: EventType.ExtractionExternalSyncUnitsStart,
56+
}),
57+
initialState: {},
58+
workerPath,
59+
});
60+
61+
expect(worker).toBeInstanceOf(Worker);
62+
await worker.terminate();
63+
}
64+
});
65+
66+
it('should handle worker creation with complex initial state', async () => {
67+
const workerPath = __dirname + '../tests/dummy-worker.ts';
68+
const complexState = {
69+
nested: {
70+
data: [1, 2, 3],
71+
config: { enabled: true }
72+
}
73+
};
74+
75+
if (isMainThread) {
76+
const worker = await createWorker<typeof complexState>({
77+
event: createEvent({
78+
eventType: EventType.ExtractionDataStart,
79+
}),
80+
initialState: complexState,
81+
workerPath,
82+
});
83+
84+
expect(worker).toBeInstanceOf(Worker);
85+
await worker.terminate();
86+
}
87+
});
88+
89+
it('should handle different event types', async () => {
90+
const workerPath = __dirname + '../tests/dummy-worker.ts';
91+
92+
if (isMainThread) {
93+
const worker = await createWorker<object>({
94+
event: createEvent({
95+
eventType: EventType.ExtractionMetadataStart,
96+
}),
97+
initialState: {},
98+
workerPath,
99+
});
100+
101+
expect(worker).toBeInstanceOf(Worker);
102+
await worker.terminate();
103+
}
104+
});
105+
});
27106
});

src/workers/worker-adapter.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ describe(WorkerAdapter.name, () => {
501501
jest.restoreAllMocks();
502502
});
503503

504-
test('should emit only one event when multiple events of same type are sent', async () => {
504+
it('should emit only one event when multiple events of same type are sent', async () => {
505505
adapter['adapterState'].postState = jest.fn().mockResolvedValue(undefined);
506506
adapter.uploadAllRepos = jest.fn().mockResolvedValue(undefined);
507507

@@ -517,7 +517,7 @@ describe(WorkerAdapter.name, () => {
517517
expect(counter.counter).toBe(1);
518518
});
519519

520-
test('should emit event when different event type is sent after previous events', async () => {
520+
it('should emit event when different event type is sent after previous events', async () => {
521521
adapter['adapterState'].postState = jest.fn().mockResolvedValue(undefined);
522522
adapter.uploadAllRepos = jest.fn().mockResolvedValue(undefined);
523523

@@ -537,7 +537,7 @@ describe(WorkerAdapter.name, () => {
537537
expect(counter.counter).toBe(1);
538538
});
539539

540-
test('should correctly emit one event even if postState errors', async () => {
540+
it('should correctly emit one event even if postState errors', async () => {
541541
adapter['adapterState'].postState = jest.fn().mockRejectedValue(new Error('postState error'));
542542
adapter.uploadAllRepos = jest.fn().mockResolvedValue(undefined);
543543

@@ -548,7 +548,7 @@ describe(WorkerAdapter.name, () => {
548548
expect(counter.counter).toBe(1);
549549
});
550550

551-
test('should correctly emit one event even if uploadAllRepos errors', async () => {
551+
it('should correctly emit one event even if uploadAllRepos errors', async () => {
552552
adapter['adapterState'].postState = jest.fn().mockResolvedValue(undefined);
553553
adapter.uploadAllRepos = jest.fn().mockRejectedValue(new Error('uploadAllRepos error'));
554554

0 commit comments

Comments
 (0)