@@ -125,89 +125,85 @@ describe('PubSubPermissionConsumer - Payload Offloading', () => {
125125 expect ( consumer . addCounter ) . toBe ( 1 )
126126 } )
127127
128- it (
129- 'consumes offloaded message with array field and validates schema correctly' ,
130- { timeout : 10000 } ,
131- async ( ) => {
132- // Create a large array of userIds to trigger offloading (need > 10MB)
133- // Each userId needs to be ~1000 chars to make 10,500 items exceed 10MB
134- const largeUserIdArray = Array . from (
135- { length : 10500 } ,
136- ( _ , i ) => `user-${ i } -${ 'x' . repeat ( 1000 ) } ` ,
137- )
128+ it ( 'consumes offloaded message with array field and validates schema correctly' , {
129+ timeout : 10000 ,
130+ } , async ( ) => {
131+ // Create a large array of userIds to trigger offloading (need > 10MB)
132+ // Each userId needs to be ~1000 chars to make 10,500 items exceed 10MB
133+ const largeUserIdArray = Array . from (
134+ { length : 10500 } ,
135+ ( _ , i ) => `user-${ i } -${ 'x' . repeat ( 1000 ) } ` ,
136+ )
138137
139- const message = {
140- id : 'large-array-message-1' ,
141- messageType : 'add' ,
142- timestamp : new Date ( ) . toISOString ( ) ,
143- userIds : largeUserIdArray ,
144- } satisfies PERMISSIONS_ADD_MESSAGE_TYPE
138+ const message = {
139+ id : 'large-array-message-1' ,
140+ messageType : 'add' ,
141+ timestamp : new Date ( ) . toISOString ( ) ,
142+ userIds : largeUserIdArray ,
143+ } satisfies PERMISSIONS_ADD_MESSAGE_TYPE
145144
146- // Verify the message is large enough to trigger offloading
147- expect ( JSON . stringify ( message ) . length ) . toBeGreaterThan ( largeMessageSizeThreshold )
145+ // Verify the message is large enough to trigger offloading
146+ expect ( JSON . stringify ( message ) . length ) . toBeGreaterThan ( largeMessageSizeThreshold )
148147
149- await publisher . publish ( message )
148+ await publisher . publish ( message )
150149
151- // Wait for the message to be consumed
152- const consumptionResult = await consumer . handlerSpy . waitForMessageWithId (
153- message . id ,
154- 'consumed' ,
155- )
150+ // Wait for the message to be consumed
151+ const consumptionResult = await consumer . handlerSpy . waitForMessageWithId (
152+ message . id ,
153+ 'consumed' ,
154+ )
156155
157- // Verify the full payload was received including the large array
158- expect ( consumptionResult . message ) . toMatchObject ( {
159- id : message . id ,
160- messageType : message . messageType ,
161- userIds : largeUserIdArray ,
162- } )
163- expect ( consumptionResult . message . userIds ) . toHaveLength ( largeUserIdArray . length )
164- expect ( consumer . addCounter ) . toBe ( 1 )
165- } ,
166- )
167-
168- it (
169- 'validates schema correctly after retrieving offloaded payload' ,
170- { timeout : 10000 } ,
171- async ( ) => {
172- // Create a message with metadata that will be validated against the schema
173- const message = {
174- id : 'schema-validation-1' ,
175- messageType : 'add' ,
176- timestamp : new Date ( ) . toISOString ( ) ,
177- metadata : {
178- largeField : 'x' . repeat ( largeMessageSizeThreshold + 1000 ) ,
179- } ,
180- userIds : [ 'test-user' ] ,
181- } satisfies PERMISSIONS_ADD_MESSAGE_TYPE
182-
183- expect ( JSON . stringify ( message ) . length ) . toBeGreaterThan ( largeMessageSizeThreshold )
184-
185- await publisher . publish ( message )
186-
187- const consumptionResult = await consumer . handlerSpy . waitForMessageWithId (
188- message . id ,
189- 'consumed' ,
190- )
156+ // Verify the full payload was received including the large array
157+ expect ( consumptionResult . message ) . toMatchObject ( {
158+ id : message . id ,
159+ messageType : message . messageType ,
160+ userIds : largeUserIdArray ,
161+ } )
162+ expect ( consumptionResult . message . userIds ) . toHaveLength ( largeUserIdArray . length )
163+ expect ( consumer . addCounter ) . toBe ( 1 )
164+ } )
191165
192- // Verify all fields were properly deserialized and validated
193- expect ( consumptionResult . message ) . toMatchObject ( {
194- id : message . id ,
195- messageType : message . messageType ,
196- userIds : message . userIds ,
197- metadata : {
198- largeField : message . metadata . largeField ,
199- } ,
200- } )
201-
202- // Type guard to access metadata property
203- if ( consumptionResult . message . messageType === 'add' ) {
204- expect ( consumptionResult . message . metadata ?. largeField ) . toHaveLength (
205- message . metadata . largeField . length ,
206- )
207- }
208- expect ( consumer . addCounter ) . toBe ( 1 )
209- } ,
210- )
166+ it ( 'validates schema correctly after retrieving offloaded payload' , {
167+ timeout : 10000 ,
168+ } , async ( ) => {
169+ // Create a message with metadata that will be validated against the schema
170+ const message = {
171+ id : 'schema-validation-1' ,
172+ messageType : 'add' ,
173+ timestamp : new Date ( ) . toISOString ( ) ,
174+ metadata : {
175+ largeField : 'x' . repeat ( largeMessageSizeThreshold + 1000 ) ,
176+ } ,
177+ userIds : [ 'test-user' ] ,
178+ } satisfies PERMISSIONS_ADD_MESSAGE_TYPE
179+
180+ expect ( JSON . stringify ( message ) . length ) . toBeGreaterThan ( largeMessageSizeThreshold )
181+
182+ await publisher . publish ( message )
183+
184+ const consumptionResult = await consumer . handlerSpy . waitForMessageWithId (
185+ message . id ,
186+ 'consumed' ,
187+ )
188+
189+ // Verify all fields were properly deserialized and validated
190+ expect ( consumptionResult . message ) . toMatchObject ( {
191+ id : message . id ,
192+ messageType : message . messageType ,
193+ userIds : message . userIds ,
194+ metadata : {
195+ largeField : message . metadata . largeField ,
196+ } ,
197+ } )
198+
199+ // Type guard to access metadata property
200+ if ( consumptionResult . message . messageType === 'add' ) {
201+ expect ( consumptionResult . message . metadata ?. largeField ) . toHaveLength (
202+ message . metadata . largeField . length ,
203+ )
204+ }
205+ expect ( consumer . addCounter ) . toBe ( 1 )
206+ } )
211207 } )
212208
213209 describe ( 'payload retrieval errors' , ( ) => {
0 commit comments