1- import FDv1PayloadAdaptor from '../../../src/internal/fdv2/FDv1PayloadAdaptor' ;
1+ import { fdv1PayloadAdaptor as FDv1PayloadAdaptor } from '../../../src/internal/fdv2/FDv1PayloadAdaptor' ;
22import { 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
66class 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-
14348it ( '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