Skip to content

Commit c42e4f4

Browse files
committed
chore: changed payload adaptor implementation
this commit will change the payload adaptor from a class to function so it could be minified better
1 parent 718b11a commit c42e4f4

File tree

6 files changed

+93
-278
lines changed

6 files changed

+93
-278
lines changed
Lines changed: 7 additions & 145 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import FDv1PayloadAdaptor from '../../../src/internal/fdv2/FDv1PayloadAdaptor';
1+
import { fdv1PayloadAdaptor as FDv1PayloadAdaptor } from '../../../src/internal/fdv2/FDv1PayloadAdaptor';
22
import { PayloadProcessor } from '../../../src/internal/fdv2/payloadProcessor';
3-
import { DeleteObject, Event, PutObject } from '../../../src/internal/fdv2/proto';
3+
import { Event, PutObject } from '../../../src/internal/fdv2/proto';
44

55
// Mock PayloadProcessor that captures events
66
class MockPayloadProcessor extends PayloadProcessor {
@@ -16,41 +16,10 @@ class MockPayloadProcessor extends PayloadProcessor {
1616
}
1717
}
1818

19-
it('throws an error when using unsupported intent', () => {
19+
it('includes server-intent as the first event and payload-transferred as the last eventwith correct structure', () => {
2020
const processor = new MockPayloadProcessor();
21-
const adaptor = new FDv1PayloadAdaptor(processor);
22-
// @ts-ignore - testing invalid intent
23-
expect(() => adaptor.start('invalid-intent')).toThrow('intent: only xfer-full is supported');
24-
});
25-
26-
it('starts a new changeset with the given intent', () => {
27-
const processor = new MockPayloadProcessor();
28-
const adaptor = new FDv1PayloadAdaptor(processor);
29-
adaptor.start('xfer-full');
30-
adaptor.finish();
31-
32-
expect(processor.processedEvents.length).toBeGreaterThan(0);
33-
expect(processor.processedEvents[0].event).toBe('server-intent');
34-
});
35-
36-
it('resets events when starting a new changeset', () => {
37-
const processor = new MockPayloadProcessor();
38-
const adaptor = new FDv1PayloadAdaptor(processor);
39-
adaptor.start('xfer-full');
40-
adaptor.putObject({ kind: 'flag', key: 'test-flag', version: 1, object: {} });
41-
adaptor.start('xfer-full');
42-
adaptor.finish();
43-
44-
// Should only have server-intent and payload-transferred, no put-object events
45-
const putObjectEvents = processor.processedEvents.filter((e) => e.event === 'put-object');
46-
expect(putObjectEvents.length).toBe(0);
47-
});
48-
49-
it('includes server-intent as the first event with correct structure', () => {
50-
const processor = new MockPayloadProcessor();
51-
const adaptor = new FDv1PayloadAdaptor(processor);
52-
adaptor.start('xfer-full');
53-
adaptor.finish();
21+
const adaptor = FDv1PayloadAdaptor(processor);
22+
adaptor.processFullTransfer({ flags: {}, segments: {} });
5423

5524
const serverIntentEvent = processor.processedEvents[0] as Event;
5625
expect(serverIntentEvent.event).toBe('server-intent');
@@ -63,13 +32,6 @@ it('includes server-intent as the first event with correct structure', () => {
6332
expect(intentData.payloads[0].id).toBe('FDv1Fallback');
6433
expect(intentData.payloads[0].target).toBe(1);
6534
expect(intentData.payloads[0].reason).toBe('payload-missing');
66-
});
67-
68-
it('includes payload-transferred as the last event with empty state', () => {
69-
const processor = new MockPayloadProcessor();
70-
const adaptor = new FDv1PayloadAdaptor(processor);
71-
adaptor.start('xfer-full');
72-
adaptor.finish();
7335

7436
const payloadTransferredEvent = processor.processedEvents[
7537
processor.processedEvents.length - 1
@@ -83,66 +45,9 @@ it('includes payload-transferred as the last event with empty state', () => {
8345
expect(transferredData.id).toBe('FDv1Fallback');
8446
});
8547

86-
it('includes all put and delete events between server-intent and payload-transferred', () => {
87-
const processor = new MockPayloadProcessor();
88-
const adaptor = new FDv1PayloadAdaptor(processor);
89-
const putObj1: PutObject = {
90-
kind: 'flag',
91-
key: 'flag-1',
92-
version: 1,
93-
object: { key: 'flag-1', on: true },
94-
};
95-
const deleteObj: DeleteObject = {
96-
kind: 'segment',
97-
key: 'segment-1',
98-
version: 2,
99-
};
100-
const putObj2: PutObject = {
101-
kind: 'flag',
102-
key: 'flag-2',
103-
version: 3,
104-
object: { key: 'flag-2', on: false },
105-
};
106-
107-
adaptor.start('xfer-full');
108-
adaptor.putObject(putObj1);
109-
adaptor.deleteObject(deleteObj);
110-
adaptor.putObject(putObj2);
111-
adaptor.finish();
112-
113-
expect(processor.processedEvents.length).toBe(5); // server-intent + 3 events + payload-transferred
114-
expect(processor.processedEvents[0].event).toBe('server-intent');
115-
expect(processor.processedEvents[1].event).toBe('put-object');
116-
expect((processor.processedEvents[1].data as PutObject).key).toBe('flag-1');
117-
expect(processor.processedEvents[2].event).toBe('delete-object');
118-
expect((processor.processedEvents[2].data as DeleteObject).key).toBe('segment-1');
119-
expect(processor.processedEvents[3].event).toBe('put-object');
120-
expect((processor.processedEvents[3].data as PutObject).key).toBe('flag-2');
121-
expect(processor.processedEvents[4].event).toBe('payload-transferred');
122-
});
123-
124-
it('clears events after finish is called', () => {
125-
const processor = new MockPayloadProcessor();
126-
const adaptor = new FDv1PayloadAdaptor(processor);
127-
adaptor.start('xfer-full');
128-
adaptor.putObject({ kind: 'flag', key: 'test-flag', version: 1, object: {} });
129-
adaptor.finish();
130-
131-
const firstFinishEventCount = processor.processedEvents.length;
132-
expect(firstFinishEventCount).toBe(3); // server-intent + put-object + payload-transferred
133-
134-
// Start a new changeset
135-
adaptor.start('xfer-full');
136-
adaptor.finish();
137-
138-
// Should have processed 2 more events (server-intent + payload-transferred)
139-
// but the adaptor's internal events should be cleared
140-
expect(processor.processedEvents.length).toBe(firstFinishEventCount + 2);
141-
});
142-
14348
it('pushFdv1Payload adds put-object events for flags and segments', () => {
14449
const processor = new MockPayloadProcessor();
145-
const adaptor = new FDv1PayloadAdaptor(processor);
50+
const adaptor = FDv1PayloadAdaptor(processor);
14651
const fdv1Payload = {
14752
flags: {
14853
'flag-1': { key: 'flag-1', version: 1, on: true },
@@ -153,9 +58,7 @@ it('pushFdv1Payload adds put-object events for flags and segments', () => {
15358
},
15459
};
15560

156-
adaptor.start('xfer-full');
157-
adaptor.pushFdv1Payload(fdv1Payload);
158-
adaptor.finish();
61+
adaptor.processFullTransfer(fdv1Payload);
15962

16063
const putObjectEvents = processor.processedEvents.filter((e) => e.event === 'put-object');
16164
expect(putObjectEvents.length).toBe(3);
@@ -175,44 +78,3 @@ it('pushFdv1Payload adds put-object events for flags and segments', () => {
17578
expect((segment1Event!.data as PutObject).kind).toBe('segment');
17679
expect((segment1Event!.data as PutObject).version).toBe(1);
17780
});
178-
179-
it('pushFdv1Payload handles empty or missing flags and segments', () => {
180-
const processor = new MockPayloadProcessor();
181-
const adaptor = new FDv1PayloadAdaptor(processor);
182-
183-
adaptor.start('xfer-full');
184-
adaptor.pushFdv1Payload({ flags: {}, segments: {} });
185-
adaptor.finish();
186-
187-
const putObjectEvents = processor.processedEvents.filter((e) => e.event === 'put-object');
188-
expect(putObjectEvents.length).toBe(0);
189-
190-
// Test with missing properties
191-
const processor2 = new MockPayloadProcessor();
192-
const adaptor2 = new FDv1PayloadAdaptor(processor2);
193-
adaptor2.start('xfer-full');
194-
adaptor2.pushFdv1Payload({} as any);
195-
adaptor2.finish();
196-
197-
const putObjectEvents2 = processor2.processedEvents.filter((e) => e.event === 'put-object');
198-
expect(putObjectEvents2.length).toBe(0);
199-
});
200-
201-
it('pushFdv1Payload uses default version of 1 when version is missing', () => {
202-
const processor = new MockPayloadProcessor();
203-
const adaptor = new FDv1PayloadAdaptor(processor);
204-
const fdv1Payload = {
205-
flags: {
206-
'flag-1': { key: 'flag-1', on: true }, // no version
207-
},
208-
segments: {},
209-
};
210-
211-
adaptor.start('xfer-full');
212-
adaptor.pushFdv1Payload(fdv1Payload);
213-
adaptor.finish();
214-
215-
const putObjectEvents = processor.processedEvents.filter((e) => e.event === 'put-object');
216-
expect(putObjectEvents.length).toBe(1);
217-
expect((putObjectEvents[0].data as PutObject).version).toBe(1);
218-
});

0 commit comments

Comments
 (0)