@@ -23,7 +23,7 @@ const [
23
23
img ,
24
24
fetchNoDataObj ,
25
25
fetchUrlSkipped ,
26
- fetchBodySkipped ,
26
+ fetchEmptyBody ,
27
27
fetchWithHeaders ,
28
28
fetchWithRespBody ,
29
29
] = hydrateSpans ( ReplayRecordFixture ( ) , [
@@ -60,13 +60,11 @@ const [
60
60
method : 'GET' ,
61
61
statusCode : 200 ,
62
62
request : {
63
- // @ts -expect-error 'BODY_SKIPPED' is not assignable to type NetworkMetaWarning
64
- _meta : { warnings : [ 'BODY_SKIPPED' ] } ,
63
+ _meta : { warnings : [ ] } ,
65
64
headers : { accept : 'application/json' } ,
66
65
} ,
67
66
response : {
68
- // @ts -expect-error 'BODY_SKIPPED' is not assignable to type NetworkMetaWarning
69
- _meta : { warnings : [ 'BODY_SKIPPED' ] } ,
67
+ _meta : { warnings : [ ] } ,
70
68
headers : { 'content-type' : 'application/json' } ,
71
69
} ,
72
70
} ,
@@ -114,7 +112,7 @@ const mockItems = {
114
112
img : img ! ,
115
113
fetchNoDataObj : fetchNoDataObj ! ,
116
114
fetchUrlSkipped : fetchUrlSkipped ! ,
117
- fetchBodySkipped : fetchBodySkipped ! ,
115
+ fetchEmptyBody : fetchEmptyBody ! ,
118
116
fetchWithHeaders : fetchWithHeaders ! ,
119
117
fetchWithRespBody : fetchWithRespBody ! ,
120
118
} ;
@@ -144,14 +142,17 @@ describe('NetworkDetailsContent', () => {
144
142
145
143
describe ( 'Unsupported Operation' , ( ) => {
146
144
it . each ( [
147
- { isSetup : false , itemName : 'img' } ,
148
- { isSetup : true , itemName : 'img' } ,
145
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'img' } ,
146
+ { isSetup : true , isCaptureBodySetup : true , itemName : 'img' } ,
147
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'img' } ,
148
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'img' } ,
149
149
] ) (
150
150
'should render the `general` & `unsupported` sections when the span is not FETCH or XHR and isSetup=$isSetup. [$itemName]' ,
151
- ( { isSetup} ) => {
151
+ ( { isSetup, isCaptureBodySetup } ) => {
152
152
render (
153
153
< NetworkDetailsContent
154
154
{ ...basicSectionProps ( ) }
155
+ isCaptureBodySetup = { isCaptureBodySetup }
155
156
isSetup = { isSetup }
156
157
item = { mockItems . img }
157
158
visibleTab = { visibleTab }
@@ -169,17 +170,23 @@ describe('NetworkDetailsContent', () => {
169
170
170
171
describe ( 'Supported Operation' , ( ) => {
171
172
it . each ( [
172
- { isSetup : false , itemName : 'fetchNoDataObj' } ,
173
- { isSetup : false , itemName : 'fetchUrlSkipped' } ,
174
- { isSetup : false , itemName : 'fetchBodySkipped' } ,
175
- { isSetup : false , itemName : 'fetchWithHeaders' } ,
176
- { isSetup : false , itemName : 'fetchWithRespBody' } ,
173
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'fetchNoDataObj' } ,
174
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'fetchUrlSkipped' } ,
175
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'fetchEmptyBody' } ,
176
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'fetchWithHeaders' } ,
177
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'fetchWithRespBody' } ,
178
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'fetchNoDataObj' } ,
179
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'fetchUrlSkipped' } ,
180
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'fetchEmptyBody' } ,
181
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'fetchWithHeaders' } ,
182
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'fetchWithRespBody' } ,
177
183
] ) (
178
184
'should render the `general` & `setup` sections when isSetup=false, no matter the item. [$itemName]' ,
179
- ( { isSetup, itemName} ) => {
185
+ ( { isSetup, isCaptureBodySetup , itemName} ) => {
180
186
render (
181
187
< NetworkDetailsContent
182
188
{ ...basicSectionProps ( ) }
189
+ isCaptureBodySetup = { isCaptureBodySetup }
183
190
isSetup = { isSetup }
184
191
item = { mockItems [ itemName as keyof typeof mockItems ] }
185
192
visibleTab = { visibleTab }
@@ -195,15 +202,18 @@ describe('NetworkDetailsContent', () => {
195
202
) ;
196
203
197
204
it . each ( [
198
- { isSetup : true , itemName : 'fetchNoDataObj' } ,
199
- { isSetup : true , itemName : 'fetchUrlSkipped' } ,
205
+ { isSetup : true , isCaptureBodySetup : true , itemName : 'fetchNoDataObj' } ,
206
+ { isSetup : true , isCaptureBodySetup : true , itemName : 'fetchUrlSkipped' } ,
207
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'fetchNoDataObj' } ,
208
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'fetchUrlSkipped' } ,
200
209
] ) (
201
210
'should render the `general` & `setup` sections when the item has no data. [$itemName]' ,
202
- ( { isSetup, itemName} ) => {
211
+ ( { isSetup, isCaptureBodySetup , itemName} ) => {
203
212
render (
204
213
< NetworkDetailsContent
205
214
{ ...basicSectionProps ( ) }
206
215
isSetup = { isSetup }
216
+ isCaptureBodySetup = { isCaptureBodySetup }
207
217
item = { mockItems [ itemName as keyof typeof mockItems ] }
208
218
visibleTab = { visibleTab }
209
219
/>
@@ -218,15 +228,19 @@ describe('NetworkDetailsContent', () => {
218
228
) ;
219
229
220
230
it . each ( [
221
- { isSetup : true , itemName : 'fetchBodySkipped' } ,
222
- { isSetup : true , itemName : 'fetchWithHeaders' } ,
223
- { isSetup : true , itemName : 'fetchWithRespBody' } ,
231
+ { isSetup : true , isCaptureBodySetup : true , itemName : 'fetchEmptyBody' } ,
232
+ { isSetup : true , isCaptureBodySetup : true , itemName : 'fetchWithHeaders' } ,
233
+ { isSetup : true , isCaptureBodySetup : true , itemName : 'fetchWithRespBody' } ,
234
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'fetchEmptyBody' } ,
235
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'fetchWithHeaders' } ,
236
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'fetchWithRespBody' } ,
224
237
] ) (
225
238
'should render the `general` & two `headers` sections, and always the setup section, when things are setup and the item has some data. [$itemName]' ,
226
- ( { isSetup, itemName} ) => {
239
+ ( { isSetup, isCaptureBodySetup , itemName} ) => {
227
240
render (
228
241
< NetworkDetailsContent
229
242
{ ...basicSectionProps ( ) }
243
+ isCaptureBodySetup = { isCaptureBodySetup }
230
244
isSetup = { isSetup }
231
245
item = { mockItems [ itemName as keyof typeof mockItems ] }
232
246
visibleTab = { visibleTab }
@@ -248,14 +262,17 @@ describe('NetworkDetailsContent', () => {
248
262
249
263
describe ( 'Unsupported Operation' , ( ) => {
250
264
it . each ( [
251
- { isSetup : false , itemName : 'img' } ,
252
- { isSetup : true , itemName : 'img' } ,
265
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'img' } ,
266
+ { isSetup : true , isCaptureBodySetup : true , itemName : 'img' } ,
267
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'img' } ,
268
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'img' } ,
253
269
] ) (
254
270
'should render the `query params` & `unsupported` sections when the span is not FETCH or XHR and isSetup=$isSetup. [$itemName]' ,
255
- ( { isSetup} ) => {
271
+ ( { isSetup, isCaptureBodySetup } ) => {
256
272
render (
257
273
< NetworkDetailsContent
258
274
{ ...basicSectionProps ( ) }
275
+ isCaptureBodySetup = { isCaptureBodySetup }
259
276
isSetup = { isSetup }
260
277
item = { mockItems . img }
261
278
visibleTab = { visibleTab }
@@ -273,17 +290,23 @@ describe('NetworkDetailsContent', () => {
273
290
274
291
describe ( 'Supported Operation' , ( ) => {
275
292
it . each ( [
276
- { isSetup : false , itemName : 'fetchNoDataObj' } ,
277
- { isSetup : false , itemName : 'fetchUrlSkipped' } ,
278
- { isSetup : false , itemName : 'fetchBodySkipped' } ,
279
- { isSetup : false , itemName : 'fetchWithHeaders' } ,
280
- { isSetup : false , itemName : 'fetchWithRespBody' } ,
293
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'fetchNoDataObj' } ,
294
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'fetchUrlSkipped' } ,
295
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'fetchEmptyBody' } ,
296
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'fetchWithHeaders' } ,
297
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'fetchWithRespBody' } ,
298
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'fetchNoDataObj' } ,
299
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'fetchUrlSkipped' } ,
300
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'fetchEmptyBody' } ,
301
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'fetchWithHeaders' } ,
302
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'fetchWithRespBody' } ,
281
303
] ) (
282
304
'should render the `query params` & `setup` sections when isSetup is false, no matter the item. [$itemName]' ,
283
- ( { isSetup, itemName} ) => {
305
+ ( { isSetup, isCaptureBodySetup , itemName} ) => {
284
306
render (
285
307
< NetworkDetailsContent
286
308
{ ...basicSectionProps ( ) }
309
+ isCaptureBodySetup = { isCaptureBodySetup }
287
310
isSetup = { isSetup }
288
311
item = { mockItems [ itemName as keyof typeof mockItems ] }
289
312
visibleTab = { visibleTab }
@@ -299,16 +322,20 @@ describe('NetworkDetailsContent', () => {
299
322
) ;
300
323
301
324
it . each ( [
302
- { isSetup : true , itemName : 'fetchNoDataObj' } ,
303
- { isSetup : true , itemName : 'fetchUrlSkipped' } ,
304
- { isSetup : true , itemName : 'fetchBodySkipped' } ,
305
- { isSetup : true , itemName : 'fetchWithHeaders' } ,
325
+ { isSetup : true , isCaptureBodySetup : true , itemName : 'fetchNoDataObj' } ,
326
+ { isSetup : true , isCaptureBodySetup : true , itemName : 'fetchUrlSkipped' } ,
327
+ { isSetup : true , isCaptureBodySetup : true , itemName : 'fetchWithHeaders' } ,
328
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'fetchNoDataObj' } ,
329
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'fetchUrlSkipped' } ,
330
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'fetchEmptyBody' } ,
331
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'fetchWithHeaders' } ,
306
332
] ) (
307
333
'should render the `query params` & `setup` sections when the item has no data. [$itemName]' ,
308
- ( { isSetup, itemName} ) => {
334
+ ( { isSetup, isCaptureBodySetup , itemName} ) => {
309
335
render (
310
336
< NetworkDetailsContent
311
337
{ ...basicSectionProps ( ) }
338
+ isCaptureBodySetup = { isCaptureBodySetup }
312
339
isSetup = { isSetup }
313
340
item = { mockItems [ itemName as keyof typeof mockItems ] }
314
341
visibleTab = { visibleTab }
@@ -323,12 +350,37 @@ describe('NetworkDetailsContent', () => {
323
350
}
324
351
) ;
325
352
326
- it . each ( [ { isSetup : true , itemName : 'fetchWithRespBody' } ] ) (
353
+ it . each ( [ { isSetup : true , isCaptureBodySetup : true , itemName : 'fetchEmptyBody' } ] ) (
354
+ 'should render an empty `request body` when SDK option to capture network body is setup and the request body is empty.' ,
355
+ ( { isSetup, isCaptureBodySetup, itemName} ) => {
356
+ render (
357
+ < NetworkDetailsContent
358
+ { ...basicSectionProps ( ) }
359
+ isCaptureBodySetup = { isCaptureBodySetup }
360
+ isSetup = { isSetup }
361
+ item = { mockItems [ itemName as keyof typeof mockItems ] }
362
+ visibleTab = { visibleTab }
363
+ />
364
+ ) ;
365
+
366
+ expect ( queryScreenState ( ) ) . toStrictEqual ( {
367
+ dataSectionHeaders : [ 'Query String Parameters' , 'Request BodySize: 0 B' ] ,
368
+ isShowingUnsupported : false ,
369
+ isShowingSetup : false ,
370
+ } ) ;
371
+ }
372
+ ) ;
373
+
374
+ it . each ( [
375
+ { isSetup : true , isCaptureBodySetup : true , itemName : 'fetchWithRespBody' } ,
376
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'fetchWithRespBody' } ,
377
+ ] ) (
327
378
'should render the `query params` & `request payload` sections when things are setup and the item has some data. [$itemName]' ,
328
- ( { isSetup, itemName} ) => {
379
+ ( { isSetup, isCaptureBodySetup , itemName} ) => {
329
380
render (
330
381
< NetworkDetailsContent
331
382
{ ...basicSectionProps ( ) }
383
+ isCaptureBodySetup = { isCaptureBodySetup }
332
384
isSetup = { isSetup }
333
385
item = { mockItems [ itemName as keyof typeof mockItems ] }
334
386
visibleTab = { visibleTab }
@@ -350,14 +402,17 @@ describe('NetworkDetailsContent', () => {
350
402
351
403
describe ( 'Unsupported Operation' , ( ) => {
352
404
it . each ( [
353
- { isSetup : false , itemName : 'img' } ,
354
- { isSetup : true , itemName : 'img' } ,
405
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'img' } ,
406
+ { isSetup : true , isCaptureBodySetup : true , itemName : 'img' } ,
407
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'img' } ,
408
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'img' } ,
355
409
] ) (
356
410
'should render the `unsupported` section when the span is not FETCH or XHR and isSetup=$isSetup. [$itemName]' ,
357
- ( { isSetup} ) => {
411
+ ( { isSetup, isCaptureBodySetup } ) => {
358
412
render (
359
413
< NetworkDetailsContent
360
414
{ ...basicSectionProps ( ) }
415
+ isCaptureBodySetup = { isCaptureBodySetup }
361
416
isSetup = { isSetup }
362
417
item = { mockItems . img }
363
418
visibleTab = { visibleTab }
@@ -375,17 +430,23 @@ describe('NetworkDetailsContent', () => {
375
430
376
431
describe ( 'Supported Operation' , ( ) => {
377
432
it . each ( [
378
- { isSetup : false , itemName : 'fetchNoDataObj' } ,
379
- { isSetup : false , itemName : 'fetchUrlSkipped' } ,
380
- { isSetup : false , itemName : 'fetchBodySkipped' } ,
381
- { isSetup : false , itemName : 'fetchWithHeaders' } ,
382
- { isSetup : false , itemName : 'fetchWithRespBody' } ,
433
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'fetchNoDataObj' } ,
434
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'fetchUrlSkipped' } ,
435
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'fetchEmptyBody' } ,
436
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'fetchWithHeaders' } ,
437
+ { isSetup : false , isCaptureBodySetup : true , itemName : 'fetchWithRespBody' } ,
438
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'fetchNoDataObj' } ,
439
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'fetchUrlSkipped' } ,
440
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'fetchEmptyBody' } ,
441
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'fetchWithHeaders' } ,
442
+ { isSetup : false , isCaptureBodySetup : false , itemName : 'fetchWithRespBody' } ,
383
443
] ) (
384
444
'should render the `setup` section when isSetup is false, no matter the item. [$itemName]' ,
385
- ( { isSetup, itemName} ) => {
445
+ ( { isSetup, isCaptureBodySetup , itemName} ) => {
386
446
render (
387
447
< NetworkDetailsContent
388
448
{ ...basicSectionProps ( ) }
449
+ isCaptureBodySetup = { isCaptureBodySetup }
389
450
isSetup = { isSetup }
390
451
item = { mockItems [ itemName as keyof typeof mockItems ] }
391
452
visibleTab = { visibleTab }
@@ -401,16 +462,20 @@ describe('NetworkDetailsContent', () => {
401
462
) ;
402
463
403
464
it . each ( [
404
- { isSetup : true , itemName : 'fetchNoDataObj' } ,
405
- { isSetup : true , itemName : 'fetchUrlSkipped' } ,
406
- { isSetup : true , itemName : 'fetchBodySkipped' } ,
407
- { isSetup : true , itemName : 'fetchWithHeaders' } ,
465
+ { isSetup : true , isCaptureBodySetup : true , itemName : 'fetchNoDataObj' } ,
466
+ { isSetup : true , isCaptureBodySetup : true , itemName : 'fetchUrlSkipped' } ,
467
+ { isSetup : true , isCaptureBodySetup : true , itemName : 'fetchWithHeaders' } ,
468
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'fetchNoDataObj' } ,
469
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'fetchUrlSkipped' } ,
470
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'fetchEmptyBody' } ,
471
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'fetchWithHeaders' } ,
408
472
] ) (
409
473
'should render the `setup` section when the item has no data. [$itemName]' ,
410
- ( { isSetup, itemName} ) => {
474
+ ( { isSetup, isCaptureBodySetup , itemName} ) => {
411
475
render (
412
476
< NetworkDetailsContent
413
477
{ ...basicSectionProps ( ) }
478
+ isCaptureBodySetup = { isCaptureBodySetup }
414
479
isSetup = { isSetup }
415
480
item = { mockItems [ itemName as keyof typeof mockItems ] }
416
481
visibleTab = { visibleTab }
@@ -425,12 +490,37 @@ describe('NetworkDetailsContent', () => {
425
490
}
426
491
) ;
427
492
428
- it . each ( [ { isSetup : true , itemName : 'fetchWithRespBody' } ] ) (
493
+ it . each ( [ { isSetup : true , isCaptureBodySetup : true , itemName : 'fetchEmptyBody' } ] ) (
494
+ 'should render an empty `response body` when SDK option to capture network body is setup and the response body is empty.' ,
495
+ ( { isSetup, isCaptureBodySetup, itemName} ) => {
496
+ render (
497
+ < NetworkDetailsContent
498
+ { ...basicSectionProps ( ) }
499
+ isCaptureBodySetup = { isCaptureBodySetup }
500
+ isSetup = { isSetup }
501
+ item = { mockItems [ itemName as keyof typeof mockItems ] }
502
+ visibleTab = { visibleTab }
503
+ />
504
+ ) ;
505
+
506
+ expect ( queryScreenState ( ) ) . toStrictEqual ( {
507
+ dataSectionHeaders : [ 'Response BodySize: 0 B' ] ,
508
+ isShowingUnsupported : false ,
509
+ isShowingSetup : false ,
510
+ } ) ;
511
+ }
512
+ ) ;
513
+
514
+ it . each ( [
515
+ { isSetup : true , isCaptureBodySetup : true , itemName : 'fetchWithRespBody' } ,
516
+ { isSetup : true , isCaptureBodySetup : false , itemName : 'fetchWithRespBody' } ,
517
+ ] ) (
429
518
'should render the `response body` section when things are setup and the item has some data. [$itemName]' ,
430
- ( { isSetup, itemName} ) => {
519
+ ( { isSetup, isCaptureBodySetup , itemName} ) => {
431
520
render (
432
521
< NetworkDetailsContent
433
522
{ ...basicSectionProps ( ) }
523
+ isCaptureBodySetup = { isCaptureBodySetup }
434
524
isSetup = { isSetup }
435
525
item = { mockItems [ itemName as keyof typeof mockItems ] }
436
526
visibleTab = { visibleTab }
0 commit comments