-
Notifications
You must be signed in to change notification settings - Fork 49
Expand file tree
/
Copy pathjunit.xml
More file actions
953 lines (953 loc) · 96.4 KB
/
junit.xml
File metadata and controls
953 lines (953 loc) · 96.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="jest tests" tests="442" failures="0" errors="0" time="91.071">
<testsuite name="PropertiesService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:52:10" time="26.51" tests="31">
<testcase classname="PropertiesService create should create a property successfully" name="PropertiesService create should create a property successfully" time="0.078">
</testcase>
<testcase classname="PropertiesService create should throw NotFoundException if user does not exist" name="PropertiesService create should throw NotFoundException if user does not exist" time="0.166">
</testcase>
<testcase classname="PropertiesService create should handle database errors" name="PropertiesService create should handle database errors" time="0.023">
</testcase>
<testcase classname="PropertiesService findAll should return paginated properties with filters" name="PropertiesService findAll should return paginated properties with filters" time="0.024">
</testcase>
<testcase classname="PropertiesService findAll should apply search filter correctly" name="PropertiesService findAll should apply search filter correctly" time="0.018">
</testcase>
<testcase classname="PropertiesService findAll should apply price range filter correctly" name="PropertiesService findAll should apply price range filter correctly" time="0.018">
</testcase>
<testcase classname="PropertiesService findAll should apply property type filter correctly" name="PropertiesService findAll should apply property type filter correctly" time="0.027">
</testcase>
<testcase classname="PropertiesService findAll should apply status filter correctly" name="PropertiesService findAll should apply status filter correctly" time="0.01">
</testcase>
<testcase classname="PropertiesService findAll should apply city and country location filter correctly" name="PropertiesService findAll should apply city and country location filter correctly" time="0.017">
</testcase>
<testcase classname="PropertiesService findAll should apply bedroom range filter correctly" name="PropertiesService findAll should apply bedroom range filter correctly" time="0.014">
</testcase>
<testcase classname="PropertiesService findAll should apply bathroom range filter correctly" name="PropertiesService findAll should apply bathroom range filter correctly" time="0.012">
</testcase>
<testcase classname="PropertiesService findAll should apply area range filter correctly" name="PropertiesService findAll should apply area range filter correctly" time="0.012">
</testcase>
<testcase classname="PropertiesService findAll should apply owner filter correctly" name="PropertiesService findAll should apply owner filter correctly" time="0.01">
</testcase>
<testcase classname="PropertiesService findAll should apply pagination correctly" name="PropertiesService findAll should apply pagination correctly" time="0.012">
</testcase>
<testcase classname="PropertiesService findAll should apply sorting correctly" name="PropertiesService findAll should apply sorting correctly" time="0.014">
</testcase>
<testcase classname="PropertiesService findAll should handle empty query with defaults" name="PropertiesService findAll should handle empty query with defaults" time="0.014">
</testcase>
<testcase classname="PropertiesService findAll should handle multiple filters combined" name="PropertiesService findAll should handle multiple filters combined" time="0.012">
</testcase>
<testcase classname="PropertiesService findOne should return a property by ID" name="PropertiesService findOne should return a property by ID" time="0.012">
</testcase>
<testcase classname="PropertiesService findOne should throw NotFoundException if property does not exist" name="PropertiesService findOne should throw NotFoundException if property does not exist" time="0.026">
</testcase>
<testcase classname="PropertiesService update should update a property successfully" name="PropertiesService update should update a property successfully" time="0.017">
</testcase>
<testcase classname="PropertiesService update should throw NotFoundException if property does not exist" name="PropertiesService update should throw NotFoundException if property does not exist" time="0.011">
</testcase>
<testcase classname="PropertiesService remove should delete a property successfully" name="PropertiesService remove should delete a property successfully" time="0.013">
</testcase>
<testcase classname="PropertiesService remove should throw NotFoundException if property does not exist" name="PropertiesService remove should throw NotFoundException if property does not exist" time="0.012">
</testcase>
<testcase classname="PropertiesService searchNearby should search properties near a location" name="PropertiesService searchNearby should search properties near a location" time="0.011">
</testcase>
<testcase classname="PropertiesService updateStatus should update property status with valid transition" name="PropertiesService updateStatus should update property status with valid transition" time="0.011">
</testcase>
<testcase classname="PropertiesService updateStatus should throw BadRequestException for invalid status transition" name="PropertiesService updateStatus should throw BadRequestException for invalid status transition" time="0.009">
</testcase>
<testcase classname="PropertiesService findByOwner should return properties by owner" name="PropertiesService findByOwner should return properties by owner" time="0.008">
</testcase>
<testcase classname="PropertiesService getStatistics should return property statistics" name="PropertiesService getStatistics should return property statistics" time="0.014">
</testcase>
<testcase classname="PropertiesService helper methods should format address correctly" name="PropertiesService helper methods should format address correctly" time="0.01">
</testcase>
<testcase classname="PropertiesService helper methods should map property status correctly" name="PropertiesService helper methods should map property status correctly" time="0.042">
</testcase>
<testcase classname="PropertiesService helper methods should validate status transitions correctly" name="PropertiesService helper methods should validate status transitions correctly" time="0.011">
</testcase>
</testsuite>
<testsuite name="CacheInvalidationService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:52:36" time="2.471" tests="31">
<testcase classname="CacheInvalidationService initialization should initialize with default rules" name="CacheInvalidationService initialization should initialize with default rules" time="0.032">
</testcase>
<testcase classname="CacheInvalidationService registerRule should register a new invalidation rule" name="CacheInvalidationService registerRule should register a new invalidation rule" time="0.028">
</testcase>
<testcase classname="CacheInvalidationService registerRule should update stats when registering a rule" name="CacheInvalidationService registerRule should update stats when registering a rule" time="0.032">
</testcase>
<testcase classname="CacheInvalidationService unregisterRule should unregister a rule" name="CacheInvalidationService unregisterRule should unregister a rule" time="0.012">
</testcase>
<testcase classname="CacheInvalidationService unregisterRule should return false for non-existent rule" name="CacheInvalidationService unregisterRule should return false for non-existent rule" time="0.016">
</testcase>
<testcase classname="CacheInvalidationService setRuleEnabled should enable/disable a rule" name="CacheInvalidationService setRuleEnabled should enable/disable a rule" time="0.015">
</testcase>
<testcase classname="CacheInvalidationService setRuleEnabled should return false for non-existent rule" name="CacheInvalidationService setRuleEnabled should return false for non-existent rule" time="0.015">
</testcase>
<testcase classname="CacheInvalidationService executeRule should execute a pattern rule" name="CacheInvalidationService executeRule should execute a pattern rule" time="0.017">
</testcase>
<testcase classname="CacheInvalidationService executeRule should execute a tag rule" name="CacheInvalidationService executeRule should execute a tag rule" time="0.014">
</testcase>
<testcase classname="CacheInvalidationService executeRule should skip disabled rules" name="CacheInvalidationService executeRule should skip disabled rules" time="0.015">
</testcase>
<testcase classname="CacheInvalidationService executeRule should return 0 for non-existent rule" name="CacheInvalidationService executeRule should return 0 for non-existent rule" time="0.021">
</testcase>
<testcase classname="CacheInvalidationService executeRule should execute conditional rule" name="CacheInvalidationService executeRule should execute conditional rule" time="0.018">
</testcase>
<testcase classname="CacheInvalidationService executeRule should execute dependency rule with cascade" name="CacheInvalidationService executeRule should execute dependency rule with cascade" time="0.021">
</testcase>
<testcase classname="CacheInvalidationService executeRule should handle rule execution errors" name="CacheInvalidationService executeRule should handle rule execution errors" time="0.013">
</testcase>
<testcase classname="CacheInvalidationService executeAllRules should execute all enabled rules" name="CacheInvalidationService executeAllRules should execute all enabled rules" time="0.017">
</testcase>
<testcase classname="CacheInvalidationService smartInvalidate should invalidate based on entity type and change type" name="CacheInvalidationService smartInvalidate should invalidate based on entity type and change type" time="0.013">
</testcase>
<testcase classname="CacheInvalidationService smartInvalidate should handle create change type" name="CacheInvalidationService smartInvalidate should handle create change type" time="0.011">
</testcase>
<testcase classname="CacheInvalidationService smartInvalidate should handle delete change type" name="CacheInvalidationService smartInvalidate should handle delete change type" time="0.012">
</testcase>
<testcase classname="CacheInvalidationService invalidateByTagsWithPolicy should invalidate by tags with cascade" name="CacheInvalidationService invalidateByTagsWithPolicy should invalidate by tags with cascade" time="0.019">
</testcase>
<testcase classname="CacheInvalidationService invalidateByTagsWithPolicy should invalidate by tags without cascade" name="CacheInvalidationService invalidateByTagsWithPolicy should invalidate by tags without cascade" time="0.014">
</testcase>
<testcase classname="CacheInvalidationService batchInvalidate should batch invalidate multiple keys" name="CacheInvalidationService batchInvalidate should batch invalidate multiple keys" time="0.009">
</testcase>
<testcase classname="CacheInvalidationService batchInvalidate should handle partial failures" name="CacheInvalidationService batchInvalidate should handle partial failures" time="0.034">
</testcase>
<testcase classname="CacheInvalidationService invalidateWithCallback should invalidate and refresh with callback" name="CacheInvalidationService invalidateWithCallback should invalidate and refresh with callback" time="0.01">
</testcase>
<testcase classname="CacheInvalidationService invalidateWithCallback should invalidate without callback" name="CacheInvalidationService invalidateWithCallback should invalidate without callback" time="0.013">
</testcase>
<testcase classname="CacheInvalidationService invalidateWithCallback should handle refresh callback errors" name="CacheInvalidationService invalidateWithCallback should handle refresh callback errors" time="0.014">
</testcase>
<testcase classname="CacheInvalidationService getStats should return invalidation statistics" name="CacheInvalidationService getStats should return invalidation statistics" time="0.015">
</testcase>
<testcase classname="CacheInvalidationService getRules should return all rules" name="CacheInvalidationService getRules should return all rules" time="0.014">
</testcase>
<testcase classname="CacheInvalidationService getRule should return a specific rule" name="CacheInvalidationService getRule should return a specific rule" time="0.015">
</testcase>
<testcase classname="CacheInvalidationService getRule should return undefined for non-existent rule" name="CacheInvalidationService getRule should return undefined for non-existent rule" time="0.015">
</testcase>
<testcase classname="CacheInvalidationService scheduledCleanup should execute time-based rules" name="CacheInvalidationService scheduledCleanup should execute time-based rules" time="0.01">
</testcase>
<testcase classname="CacheInvalidationService scheduledRefresh should execute conditional refresh rules" name="CacheInvalidationService scheduledRefresh should execute conditional refresh rules" time="0.014">
</testcase>
</testsuite>
<testsuite name="PasswordRotationService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:52:39" time="1.668" tests="29">
<testcase classname="PasswordRotationService should be defined" name="PasswordRotationService should be defined" time="0.026">
</testcase>
<testcase classname="PasswordRotationService checkRotationStatus should return canRotate false when user not found" name="PasswordRotationService checkRotationStatus should return canRotate false when user not found" time="0.022">
</testcase>
<testcase classname="PasswordRotationService checkRotationStatus should return canRotate false when user has no password" name="PasswordRotationService checkRotationStatus should return canRotate false when user has no password" time="0.013">
</testcase>
<testcase classname="PasswordRotationService checkRotationStatus should return expired status when password has expired" name="PasswordRotationService checkRotationStatus should return expired status when password has expired" time="0.012">
</testcase>
<testcase classname="PasswordRotationService checkRotationStatus should return valid status with days until expiry" name="PasswordRotationService checkRotationStatus should return valid status with days until expiry" time="0.016">
</testcase>
<testcase classname="PasswordRotationService checkRotationStatus should use password history date when available" name="PasswordRotationService checkRotationStatus should use password history date when available" time="0.012">
</testcase>
<testcase classname="PasswordRotationService validatePasswordNotInHistory should return valid true when history is empty" name="PasswordRotationService validatePasswordNotInHistory should return valid true when history is empty" time="0.024">
</testcase>
<testcase classname="PasswordRotationService validatePasswordNotInHistory should return valid true when password not in history" name="PasswordRotationService validatePasswordNotInHistory should return valid true when password not in history" time="0.012">
</testcase>
<testcase classname="PasswordRotationService validatePasswordNotInHistory should return valid false when password matches history" name="PasswordRotationService validatePasswordNotInHistory should return valid false when password matches history" time="0.017">
</testcase>
<testcase classname="PasswordRotationService validatePasswordNotInHistory should respect custom password history count" name="PasswordRotationService validatePasswordNotInHistory should respect custom password history count" time="0.009">
</testcase>
<testcase classname="PasswordRotationService addPasswordToHistory should add password to history and not delete when under limit" name="PasswordRotationService addPasswordToHistory should add password to history and not delete when under limit" time="0.018">
</testcase>
<testcase classname="PasswordRotationService addPasswordToHistory should delete old entries when over limit" name="PasswordRotationService addPasswordToHistory should delete old entries when over limit" time="0.016">
</testcase>
<testcase classname="PasswordRotationService validatePasswordRotation should return invalid when rotation status cannot rotate" name="PasswordRotationService validatePasswordRotation should return invalid when rotation status cannot rotate" time="0.014">
</testcase>
<testcase classname="PasswordRotationService validatePasswordRotation should return invalid when password is in history" name="PasswordRotationService validatePasswordRotation should return invalid when password is in history" time="0.007">
</testcase>
<testcase classname="PasswordRotationService validatePasswordRotation should return valid when all checks pass" name="PasswordRotationService validatePasswordRotation should return valid when all checks pass" time="0.01">
</testcase>
<testcase classname="PasswordRotationService getPasswordHistory should return password history with default limit" name="PasswordRotationService getPasswordHistory should return password history with default limit" time="0.007">
</testcase>
<testcase classname="PasswordRotationService getPasswordHistory should return password history with custom limit" name="PasswordRotationService getPasswordHistory should return password history with custom limit" time="0.012">
</testcase>
<testcase classname="PasswordRotationService getPasswordHistory should select only required fields" name="PasswordRotationService getPasswordHistory should select only required fields" time="0.013">
</testcase>
<testcase classname="PasswordRotationService clearPasswordHistory should delete all password history for user" name="PasswordRotationService clearPasswordHistory should delete all password history for user" time="0.024">
</testcase>
<testcase classname="PasswordRotationService getUsersWithExpiredPasswords should return empty array when no users have expired passwords" name="PasswordRotationService getUsersWithExpiredPasswords should return empty array when no users have expired passwords" time="0.013">
</testcase>
<testcase classname="PasswordRotationService getUsersWithExpiredPasswords should return users with expired passwords" name="PasswordRotationService getUsersWithExpiredPasswords should return users with expired passwords" time="0.015">
</testcase>
<testcase classname="PasswordRotationService getUsersWithExpiredPasswords should use password history date for expiry calculation" name="PasswordRotationService getUsersWithExpiredPasswords should use password history date for expiry calculation" time="0.022">
</testcase>
<testcase classname="PasswordRotationService getUsersWithExpiredPasswords should only include users with passwords" name="PasswordRotationService getUsersWithExpiredPasswords should only include users with passwords" time="0.017">
</testcase>
<testcase classname="PasswordRotationService requiresPasswordRotation should return false when user not found" name="PasswordRotationService requiresPasswordRotation should return false when user not found" time="0.009">
</testcase>
<testcase classname="PasswordRotationService requiresPasswordRotation should return false when user has no password" name="PasswordRotationService requiresPasswordRotation should return false when user has no password" time="0.016">
</testcase>
<testcase classname="PasswordRotationService requiresPasswordRotation should return true when password is expired" name="PasswordRotationService requiresPasswordRotation should return true when password is expired" time="0.014">
</testcase>
<testcase classname="PasswordRotationService requiresPasswordRotation should return true when within warning period" name="PasswordRotationService requiresPasswordRotation should return true when within warning period" time="0.016">
</testcase>
<testcase classname="PasswordRotationService requiresPasswordRotation should return false when not in warning period and not expired" name="PasswordRotationService requiresPasswordRotation should return false when not in warning period and not expired" time="0.016">
</testcase>
<testcase classname="PasswordRotationService requiresPasswordRotation should use custom warning days from config" name="PasswordRotationService requiresPasswordRotation should use custom warning days from config" time="0.016">
</testcase>
</testsuite>
<testsuite name="ApiKeyService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:52:41" time="2.573" tests="23">
<testcase classname="ApiKeyService should be defined" name="ApiKeyService should be defined" time="0.022">
</testcase>
<testcase classname="ApiKeyService create should create a new API key with valid scopes" name="ApiKeyService create should create a new API key with valid scopes" time="0.034">
</testcase>
<testcase classname="ApiKeyService create should throw BadRequestException for invalid scopes" name="ApiKeyService create should throw BadRequestException for invalid scopes" time="0.109">
</testcase>
<testcase classname="ApiKeyService findAll should return all API keys" name="ApiKeyService findAll should return all API keys" time="0.011">
</testcase>
<testcase classname="ApiKeyService findOne should return a single API key" name="ApiKeyService findOne should return a single API key" time="0.013">
</testcase>
<testcase classname="ApiKeyService findOne should throw NotFoundException if API key not found" name="ApiKeyService findOne should throw NotFoundException if API key not found" time="0.009">
</testcase>
<testcase classname="ApiKeyService update should update an API key" name="ApiKeyService update should update an API key" time="0.013">
</testcase>
<testcase classname="ApiKeyService update should throw NotFoundException if API key not found" name="ApiKeyService update should throw NotFoundException if API key not found" time="0.014">
</testcase>
<testcase classname="ApiKeyService revoke should revoke an API key" name="ApiKeyService revoke should revoke an API key" time="0.012">
</testcase>
<testcase classname="ApiKeyService revoke should throw NotFoundException if API key not found" name="ApiKeyService revoke should throw NotFoundException if API key not found" time="0.013">
</testcase>
<testcase classname="ApiKeyService validateApiKey should throw UnauthorizedException for invalid key format" name="ApiKeyService validateApiKey should throw UnauthorizedException for invalid key format" time="0.012">
</testcase>
<testcase classname="ApiKeyService validateApiKey should throw UnauthorizedException for non-existent key" name="ApiKeyService validateApiKey should throw UnauthorizedException for non-existent key" time="0.01">
</testcase>
<testcase classname="ApiKeyService validateApiKey should throw UnauthorizedException when rate limit exceeded" name="ApiKeyService validateApiKey should throw UnauthorizedException when rate limit exceeded" time="0.016">
</testcase>
<testcase classname="ApiKeyService rotateKey should rotate an API key successfully" name="ApiKeyService rotateKey should rotate an API key successfully" time="0.035">
</testcase>
<testcase classname="ApiKeyService rotateKey should throw NotFoundException if API key not found" name="ApiKeyService rotateKey should throw NotFoundException if API key not found" time="0.01">
</testcase>
<testcase classname="ApiKeyService rotateKey should throw BadRequestException if API key is revoked" name="ApiKeyService rotateKey should throw BadRequestException if API key is revoked" time="0.012">
</testcase>
<testcase classname="ApiKeyService getRotationStatus should return rotation status for an API key" name="ApiKeyService getRotationStatus should return rotation status for an API key" time="0.012">
</testcase>
<testcase classname="ApiKeyService getRotationStatus should return requiresRotation true for expired key" name="ApiKeyService getRotationStatus should return requiresRotation true for expired key" time="0.01">
</testcase>
<testcase classname="ApiKeyService getRotationStatus should throw NotFoundException if API key not found" name="ApiKeyService getRotationStatus should throw NotFoundException if API key not found" time="0.014">
</testcase>
<testcase classname="ApiKeyService getKeysRequiringRotation should return keys that have passed rotation due date" name="ApiKeyService getKeysRequiringRotation should return keys that have passed rotation due date" time="0.01">
</testcase>
<testcase classname="ApiKeyService getKeysApproachingRotation should return keys within warning period" name="ApiKeyService getKeysApproachingRotation should return keys within warning period" time="0.013">
</testcase>
<testcase classname="ApiKeyService getUsageAnalytics should return usage analytics for an API key" name="ApiKeyService getUsageAnalytics should return usage analytics for an API key" time="0.013">
</testcase>
<testcase classname="ApiKeyService getUsageAnalytics should throw NotFoundException if API key not found" name="ApiKeyService getUsageAnalytics should throw NotFoundException if API key not found" time="0.012">
</testcase>
</testsuite>
<testsuite name="CacheWarmingService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:52:44" time="1.863" tests="25">
<testcase classname="CacheWarmingService onModuleInit should initialize with default strategies" name="CacheWarmingService onModuleInit should initialize with default strategies" time="0.042">
</testcase>
<testcase classname="CacheWarmingService registerStrategy should register a new strategy" name="CacheWarmingService registerStrategy should register a new strategy" time="0.018">
</testcase>
<testcase classname="CacheWarmingService unregisterStrategy should unregister a strategy" name="CacheWarmingService unregisterStrategy should unregister a strategy" time="0.014">
</testcase>
<testcase classname="CacheWarmingService unregisterStrategy should return false for non-existent strategy" name="CacheWarmingService unregisterStrategy should return false for non-existent strategy" time="0.016">
</testcase>
<testcase classname="CacheWarmingService setStrategyEnabled should enable/disable a strategy" name="CacheWarmingService setStrategyEnabled should enable/disable a strategy" time="0.01">
</testcase>
<testcase classname="CacheWarmingService setStrategyEnabled should return false for non-existent strategy" name="CacheWarmingService setStrategyEnabled should return false for non-existent strategy" time="0.018">
</testcase>
<testcase classname="CacheWarmingService executeStrategy should execute a strategy and cache results" name="CacheWarmingService executeStrategy should execute a strategy and cache results" time="0.017">
</testcase>
<testcase classname="CacheWarmingService executeStrategy should skip already cached entries" name="CacheWarmingService executeStrategy should skip already cached entries" time="0.025">
</testcase>
<testcase classname="CacheWarmingService executeStrategy should skip disabled strategies" name="CacheWarmingService executeStrategy should skip disabled strategies" time="0.014">
</testcase>
<testcase classname="CacheWarmingService executeStrategy should handle factory errors gracefully" name="CacheWarmingService executeStrategy should handle factory errors gracefully" time="0.015">
</testcase>
<testcase classname="CacheWarmingService executeStrategy should check condition before executing task" name="CacheWarmingService executeStrategy should check condition before executing task" time="0.015">
</testcase>
<testcase classname="CacheWarmingService executeStrategy should handle async conditions" name="CacheWarmingService executeStrategy should handle async conditions" time="0.012">
</testcase>
<testcase classname="CacheWarmingService executeAllStrategies should execute all enabled strategies" name="CacheWarmingService executeAllStrategies should execute all enabled strategies" time="0.011">
</testcase>
<testcase classname="CacheWarmingService executeTask should execute a single task" name="CacheWarmingService executeTask should execute a single task" time="0.011">
</testcase>
<testcase classname="CacheWarmingService executeTask should return false if condition not met" name="CacheWarmingService executeTask should return false if condition not met" time="0.01">
</testcase>
<testcase classname="CacheWarmingService executeTask should return false if already cached" name="CacheWarmingService executeTask should return false if already cached" time="0.013">
</testcase>
<testcase classname="CacheWarmingService executeTask should return false on factory error" name="CacheWarmingService executeTask should return false on factory error" time="0.014">
</testcase>
<testcase classname="CacheWarmingService warmCache should warm cache with multiple tasks" name="CacheWarmingService warmCache should warm cache with multiple tasks" time="0.012">
</testcase>
<testcase classname="CacheWarmingService warmCache should sort tasks by priority" name="CacheWarmingService warmCache should sort tasks by priority" time="0.026">
</testcase>
<testcase classname="CacheWarmingService getStats should return warming statistics" name="CacheWarmingService getStats should return warming statistics" time="0.015">
</testcase>
<testcase classname="CacheWarmingService resetStats should reset all statistics" name="CacheWarmingService resetStats should reset all statistics" time="0.007">
</testcase>
<testcase classname="CacheWarmingService getStrategies should return all registered strategies" name="CacheWarmingService getStrategies should return all registered strategies" time="0.013">
</testcase>
<testcase classname="CacheWarmingService getStrategy should return a specific strategy" name="CacheWarmingService getStrategy should return a specific strategy" time="0.013">
</testcase>
<testcase classname="CacheWarmingService getStrategy should return undefined for non-existent strategy" name="CacheWarmingService getStrategy should return undefined for non-existent strategy" time="0.013">
</testcase>
<testcase classname="CacheWarmingService prewarmOnStartup should prewarm critical strategies" name="CacheWarmingService prewarmOnStartup should prewarm critical strategies" time="0.012">
</testcase>
</testsuite>
<testsuite name="MultiLevelCacheService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:52:46" time="1.851" tests="24">
<testcase classname="MultiLevelCacheService get should return value from L1 cache if present and not expired" name="MultiLevelCacheService get should return value from L1 cache if present and not expired" time="0.084">
</testcase>
<testcase classname="MultiLevelCacheService get should fetch from L2 cache if not in L1" name="MultiLevelCacheService get should fetch from L2 cache if not in L1" time="0.019">
</testcase>
<testcase classname="MultiLevelCacheService get should return undefined if not in any cache level" name="MultiLevelCacheService get should return undefined if not in any cache level" time="0.013">
</testcase>
<testcase classname="MultiLevelCacheService get should handle L2 cache errors gracefully" name="MultiLevelCacheService get should handle L2 cache errors gracefully" time="0.016">
</testcase>
<testcase classname="MultiLevelCacheService set should set value in both L1 and L2 cache" name="MultiLevelCacheService set should set value in both L1 and L2 cache" time="0.018">
</testcase>
<testcase classname="MultiLevelCacheService set should use default TTLs when not specified" name="MultiLevelCacheService set should use default TTLs when not specified" time="0.015">
</testcase>
<testcase classname="MultiLevelCacheService set should store tags for invalidation" name="MultiLevelCacheService set should store tags for invalidation" time="0.031">
</testcase>
<testcase classname="MultiLevelCacheService del should delete from both L1 and L2 cache" name="MultiLevelCacheService del should delete from both L1 and L2 cache" time="0.015">
</testcase>
<testcase classname="MultiLevelCacheService wrap should return cached value if present" name="MultiLevelCacheService wrap should return cached value if present" time="0.014">
</testcase>
<testcase classname="MultiLevelCacheService wrap should call factory and cache result if not present" name="MultiLevelCacheService wrap should call factory and cache result if not present" time="0.015">
</testcase>
<testcase classname="MultiLevelCacheService invalidateByTag should invalidate all entries with a given tag" name="MultiLevelCacheService invalidateByTag should invalidate all entries with a given tag" time="0.013">
</testcase>
<testcase classname="MultiLevelCacheService invalidateByTag should return 0 if no keys found for tag" name="MultiLevelCacheService invalidateByTag should return 0 if no keys found for tag" time="0.013">
</testcase>
<testcase classname="MultiLevelCacheService invalidateByPattern should invalidate entries matching pattern" name="MultiLevelCacheService invalidateByPattern should invalidate entries matching pattern" time="0.018">
</testcase>
<testcase classname="MultiLevelCacheService invalidateByPattern should handle L1 cache entries matching pattern" name="MultiLevelCacheService invalidateByPattern should handle L1 cache entries matching pattern" time="0.016">
</testcase>
<testcase classname="MultiLevelCacheService invalidateWithCascade should invalidate with cascade for property namespace" name="MultiLevelCacheService invalidateWithCascade should invalidate with cascade for property namespace" time="0.011">
</testcase>
<testcase classname="MultiLevelCacheService getStats should return cache statistics" name="MultiLevelCacheService getStats should return cache statistics" time="0.011">
</testcase>
<testcase classname="MultiLevelCacheService getStats should track hits and misses correctly" name="MultiLevelCacheService getStats should track hits and misses correctly" time="0.024">
</testcase>
<testcase classname="MultiLevelCacheService resetStats should reset all statistics" name="MultiLevelCacheService resetStats should reset all statistics" time="0.011">
</testcase>
<testcase classname="MultiLevelCacheService clear should clear both L1 and L2 cache" name="MultiLevelCacheService clear should clear both L1 and L2 cache" time="0.011">
</testcase>
<testcase classname="MultiLevelCacheService registerInvalidationPolicy should register custom invalidation policy" name="MultiLevelCacheService registerInvalidationPolicy should register custom invalidation policy" time="0.012">
</testcase>
<testcase classname="MultiLevelCacheService incrementVersion should increment version for existing entry" name="MultiLevelCacheService incrementVersion should increment version for existing entry" time="0.014">
</testcase>
<testcase classname="MultiLevelCacheService incrementVersion should return 1 for non-existing entry" name="MultiLevelCacheService incrementVersion should return 1 for non-existing entry" time="0.013">
</testcase>
<testcase classname="MultiLevelCacheService L1 cache eviction should evict entries when L1 cache is full" name="MultiLevelCacheService L1 cache eviction should evict entries when L1 cache is full" time="0.015">
</testcase>
<testcase classname="MultiLevelCacheService cleanup should clean up expired L1 entries" name="MultiLevelCacheService cleanup should clean up expired L1 entries" time="0.034">
</testcase>
</testsuite>
<testsuite name="SensitiveEndpointRateLimitGuard" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:52:48" time="6.626" tests="12">
<testcase classname="SensitiveEndpointRateLimitGuard canActivate should allow request when rate limit is not exceeded" name="SensitiveEndpointRateLimitGuard canActivate should allow request when rate limit is not exceeded" time="0.026">
</testcase>
<testcase classname="SensitiveEndpointRateLimitGuard canActivate should block request when IP is blocked" name="SensitiveEndpointRateLimitGuard canActivate should block request when IP is blocked" time="0.063">
</testcase>
<testcase classname="SensitiveEndpointRateLimitGuard canActivate should allow request when IP is whitelisted" name="SensitiveEndpointRateLimitGuard canActivate should allow request when IP is whitelisted" time="0.014">
</testcase>
<testcase classname="SensitiveEndpointRateLimitGuard canActivate should throw HttpException when rate limit is exceeded" name="SensitiveEndpointRateLimitGuard canActivate should throw HttpException when rate limit is exceeded" time="0.014">
</testcase>
<testcase classname="SensitiveEndpointRateLimitGuard canActivate should block IP when blockOnExceed is enabled and rate limit exceeded" name="SensitiveEndpointRateLimitGuard canActivate should block IP when blockOnExceed is enabled and rate limit exceeded" time="0.013">
</testcase>
<testcase classname="SensitiveEndpointRateLimitGuard canActivate should apply progressive delay when enabled" name="SensitiveEndpointRateLimitGuard canActivate should apply progressive delay when enabled" time="5.053">
</testcase>
<testcase classname="SensitiveEndpointRateLimitGuard canActivate should use email from request body for rate limit key" name="SensitiveEndpointRateLimitGuard canActivate should use email from request body for rate limit key" time="0.019">
</testcase>
<testcase classname="SensitiveEndpointRateLimitGuard canActivate should use user ID from request for rate limit key when authenticated" name="SensitiveEndpointRateLimitGuard canActivate should use user ID from request for rate limit key when authenticated" time="0.017">
</testcase>
<testcase classname="SensitiveEndpointRateLimitGuard canActivate should set rate limit headers in response" name="SensitiveEndpointRateLimitGuard canActivate should set rate limit headers in response" time="0.021">
</testcase>
<testcase classname="SensitiveEndpointRateLimitGuard canActivate should fail open when rate limiting service throws error" name="SensitiveEndpointRateLimitGuard canActivate should fail open when rate limiting service throws error" time="0.02">
</testcase>
<testcase classname="SensitiveEndpointRateLimitGuard canActivate should extract IP from x-forwarded-for header" name="SensitiveEndpointRateLimitGuard canActivate should extract IP from x-forwarded-for header" time="0.018">
</testcase>
<testcase classname="SensitiveEndpointRateLimitGuard canActivate should use custom rate limit options from decorator" name="SensitiveEndpointRateLimitGuard canActivate should use custom rate limit options from decorator" time="0.021">
</testcase>
</testsuite>
<testsuite name="HeaderValidationMiddleware" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:52:54" time="1.725" tests="31">
<testcase classname="HeaderValidationMiddleware should be defined" name="HeaderValidationMiddleware should be defined" time="0.032">
</testcase>
<testcase classname="HeaderValidationMiddleware use should pass valid headers" name="HeaderValidationMiddleware use should pass valid headers" time="0.04">
</testcase>
<testcase classname="HeaderValidationMiddleware use should throw BadRequestException for blocked headers" name="HeaderValidationMiddleware use should throw BadRequestException for blocked headers" time="0.125">
</testcase>
<testcase classname="HeaderValidationMiddleware use should throw BadRequestException for XSS patterns" name="HeaderValidationMiddleware use should throw BadRequestException for XSS patterns" time="0.023">
</testcase>
<testcase classname="HeaderValidationMiddleware use should throw BadRequestException for SQL injection patterns" name="HeaderValidationMiddleware use should throw BadRequestException for SQL injection patterns" time="0.019">
</testcase>
<testcase classname="HeaderValidationMiddleware use should throw BadRequestException for null bytes" name="HeaderValidationMiddleware use should throw BadRequestException for null bytes" time="0.018">
</testcase>
<testcase classname="HeaderValidationMiddleware use should pass headers with authorization" name="HeaderValidationMiddleware use should pass headers with authorization" time="0.015">
</testcase>
<testcase classname="HeaderValidationMiddleware use should pass headers with API key" name="HeaderValidationMiddleware use should pass headers with API key" time="0.008">
</testcase>
<testcase classname="HeaderValidationMiddleware validateHeaders should return valid for empty headers" name="HeaderValidationMiddleware validateHeaders should return valid for empty headers" time="0.012">
</testcase>
<testcase classname="HeaderValidationMiddleware validateHeaders should return invalid for oversized header" name="HeaderValidationMiddleware validateHeaders should return invalid for oversized header" time="0.009">
</testcase>
<testcase classname="HeaderValidationMiddleware validateHeaders should return invalid for too many headers" name="HeaderValidationMiddleware validateHeaders should return invalid for too many headers" time="0.011">
</testcase>
<testcase classname="HeaderValidationMiddleware validateHeaders should return warning for control characters" name="HeaderValidationMiddleware validateHeaders should return warning for control characters" time="0.011">
</testcase>
<testcase classname="HeaderValidationMiddleware validateHeaders should return warning for missing Content-Type on POST" name="HeaderValidationMiddleware validateHeaders should return warning for missing Content-Type on POST" time="0.013">
</testcase>
<testcase classname="HeaderValidationMiddleware validateHeaders should return invalid for invalid Content-Type" name="HeaderValidationMiddleware validateHeaders should return invalid for invalid Content-Type" time="0.009">
</testcase>
<testcase classname="HeaderValidationMiddleware validateHeaders should sanitize headers" name="HeaderValidationMiddleware validateHeaders should sanitize headers" time="0.011">
</testcase>
<testcase classname="HeaderValidationMiddleware validateHeader should return valid for normal header" name="HeaderValidationMiddleware validateHeader should return valid for normal header" time="0.025">
</testcase>
<testcase classname="HeaderValidationMiddleware validateHeader should return invalid for blocked header" name="HeaderValidationMiddleware validateHeader should return invalid for blocked header" time="0.009">
</testcase>
<testcase classname="HeaderValidationMiddleware validateHeader should return invalid for oversized header" name="HeaderValidationMiddleware validateHeader should return invalid for oversized header" time="0.01">
</testcase>
<testcase classname="HeaderValidationMiddleware validateHeader should return invalid for path traversal" name="HeaderValidationMiddleware validateHeader should return invalid for path traversal" time="0.008">
</testcase>
<testcase classname="HeaderValidationMiddleware getSecurityReport should return high score for complete security headers" name="HeaderValidationMiddleware getSecurityReport should return high score for complete security headers" time="0.008">
</testcase>
<testcase classname="HeaderValidationMiddleware getSecurityReport should return low score for missing security headers" name="HeaderValidationMiddleware getSecurityReport should return low score for missing security headers" time="0.012">
</testcase>
<testcase classname="HeaderValidationMiddleware getSecurityReport should detect information disclosure" name="HeaderValidationMiddleware getSecurityReport should detect information disclosure" time="0.009">
</testcase>
<testcase classname="HeaderValidationMiddleware getSecurityReport should recommend HSTS improvements" name="HeaderValidationMiddleware getSecurityReport should recommend HSTS improvements" time="0.007">
</testcase>
<testcase classname="HeaderValidationMiddleware detectSuspiciousPatterns should detect XSS patterns" name="HeaderValidationMiddleware detectSuspiciousPatterns should detect XSS patterns" time="0.012">
</testcase>
<testcase classname="HeaderValidationMiddleware detectSuspiciousPatterns should detect javascript: protocol" name="HeaderValidationMiddleware detectSuspiciousPatterns should detect javascript: protocol" time="0.01">
</testcase>
<testcase classname="HeaderValidationMiddleware detectSuspiciousPatterns should detect SQL injection patterns" name="HeaderValidationMiddleware detectSuspiciousPatterns should detect SQL injection patterns" time="0.008">
</testcase>
<testcase classname="HeaderValidationMiddleware detectSuspiciousPatterns should skip validation for authorization header" name="HeaderValidationMiddleware detectSuspiciousPatterns should skip validation for authorization header" time="0.01">
</testcase>
<testcase classname="HeaderValidationMiddleware detectSuspiciousPatterns should skip validation for cookie header" name="HeaderValidationMiddleware detectSuspiciousPatterns should skip validation for cookie header" time="0.007">
</testcase>
<testcase classname="HeaderValidationMiddleware isValidContentType should return true for application/json" name="HeaderValidationMiddleware isValidContentType should return true for application/json" time="0.017">
</testcase>
<testcase classname="HeaderValidationMiddleware isValidContentType should return true for multipart/form-data" name="HeaderValidationMiddleware isValidContentType should return true for multipart/form-data" time="0.007">
</testcase>
<testcase classname="HeaderValidationMiddleware isValidContentType should return false for invalid content type" name="HeaderValidationMiddleware isValidContentType should return false for invalid content type" time="0.014">
</testcase>
</testsuite>
<testsuite name="PropertiesController" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:52:56" time="3.019" tests="10">
<testcase classname="PropertiesController create should create a property" name="PropertiesController create should create a property" time="0.039">
</testcase>
<testcase classname="PropertiesController findAll should return paginated properties" name="PropertiesController findAll should return paginated properties" time="0.026">
</testcase>
<testcase classname="PropertiesController findAll should handle filters correctly" name="PropertiesController findAll should handle filters correctly" time="0.022">
</testcase>
<testcase classname="PropertiesController getStatistics should return property statistics" name="PropertiesController getStatistics should return property statistics" time="0.02">
</testcase>
<testcase classname="PropertiesController findByOwner should return properties by owner" name="PropertiesController findByOwner should return properties by owner" time="0.022">
</testcase>
<testcase classname="PropertiesController findByOwner should pass query parameters to service" name="PropertiesController findByOwner should pass query parameters to service" time="0.02">
</testcase>
<testcase classname="PropertiesController findOne should return a property by ID" name="PropertiesController findOne should return a property by ID" time="0.046">
</testcase>
<testcase classname="PropertiesController update should update a property" name="PropertiesController update should update a property" time="0.019">
</testcase>
<testcase classname="PropertiesController updateStatus should update property status" name="PropertiesController updateStatus should update property status" time="0.024">
</testcase>
<testcase classname="PropertiesController remove should delete a property" name="PropertiesController remove should delete a property" time="0.021">
</testcase>
</testsuite>
<testsuite name="PaginationService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:00" time="1.605" tests="28">
<testcase classname="PaginationService calculatePagination should calculate correct offset and limit for first page" name="PaginationService calculatePagination should calculate correct offset and limit for first page" time="0.033">
</testcase>
<testcase classname="PaginationService calculatePagination should calculate correct offset for page 2" name="PaginationService calculatePagination should calculate correct offset for page 2" time="0.016">
</testcase>
<testcase classname="PaginationService calculatePagination should calculate correct offset for page 5" name="PaginationService calculatePagination should calculate correct offset for page 5" time="0.017">
</testcase>
<testcase classname="PaginationService calculatePagination should enforce maximum limit" name="PaginationService calculatePagination should enforce maximum limit" time="0.018">
</testcase>
<testcase classname="PaginationService calculatePagination should enforce minimum limit" name="PaginationService calculatePagination should enforce minimum limit" time="0.016">
</testcase>
<testcase classname="PaginationService calculatePagination should handle negative page numbers" name="PaginationService calculatePagination should handle negative page numbers" time="0.019">
</testcase>
<testcase classname="PaginationService calculatePagination should use defaults when no parameters provided" name="PaginationService calculatePagination should use defaults when no parameters provided" time="0.018">
</testcase>
<testcase classname="PaginationService createMetadata should calculate correct pagination metadata for first page" name="PaginationService createMetadata should calculate correct pagination metadata for first page" time="0.036">
</testcase>
<testcase classname="PaginationService createMetadata should calculate correct metadata for middle page" name="PaginationService createMetadata should calculate correct metadata for middle page" time="0.013">
</testcase>
<testcase classname="PaginationService createMetadata should calculate correct metadata for last page" name="PaginationService createMetadata should calculate correct metadata for last page" time="0.013">
</testcase>
<testcase classname="PaginationService createMetadata should handle single page result" name="PaginationService createMetadata should handle single page result" time="0.016">
</testcase>
<testcase classname="PaginationService createMetadata should handle exact page boundary" name="PaginationService createMetadata should handle exact page boundary" time="0.017">
</testcase>
<testcase classname="PaginationService createMetadata should include sort information" name="PaginationService createMetadata should include sort information" time="0.016">
</testcase>
<testcase classname="PaginationService createMetadata should use default sort values" name="PaginationService createMetadata should use default sort values" time="0.02">
</testcase>
<testcase classname="PaginationService formatResponse should format response with data and metadata" name="PaginationService formatResponse should format response with data and metadata" time="0.016">
</testcase>
<testcase classname="PaginationService formatResponse should handle empty data array" name="PaginationService formatResponse should handle empty data array" time="0.023">
</testcase>
<testcase classname="PaginationService formatResponse should preserve sort parameters in response" name="PaginationService formatResponse should preserve sort parameters in response" time="0.009">
</testcase>
<testcase classname="PaginationService parsePaginationQuery should parse valid pagination query" name="PaginationService parsePaginationQuery should parse valid pagination query" time="0.01">
</testcase>
<testcase classname="PaginationService parsePaginationQuery should apply defaults for missing values" name="PaginationService parsePaginationQuery should apply defaults for missing values" time="0.01">
</testcase>
<testcase classname="PaginationService parsePaginationQuery should enforce limits on values" name="PaginationService parsePaginationQuery should enforce limits on values" time="0.007">
</testcase>
<testcase classname="PaginationService getPrismaOptions should generate correct Prisma query options" name="PaginationService getPrismaOptions should generate correct Prisma query options" time="0.011">
</testcase>
<testcase classname="PaginationService getPrismaOptions should use default orderByField when not specified in query" name="PaginationService getPrismaOptions should use default orderByField when not specified in query" time="0.01">
</testcase>
<testcase classname="PaginationService getPrismaOptions should handle custom sort field" name="PaginationService getPrismaOptions should handle custom sort field" time="0.02">
</testcase>
<testcase classname="PaginationService getPrismaOptions should calculate correct skip and take for page 3" name="PaginationService getPrismaOptions should calculate correct skip and take for page 3" time="0.008">
</testcase>
<testcase classname="PaginationService validation should handle very large page numbers" name="PaginationService validation should handle very large page numbers" time="0.008">
</testcase>
<testcase classname="PaginationService validation should handle zero limit gracefully" name="PaginationService validation should handle zero limit gracefully" time="0.01">
</testcase>
<testcase classname="PaginationService validation should handle negative limit gracefully" name="PaginationService validation should handle negative limit gracefully" time="0.011">
</testcase>
<testcase classname="PaginationService validation should calculate correct page count for non-divisible totals" name="PaginationService validation should calculate correct page count for non-divisible totals" time="0.01">
</testcase>
</testsuite>
<testsuite name="AuthService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:01" time="2.338" tests="6">
<testcase classname="AuthService refreshToken should reject token without refresh tokenUse" name="AuthService refreshToken should reject token without refresh tokenUse" time="0.448">
</testcase>
<testcase classname="AuthService refreshToken should issue new tokens when refresh session matches" name="AuthService refreshToken should issue new tokens when refresh session matches" time="0.098">
</testcase>
<testcase classname="AuthService login brute force protection should increment login attempts on invalid credentials" name="AuthService login brute force protection should increment login attempts on invalid credentials" time="0.064">
</testcase>
<testcase classname="AuthService login brute force protection should block when max attempts reached" name="AuthService login brute force protection should block when max attempts reached" time="0.035">
</testcase>
<testcase classname="AuthService login brute force protection should clear attempts after successful login" name="AuthService login brute force protection should clear attempts after successful login" time="0.048">
</testcase>
<testcase classname="AuthService session validation rejects fingerprint mismatches to reduce session hijacking risk" name="AuthService session validation rejects fingerprint mismatches to reduce session hijacking risk" time="0.032">
</testcase>
</testsuite>
<testsuite name="Property DTOs" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:04" time="1.316" tests="22">
<testcase classname="Property DTOs AddressDto should pass with valid address" name="Property DTOs AddressDto should pass with valid address" time="0.026">
</testcase>
<testcase classname="Property DTOs AddressDto should pass with optional fields" name="Property DTOs AddressDto should pass with optional fields" time="0.006">
</testcase>
<testcase classname="Property DTOs AddressDto should fail with empty street" name="Property DTOs AddressDto should fail with empty street" time="0.006">
</testcase>
<testcase classname="Property DTOs AddressDto should fail with street too long" name="Property DTOs AddressDto should fail with street too long" time="0.007">
</testcase>
<testcase classname="Property DTOs AddressDto should fail with missing required fields" name="Property DTOs AddressDto should fail with missing required fields" time="0.005">
</testcase>
<testcase classname="Property DTOs CreatePropertyDto should pass with valid property data" name="Property DTOs CreatePropertyDto should pass with valid property data" time="0.009">
</testcase>
<testcase classname="Property DTOs CreatePropertyDto should pass with all optional fields" name="Property DTOs CreatePropertyDto should pass with all optional fields" time="0.01">
</testcase>
<testcase classname="Property DTOs CreatePropertyDto should fail with empty title" name="Property DTOs CreatePropertyDto should fail with empty title" time="0.008">
</testcase>
<testcase classname="Property DTOs CreatePropertyDto should fail with title too long" name="Property DTOs CreatePropertyDto should fail with title too long" time="0.004">
</testcase>
<testcase classname="Property DTOs CreatePropertyDto should fail with negative price" name="Property DTOs CreatePropertyDto should fail with negative price" time="0.007">
</testcase>
<testcase classname="Property DTOs CreatePropertyDto should fail with zero price" name="Property DTOs CreatePropertyDto should fail with zero price" time="0.004">
</testcase>
<testcase classname="Property DTOs CreatePropertyDto should fail with price too high" name="Property DTOs CreatePropertyDto should fail with price too high" time="0.009">
</testcase>
<testcase classname="Property DTOs CreatePropertyDto should fail with invalid nested address" name="Property DTOs CreatePropertyDto should fail with invalid nested address" time="0.006">
</testcase>
<testcase classname="Property DTOs CreatePropertyDto should fail with too many features" name="Property DTOs CreatePropertyDto should fail with too many features" time="0.011">
</testcase>
<testcase classname="Property DTOs CreatePropertyDto should fail with invalid property type" name="Property DTOs CreatePropertyDto should fail with invalid property type" time="0.008">
</testcase>
<testcase classname="Property DTOs CreatePropertyDto should fail with negative bedrooms" name="Property DTOs CreatePropertyDto should fail with negative bedrooms" time="0.005">
</testcase>
<testcase classname="Property DTOs CreatePropertyDto should fail with bedrooms too high" name="Property DTOs CreatePropertyDto should fail with bedrooms too high" time="0.012">
</testcase>
<testcase classname="Property DTOs PropertyQueryDto should pass with valid query parameters" name="Property DTOs PropertyQueryDto should pass with valid query parameters" time="0.008">
</testcase>
<testcase classname="Property DTOs PropertyQueryDto should pass with empty query" name="Property DTOs PropertyQueryDto should pass with empty query" time="0.006">
</testcase>
<testcase classname="Property DTOs PropertyQueryDto should fail with negative minPrice" name="Property DTOs PropertyQueryDto should fail with negative minPrice" time="0.006">
</testcase>
<testcase classname="Property DTOs PropertyQueryDto should fail with invalid property type" name="Property DTOs PropertyQueryDto should fail with invalid property type" time="0.008">
</testcase>
<testcase classname="Property DTOs PropertyQueryDto should fail with invalid status" name="Property DTOs PropertyQueryDto should fail with invalid status" time="0.006">
</testcase>
</testsuite>
<testsuite name="Auth DTOs" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:05" time="1.934" tests="22">
<testcase classname="Auth DTOs LoginEmailDto should pass with valid email and password" name="Auth DTOs LoginEmailDto should pass with valid email and password" time="0.019">
</testcase>
<testcase classname="Auth DTOs LoginEmailDto should fail with invalid email" name="Auth DTOs LoginEmailDto should fail with invalid email" time="0.006">
</testcase>
<testcase classname="Auth DTOs LoginEmailDto should fail with empty email" name="Auth DTOs LoginEmailDto should fail with empty email" time="0.005">
</testcase>
<testcase classname="Auth DTOs LoginEmailDto should fail with empty password" name="Auth DTOs LoginEmailDto should fail with empty password" time="0.007">
</testcase>
<testcase classname="Auth DTOs LoginEmailDto should fail with missing fields" name="Auth DTOs LoginEmailDto should fail with missing fields" time="0.006">
</testcase>
<testcase classname="Auth DTOs LoginWeb3Dto should pass with valid wallet address and signature" name="Auth DTOs LoginWeb3Dto should pass with valid wallet address and signature" time="0.005">
</testcase>
<testcase classname="Auth DTOs LoginWeb3Dto should fail with invalid wallet address" name="Auth DTOs LoginWeb3Dto should fail with invalid wallet address" time="0.013">
</testcase>
<testcase classname="Auth DTOs LoginWeb3Dto should fail with empty signature" name="Auth DTOs LoginWeb3Dto should fail with empty signature" time="0.008">
</testcase>
<testcase classname="Auth DTOs LoginDto (Combined) should pass with email and password" name="Auth DTOs LoginDto (Combined) should pass with email and password" time="0.005">
</testcase>
<testcase classname="Auth DTOs LoginDto (Combined) should pass with wallet address and signature" name="Auth DTOs LoginDto (Combined) should pass with wallet address and signature" time="0.008">
</testcase>
<testcase classname="Auth DTOs LoginDto (Combined) should fail with neither email nor wallet" name="Auth DTOs LoginDto (Combined) should fail with neither email nor wallet" time="0.005">
</testcase>
<testcase classname="Auth DTOs RefreshTokenDto should pass with valid JWT" name="Auth DTOs RefreshTokenDto should pass with valid JWT" time="0.011">
</testcase>
<testcase classname="Auth DTOs RefreshTokenDto should fail with invalid JWT format" name="Auth DTOs RefreshTokenDto should fail with invalid JWT format" time="0.005">
</testcase>
<testcase classname="Auth DTOs RefreshTokenDto should fail with empty token" name="Auth DTOs RefreshTokenDto should fail with empty token" time="0.008">
</testcase>
<testcase classname="Auth DTOs ForgotPasswordDto should pass with valid email" name="Auth DTOs ForgotPasswordDto should pass with valid email" time="0.005">
</testcase>
<testcase classname="Auth DTOs ForgotPasswordDto should fail with invalid email" name="Auth DTOs ForgotPasswordDto should fail with invalid email" time="0.01">
</testcase>
<testcase classname="Auth DTOs ForgotPasswordDto should fail with empty email" name="Auth DTOs ForgotPasswordDto should fail with empty email" time="0.027">
</testcase>
<testcase classname="Auth DTOs ResetPasswordDto should pass with valid token and strong password" name="Auth DTOs ResetPasswordDto should pass with valid token and strong password" time="0.009">
</testcase>
<testcase classname="Auth DTOs ResetPasswordDto should fail with weak password" name="Auth DTOs ResetPasswordDto should fail with weak password" time="0.007">
</testcase>
<testcase classname="Auth DTOs ResetPasswordDto should fail with password missing special character" name="Auth DTOs ResetPasswordDto should fail with password missing special character" time="0.008">
</testcase>
<testcase classname="Auth DTOs ResetPasswordDto should fail with empty token" name="Auth DTOs ResetPasswordDto should fail with empty token" time="0.006">
</testcase>
<testcase classname="Auth DTOs ResetPasswordDto should fail with password too long" name="Auth DTOs ResetPasswordDto should fail with password too long" time="0.009">
</testcase>
</testsuite>
<testsuite name="Document DTOs" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:07" time="2.039" tests="21">
<testcase classname="Document DTOs UploadDocumentDto should pass with all optional fields empty" name="Document DTOs UploadDocumentDto should pass with all optional fields empty" time="0.007">
</testcase>
<testcase classname="Document DTOs UploadDocumentDto should pass with valid document data" name="Document DTOs UploadDocumentDto should pass with valid document data" time="0.006">
</testcase>
<testcase classname="Document DTOs UploadDocumentDto should fail with invalid document type" name="Document DTOs UploadDocumentDto should fail with invalid document type" time="0.006">
</testcase>
<testcase classname="Document DTOs UploadDocumentDto should fail with invalid access level" name="Document DTOs UploadDocumentDto should fail with invalid access level" time="0.006">
</testcase>
<testcase classname="Document DTOs UploadDocumentDto should fail with title too long" name="Document DTOs UploadDocumentDto should fail with title too long" time="0.005">
</testcase>
<testcase classname="Document DTOs UploadDocumentDto should fail with description too long" name="Document DTOs UploadDocumentDto should fail with description too long" time="0.008">
</testcase>
<testcase classname="Document DTOs UploadDocumentDto should pass with all valid document types" name="Document DTOs UploadDocumentDto should pass with all valid document types" time="0.009">
</testcase>
<testcase classname="Document DTOs UploadDocumentDto should pass with all valid access levels" name="Document DTOs UploadDocumentDto should pass with all valid access levels" time="0.007">
</testcase>
<testcase classname="Document DTOs UpdateMetadataDto should pass with all optional fields empty" name="Document DTOs UpdateMetadataDto should pass with all optional fields empty" time="0.007">
</testcase>
<testcase classname="Document DTOs UpdateMetadataDto should pass with valid metadata update" name="Document DTOs UpdateMetadataDto should pass with valid metadata update" time="0.006">
</testcase>
<testcase classname="Document DTOs UpdateMetadataDto should fail with invalid access level" name="Document DTOs UpdateMetadataDto should fail with invalid access level" time="0.005">
</testcase>
<testcase classname="Document DTOs DocumentQueryDto should pass with valid query parameters" name="Document DTOs DocumentQueryDto should pass with valid query parameters" time="0.011">
</testcase>
<testcase classname="Document DTOs DocumentQueryDto should pass with empty query" name="Document DTOs DocumentQueryDto should pass with empty query" time="0.006">
</testcase>
<testcase classname="Document DTOs DocumentQueryDto should fail with invalid createdAfter date" name="Document DTOs DocumentQueryDto should fail with invalid createdAfter date" time="0.006">
</testcase>
<testcase classname="Document DTOs DocumentQueryDto should fail with invalid createdBefore date" name="Document DTOs DocumentQueryDto should fail with invalid createdBefore date" time="0.009">
</testcase>
<testcase classname="Document DTOs DocumentQueryDto should fail with invalid document type" name="Document DTOs DocumentQueryDto should fail with invalid document type" time="0.009">
</testcase>
<testcase classname="Document DTOs DownloadQueryDto should pass with valid version" name="Document DTOs DownloadQueryDto should pass with valid version" time="0.005">
</testcase>
<testcase classname="Document DTOs DownloadQueryDto should pass with no version (optional)" name="Document DTOs DownloadQueryDto should pass with no version (optional)" time="0.006">
</testcase>
<testcase classname="Document DTOs DownloadQueryDto should fail with version less than 1" name="Document DTOs DownloadQueryDto should fail with version less than 1" time="0.005">
</testcase>
<testcase classname="Document DTOs DownloadQueryDto should fail with negative version" name="Document DTOs DownloadQueryDto should fail with negative version" time="0.005">
</testcase>
<testcase classname="Document DTOs DownloadQueryDto should fail with non-integer version" name="Document DTOs DownloadQueryDto should fail with non-integer version" time="0.01">
</testcase>
</testsuite>
<testsuite name="Pagination Service - Performance Tests" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:10" time="1.478" tests="10">
<testcase classname="Pagination Service - Performance Tests Performance with Large Datasets should efficiently calculate pagination for 1 million items" name="Pagination Service - Performance Tests Performance with Large Datasets should efficiently calculate pagination for 1 million items" time="0.007">
</testcase>
<testcase classname="Pagination Service - Performance Tests Performance with Large Datasets should efficiently format response for large dataset" name="Pagination Service - Performance Tests Performance with Large Datasets should efficiently format response for large dataset" time="0.005">
</testcase>
<testcase classname="Pagination Service - Performance Tests Performance with Large Datasets should handle rapid consecutive pagination queries" name="Pagination Service - Performance Tests Performance with Large Datasets should handle rapid consecutive pagination queries" time="0.031">
</testcase>
<testcase classname="Pagination Service - Performance Tests Performance with Large Datasets should efficiently generate Prisma options for many queries" name="Pagination Service - Performance Tests Performance with Large Datasets should efficiently generate Prisma options for many queries" time="0.019">
</testcase>
<testcase classname="Pagination Service - Performance Tests Performance with Large Datasets should calculate metadata efficiently for extreme pagination values" name="Pagination Service - Performance Tests Performance with Large Datasets should calculate metadata efficiently for extreme pagination values" time="0.007">
</testcase>
<testcase classname="Pagination Service - Performance Tests Performance with Large Datasets should memory-efficiently handle large format operations" name="Pagination Service - Performance Tests Performance with Large Datasets should memory-efficiently handle large format operations" time="0.013">
</testcase>
<testcase classname="Pagination Service - Performance Tests Edge Case Performance should handle pagination for single item efficiently" name="Pagination Service - Performance Tests Edge Case Performance should handle pagination for single item efficiently" time="0.004">
</testcase>
<testcase classname="Pagination Service - Performance Tests Edge Case Performance should handle pagination for exactly one page of items" name="Pagination Service - Performance Tests Edge Case Performance should handle pagination for exactly one page of items" time="0.008">
</testcase>
<testcase classname="Pagination Service - Performance Tests Edge Case Performance should handle very high page numbers efficiently" name="Pagination Service - Performance Tests Edge Case Performance should handle very high page numbers efficiently" time="0.006">
</testcase>
<testcase classname="Pagination Service - Performance Tests Benchmark Results should provide performance summary" name="Pagination Service - Performance Tests Benchmark Results should provide performance summary" time="0.376">
</testcase>
</testsuite>
<testsuite name="ValuationService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:11" time="1.666" tests="7">
<testcase classname="ValuationService should be defined" name="ValuationService should be defined" time="0.018">
</testcase>
<testcase classname="ValuationService normalizeFeatures should normalize property features correctly" name="ValuationService normalizeFeatures should normalize property features correctly" time="0.015">
</testcase>
<testcase classname="ValuationService normalizeFeatures should set default values for missing numeric fields" name="ValuationService normalizeFeatures should set default values for missing numeric fields" time="0.029">
</testcase>
<testcase classname="ValuationService combineValuations should return single valuation if only one is provided" name="ValuationService combineValuations should return single valuation if only one is provided" time="0.02">
</testcase>
<testcase classname="ValuationService combineValuations should combine multiple valuations using weighted average" name="ValuationService combineValuations should combine multiple valuations using weighted average" time="0.014">
</testcase>
<testcase classname="ValuationService getMarketTrendFromValuations should return neutral if no trends provided" name="ValuationService getMarketTrendFromValuations should return neutral if no trends provided" time="0.014">
</testcase>
<testcase classname="ValuationService getMarketTrendFromValuations should return majority trend" name="ValuationService getMarketTrendFromValuations should return majority trend" time="0.017">
</testcase>
</testsuite>
<testsuite name="IpBlockingService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:13" time="0.949" tests="11">
<testcase classname="IpBlockingService should be defined" name="IpBlockingService should be defined" time="0.016">
</testcase>
<testcase classname="IpBlockingService isIpBlocked should return false when IP is not blocked" name="IpBlockingService isIpBlocked should return false when IP is not blocked" time="0.011">
</testcase>
<testcase classname="IpBlockingService isIpBlocked should return true when IP is blocked" name="IpBlockingService isIpBlocked should return true when IP is blocked" time="0.012">
</testcase>
<testcase classname="IpBlockingService isIpBlocked should unblock IP when block has expired" name="IpBlockingService isIpBlocked should unblock IP when block has expired" time="0.014">
</testcase>
<testcase classname="IpBlockingService isIpWhitelisted should return true when IP is whitelisted" name="IpBlockingService isIpWhitelisted should return true when IP is whitelisted" time="0.011">
</testcase>
<testcase classname="IpBlockingService isIpWhitelisted should return false when IP is not whitelisted" name="IpBlockingService isIpWhitelisted should return false when IP is not whitelisted" time="0.015">
</testcase>
<testcase classname="IpBlockingService blockIp should block IP with duration" name="IpBlockingService blockIp should block IP with duration" time="0.025">
</testcase>
<testcase classname="IpBlockingService blockIp should not block whitelisted IP" name="IpBlockingService blockIp should not block whitelisted IP" time="0.015">
</testcase>
<testcase classname="IpBlockingService addToWhitelist should add IP to whitelist" name="IpBlockingService addToWhitelist should add IP to whitelist" time="0.007">
</testcase>
<testcase classname="IpBlockingService addToWhitelist should not duplicate IPs in whitelist" name="IpBlockingService addToWhitelist should not duplicate IPs in whitelist" time="0.009">
</testcase>
<testcase classname="IpBlockingService recordFailedAttempt should record failed attempt and auto-block when threshold exceeded" name="IpBlockingService recordFailedAttempt should record failed attempt and auto-block when threshold exceeded" time="0.011">
</testcase>
</testsuite>
<testsuite name="Custom Validators" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:14" time="1.083" tests="16">
<testcase classname="Custom Validators IsEthereumAddress should pass with valid Ethereum address" name="Custom Validators IsEthereumAddress should pass with valid Ethereum address" time="0.005">
</testcase>
<testcase classname="Custom Validators IsEthereumAddress should pass with lowercase Ethereum address" name="Custom Validators IsEthereumAddress should pass with lowercase Ethereum address" time="0.003">
</testcase>
<testcase classname="Custom Validators IsEthereumAddress should pass with uppercase Ethereum address" name="Custom Validators IsEthereumAddress should pass with uppercase Ethereum address" time="0.003">
</testcase>
<testcase classname="Custom Validators IsEthereumAddress should fail without 0x prefix" name="Custom Validators IsEthereumAddress should fail without 0x prefix" time="0.006">
</testcase>
<testcase classname="Custom Validators IsEthereumAddress should fail with too short address" name="Custom Validators IsEthereumAddress should fail with too short address" time="0.002">
</testcase>
<testcase classname="Custom Validators IsEthereumAddress should fail with too long address" name="Custom Validators IsEthereumAddress should fail with too long address" time="0.003">
</testcase>
<testcase classname="Custom Validators IsEthereumAddress should fail with invalid characters" name="Custom Validators IsEthereumAddress should fail with invalid characters" time="0.006">
</testcase>
<testcase classname="Custom Validators IsEthereumAddress should fail with empty string" name="Custom Validators IsEthereumAddress should fail with empty string" time="0.006">
</testcase>
<testcase classname="Custom Validators IsStrongPassword should pass with strong password" name="Custom Validators IsStrongPassword should pass with strong password" time="0.004">
</testcase>
<testcase classname="Custom Validators IsStrongPassword should pass with various special characters" name="Custom Validators IsStrongPassword should pass with various special characters" time="0.008">
</testcase>
<testcase classname="Custom Validators IsStrongPassword should fail with password too short" name="Custom Validators IsStrongPassword should fail with password too short" time="0.004">
</testcase>
<testcase classname="Custom Validators IsStrongPassword should fail without uppercase letter" name="Custom Validators IsStrongPassword should fail without uppercase letter" time="0.003">
</testcase>
<testcase classname="Custom Validators IsStrongPassword should fail without lowercase letter" name="Custom Validators IsStrongPassword should fail without lowercase letter" time="0.003">
</testcase>
<testcase classname="Custom Validators IsStrongPassword should fail without number" name="Custom Validators IsStrongPassword should fail without number" time="0.005">
</testcase>
<testcase classname="Custom Validators IsStrongPassword should fail without special character" name="Custom Validators IsStrongPassword should fail without special character" time="0.002">
</testcase>
<testcase classname="Custom Validators IsStrongPassword should fail with empty string" name="Custom Validators IsStrongPassword should fail with empty string" time="0.003">
</testcase>
</testsuite>
<testsuite name="DocumentService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:15" time="1.725" tests="5">
<testcase classname="DocumentService uploads documents and generates thumbnails for images" name="DocumentService uploads documents and generates thumbnails for images" time="0.068">
</testcase>
<testcase classname="DocumentService stores new versions and updates current version" name="DocumentService stores new versions and updates current version" time="0.02">
</testcase>
<testcase classname="DocumentService enforces access permissions" name="DocumentService enforces access permissions" time="0.018">
</testcase>
<testcase classname="DocumentService blocks infected files during virus scan" name="DocumentService blocks infected files during virus scan" time="0.144">
</testcase>
<testcase classname="DocumentService returns signed download URLs" name="DocumentService returns signed download URLs" time="0.032">
</testcase>
</testsuite>
<testsuite name="MfaService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:17" time="2.604" tests="8">
<testcase classname="MfaService generateMfaSecret should generate MFA secret and QR code" name="MfaService generateMfaSecret should generate MFA secret and QR code" time="1.488">
</testcase>
<testcase classname="MfaService verifyMfaSetup should verify MFA setup with valid token" name="MfaService verifyMfaSetup should verify MFA setup with valid token" time="0.012">
</testcase>
<testcase classname="MfaService verifyMfaSetup should throw error for expired setup session" name="MfaService verifyMfaSetup should throw error for expired setup session" time="0.05">
</testcase>
<testcase classname="MfaService isMfaEnabled should return true when MFA is enabled" name="MfaService isMfaEnabled should return true when MFA is enabled" time="0.017">
</testcase>
<testcase classname="MfaService isMfaEnabled should return false when MFA is not enabled" name="MfaService isMfaEnabled should return false when MFA is not enabled" time="0.021">
</testcase>
<testcase classname="MfaService generateBackupCodes should generate 10 backup codes" name="MfaService generateBackupCodes should generate 10 backup codes" time="0.017">
</testcase>
<testcase classname="MfaService getMfaStatus should return correct MFA status when enabled" name="MfaService getMfaStatus should return correct MFA status when enabled" time="0.012">
</testcase>
<testcase classname="MfaService getMfaStatus should return correct MFA status when disabled" name="MfaService getMfaStatus should return correct MFA status when disabled" time="0.015">
</testcase>
</testsuite>
<testsuite name="RateLimitingService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:20" time="1.073" tests="6">
<testcase classname="RateLimitingService should be defined" name="RateLimitingService should be defined" time="0.042">
</testcase>
<testcase classname="RateLimitingService checkRateLimit should allow request when under limit" name="RateLimitingService checkRateLimit should allow request when under limit" time="0.025">
</testcase>
<testcase classname="RateLimitingService checkRateLimit should block request when over limit" name="RateLimitingService checkRateLimit should block request when over limit" time="0.022">
</testcase>
<testcase classname="RateLimitingService checkRateLimit should handle Redis errors gracefully" name="RateLimitingService checkRateLimit should handle Redis errors gracefully" time="0.028">
</testcase>
<testcase classname="RateLimitingService getRateLimitInfo should return correct rate limit info" name="RateLimitingService getRateLimitInfo should return correct rate limit info" time="0.026">
</testcase>
<testcase classname="RateLimitingService getDefaultConfigurations should return default configurations" name="RateLimitingService getDefaultConfigurations should return default configurations" time="0.029">
</testcase>
</testsuite>
<testsuite name="User DTOs" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:21" time="2.082" tests="13">
<testcase classname="User DTOs CreateUserDto should pass with valid user data" name="User DTOs CreateUserDto should pass with valid user data" time="0.024">
</testcase>
<testcase classname="User DTOs CreateUserDto should pass with optional wallet address" name="User DTOs CreateUserDto should pass with optional wallet address" time="0.007">
</testcase>
<testcase classname="User DTOs CreateUserDto should fail with invalid email" name="User DTOs CreateUserDto should fail with invalid email" time="0.007">
</testcase>
<testcase classname="User DTOs CreateUserDto should fail with email too long" name="User DTOs CreateUserDto should fail with email too long" time="0.007">
</testcase>
<testcase classname="User DTOs CreateUserDto should fail with empty first name" name="User DTOs CreateUserDto should fail with empty first name" time="0.008">
</testcase>
<testcase classname="User DTOs CreateUserDto should fail with first name containing numbers" name="User DTOs CreateUserDto should fail with first name containing numbers" time="0.01">
</testcase>
<testcase classname="User DTOs CreateUserDto should pass with hyphenated names" name="User DTOs CreateUserDto should pass with hyphenated names" time="0.008">
</testcase>
<testcase classname="User DTOs CreateUserDto should fail with first name too long" name="User DTOs CreateUserDto should fail with first name too long" time="0.012">
</testcase>
<testcase classname="User DTOs CreateUserDto should fail with weak password" name="User DTOs CreateUserDto should fail with weak password" time="0.011">
</testcase>
<testcase classname="User DTOs CreateUserDto should fail with password missing uppercase" name="User DTOs CreateUserDto should fail with password missing uppercase" time="0.012">
</testcase>
<testcase classname="User DTOs CreateUserDto should fail with password too short" name="User DTOs CreateUserDto should fail with password too short" time="0.026">
</testcase>
<testcase classname="User DTOs CreateUserDto should fail with invalid wallet address" name="User DTOs CreateUserDto should fail with invalid wallet address" time="0.008">
</testcase>
<testcase classname="User DTOs CreateUserDto should fail with all fields missing" name="User DTOs CreateUserDto should fail with all fields missing" time="0.01">
</testcase>
</testsuite>
<testsuite name="API Key DTOs" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:23" time="1.446" tests="15">
<testcase classname="API Key DTOs CreateApiKeyDto should pass with valid API key data" name="API Key DTOs CreateApiKeyDto should pass with valid API key data" time="0.004">
</testcase>
<testcase classname="API Key DTOs CreateApiKeyDto should pass with optional rate limit" name="API Key DTOs CreateApiKeyDto should pass with optional rate limit" time="0.003">
</testcase>
<testcase classname="API Key DTOs CreateApiKeyDto should fail with empty name" name="API Key DTOs CreateApiKeyDto should fail with empty name" time="0.002">
</testcase>
<testcase classname="API Key DTOs CreateApiKeyDto should fail with name too long" name="API Key DTOs CreateApiKeyDto should fail with name too long" time="0.004">
</testcase>
<testcase classname="API Key DTOs CreateApiKeyDto should fail with empty scopes array" name="API Key DTOs CreateApiKeyDto should fail with empty scopes array" time="0.003">
</testcase>
<testcase classname="API Key DTOs CreateApiKeyDto should fail with missing scopes" name="API Key DTOs CreateApiKeyDto should fail with missing scopes" time="0.004">
</testcase>
<testcase classname="API Key DTOs CreateApiKeyDto should fail with rate limit less than 1" name="API Key DTOs CreateApiKeyDto should fail with rate limit less than 1" time="0.003">
</testcase>
<testcase classname="API Key DTOs CreateApiKeyDto should fail with negative rate limit" name="API Key DTOs CreateApiKeyDto should fail with negative rate limit" time="0.003">
</testcase>
<testcase classname="API Key DTOs CreateApiKeyDto should fail with non-integer rate limit" name="API Key DTOs CreateApiKeyDto should fail with non-integer rate limit" time="0.002">
</testcase>
<testcase classname="API Key DTOs CreateApiKeyDto should pass with single scope" name="API Key DTOs CreateApiKeyDto should pass with single scope" time="0.003">
</testcase>
<testcase classname="API Key DTOs ApiKeyQueryDto should pass with valid query parameters" name="API Key DTOs ApiKeyQueryDto should pass with valid query parameters" time="0.004">
</testcase>
<testcase classname="API Key DTOs ApiKeyQueryDto should pass with empty query" name="API Key DTOs ApiKeyQueryDto should pass with empty query" time="0.004">
</testcase>
<testcase classname="API Key DTOs ApiKeyQueryDto should pass with isActive as string true" name="API Key DTOs ApiKeyQueryDto should pass with isActive as string true" time="0.013">
</testcase>
<testcase classname="API Key DTOs ApiKeyQueryDto should pass with isActive as false" name="API Key DTOs ApiKeyQueryDto should pass with isActive as false" time="0.002">
</testcase>
<testcase classname="API Key DTOs ApiKeyQueryDto should include pagination defaults" name="API Key DTOs ApiKeyQueryDto should include pagination defaults" time="0.003">
</testcase>
</testsuite>
<testsuite name="UserService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:24" time="1.521" tests="3">
<testcase classname="UserService uses a single conflict lookup when updating email or wallet address" name="UserService uses a single conflict lookup when updating email or wallet address" time="0.035">
</testcase>
<testcase classname="UserService throws a conflict when the combined lookup finds a duplicate email" name="UserService throws a conflict when the combined lookup finds a duplicate email" time="0.118">
</testcase>
<testcase classname="UserService loads followers with join strategy and caches the result" name="UserService loads followers with join strategy and caches the result" time="0.034">
</testcase>
</testsuite>
<testsuite name="Common DTOs" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:26" time="1.868" tests="12">
<testcase classname="Common DTOs PaginationDto should pass with valid page and limit" name="Common DTOs PaginationDto should pass with valid page and limit" time="0.012">
</testcase>
<testcase classname="Common DTOs PaginationDto should pass with default values when empty" name="Common DTOs PaginationDto should pass with default values when empty" time="0.009">
</testcase>
<testcase classname="Common DTOs PaginationDto should fail when page is less than 1" name="Common DTOs PaginationDto should fail when page is less than 1" time="0.01">
</testcase>
<testcase classname="Common DTOs PaginationDto should fail when limit exceeds 100" name="Common DTOs PaginationDto should fail when limit exceeds 100" time="0.007">
</testcase>
<testcase classname="Common DTOs PaginationDto should fail when page is not an integer" name="Common DTOs PaginationDto should fail when page is not an integer" time="0.008">
</testcase>
<testcase classname="Common DTOs SortDto should pass with valid sortBy and sortOrder" name="Common DTOs SortDto should pass with valid sortBy and sortOrder" time="0.008">
</testcase>
<testcase classname="Common DTOs SortDto should pass with default sortOrder when empty" name="Common DTOs SortDto should pass with default sortOrder when empty" time="0.011">
</testcase>
<testcase classname="Common DTOs SortDto should fail with invalid sortOrder" name="Common DTOs SortDto should fail with invalid sortOrder" time="0.01">
</testcase>
<testcase classname="Common DTOs DateRangeDto should pass with valid ISO 8601 dates" name="Common DTOs DateRangeDto should pass with valid ISO 8601 dates" time="0.006">
</testcase>
<testcase classname="Common DTOs DateRangeDto should pass when both fields are empty" name="Common DTOs DateRangeDto should pass when both fields are empty" time="0.006">
</testcase>
<testcase classname="Common DTOs DateRangeDto should fail with invalid date format" name="Common DTOs DateRangeDto should fail with invalid date format" time="0.015">
</testcase>
<testcase classname="Common DTOs DateRangeDto should fail with non-ISO date format" name="Common DTOs DateRangeDto should fail with non-ISO date format" time="0.008">
</testcase>
</testsuite>
<testsuite name="ValuationController" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:28" time="1.467" tests="4">
<testcase classname="ValuationController should be defined" name="ValuationController should be defined" time="0.314">
</testcase>
<testcase classname="ValuationController getValuation should call valuation service to get property valuation" name="ValuationController getValuation should call valuation service to get property valuation" time="0.014">
</testcase>
<testcase classname="ValuationController getPropertyHistory should call valuation service to get property history" name="ValuationController getPropertyHistory should call valuation service to get property history" time="0.016">
</testcase>
<testcase classname="ValuationController getMarketTrendAnalysis should call valuation service to get market trend analysis" name="ValuationController getMarketTrendAnalysis should call valuation service to get market trend analysis" time="0.015">
</testcase>
</testsuite>
<testsuite name="SecurityMiddleware" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:30" time="0.898" tests="5">
<testcase classname="SecurityMiddleware getClientIp should extract IP from x-forwarded-for header" name="SecurityMiddleware getClientIp should extract IP from x-forwarded-for header" time="0.004">
</testcase>
<testcase classname="SecurityMiddleware getClientIp should extract IP from x-real-ip header" name="SecurityMiddleware getClientIp should extract IP from x-real-ip header" time="0.003">
</testcase>
<testcase classname="SecurityMiddleware getClientIp should use connection.remoteAddress when headers are not present" name="SecurityMiddleware getClientIp should use connection.remoteAddress when headers are not present" time="0.003">
</testcase>
<testcase classname="SecurityMiddleware getClientIp should use socket.remoteAddress as fallback" name="SecurityMiddleware getClientIp should use socket.remoteAddress as fallback" time="0.003">
</testcase>
<testcase classname="SecurityMiddleware getClientIp should return unknown when no IP can be determined" name="SecurityMiddleware getClientIp should return unknown when no IP can be determined" time="0.003">
</testcase>
</testsuite>
<testsuite name="DocumentController" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:31" time="2.271" tests="1">
<testcase classname="DocumentController parses metadata and forwards upload request" name="DocumentController parses metadata and forwards upload request" time="0.017">
</testcase>
</testsuite>
<testsuite name="InputSanitizationService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:33" time="1.637" tests="4">
<testcase classname="InputSanitizationService sanitizes nested request payloads recursively" name="InputSanitizationService sanitizes nested request payloads recursively" time="0.02">
</testcase>
<testcase classname="InputSanitizationService rejects SQL injection payloads in any request branch" name="InputSanitizationService rejects SQL injection payloads in any request branch" time="0.055">
</testcase>
<testcase classname="InputSanitizationService sanitizes obvious XSS payloads instead of persisting raw markup" name="InputSanitizationService sanitizes obvious XSS payloads instead of persisting raw markup" time="0.007">
</testcase>
<testcase classname="InputSanitizationService rejects control characters in string input" name="InputSanitizationService rejects control characters in string input" time="0.007">
</testcase>
</testsuite>
<testsuite name="SecurityHeadersService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:35" time="1.3" tests="2">
<testcase classname="SecurityHeadersService returns the XSS-focused security header set" name="SecurityHeadersService returns the XSS-focused security header set" time="0.03">
</testcase>
<testcase classname="SecurityHeadersService returns the relaxed development profile when requested" name="SecurityHeadersService returns the relaxed development profile when requested" time="0.042">
</testcase>
</testsuite>
<testsuite name="Error Filter" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:36" time="0.867" tests="1">
<testcase classname="Error Filter should be tested via src/common/errors/error.filter.spec.ts" name="Error Filter should be tested via src/common/errors/error.filter.spec.ts" time="0.005">
</testcase>
</testsuite>
<testsuite name="Custom Exceptions" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:37" time="1.191" tests="1">
<testcase classname="Custom Exceptions should be tested via src/common/errors" name="Custom Exceptions should be tested via src/common/errors" time="0.019">
</testcase>
</testsuite>
<testsuite name="EmailQueueService" errors="0" failures="0" skipped="0" timestamp="2026-03-24T19:53:38" time="1.539" tests="3">
<testcase classname="EmailQueueService applies timeout defaults when adding jobs" name="EmailQueueService applies timeout defaults when adding jobs" time="0.014">
</testcase>
<testcase classname="EmailQueueService fails jobs that exceed the configured timeout" name="EmailQueueService fails jobs that exceed the configured timeout" time="0.022">
</testcase>
<testcase classname="EmailQueueService removes listeners and clears monitors during shutdown" name="EmailQueueService removes listeners and clears monitors during shutdown" time="0.021">
</testcase>
</testsuite>
</testsuites>