RBD-MS tSQLt Report

PASSED

195 passed, 0 failed, 195 total

ResultTest
No individual test rows were parsed. See raw output.

Raw Output

(0 rows affected)
Start                   End                     OriginalDelayId OriginalStart           OriginalEnd             Comments                                                                                                                                                                                                                                                         JustifiedByUser                                    JustifiedDatetime       DelayCodeId DelayCategoryId IsDelayManual IsMicroDelay AssetId    
----------------------- ----------------------- --------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------------------- ----------- --------------- ------------- ------------ -----------
2026-05-01 02:00:00.000 2026-05-01 06:00:00.000               1 2026-05-01 02:00:00.000 2026-05-01 06:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
Start                   End                     OriginalDelayId OriginalStart           OriginalEnd             Comments                                                                                                                                                                                                                                                         JustifiedByUser                                    JustifiedDatetime       DelayCodeId DelayCategoryId IsDelayManual IsMicroDelay AssetId    
----------------------- ----------------------- --------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------------------- ----------- --------------- ------------- ------------ -----------
2026-05-01 06:00:00.000 2026-05-01 08:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 10:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
2026-05-01 08:00:00.000 2026-05-01 10:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 10:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
Start                   End                     OriginalDelayId OriginalStart           OriginalEnd             Comments                                                                                                                                                                                                                                                         JustifiedByUser                                    JustifiedDatetime       DelayCodeId DelayCategoryId IsDelayManual IsMicroDelay AssetId    
----------------------- ----------------------- --------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------------------- ----------- --------------- ------------- ------------ -----------
2026-05-01 06:00:00.000 2026-05-01 08:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 10:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
2026-05-01 08:00:00.000 2026-05-01 10:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 10:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
Start                   End                     OriginalDelayId OriginalStart           OriginalEnd             Comments                                                                                                                                                                                                                                                         JustifiedByUser                                    JustifiedDatetime       DelayCodeId DelayCategoryId IsDelayManual IsMicroDelay AssetId    
----------------------- ----------------------- --------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------------------- ----------- --------------- ------------- ------------ -----------
2026-05-01 06:00:00.000 2026-05-01 08:00:00.000               1 2026-05-01 06:00:00.000                    NULL NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
2026-05-01 08:00:00.000                    NULL               1 2026-05-01 06:00:00.000                    NULL NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
Start                   End                     OriginalDelayId OriginalStart           OriginalEnd             Comments                                                                                                                                                                                                                                                         JustifiedByUser                                    JustifiedDatetime       DelayCodeId DelayCategoryId IsDelayManual IsMicroDelay AssetId    
----------------------- ----------------------- --------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------------------- ----------- --------------- ------------- ------------ -----------
2026-05-01 06:00:00.000 2026-05-01 08:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 10:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
2026-05-01 08:00:00.000 2026-05-01 10:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 10:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
Start                   End                     OriginalDelayId OriginalStart           OriginalEnd             Comments                                                                                                                                                                                                                                                         JustifiedByUser                                    JustifiedDatetime       DelayCodeId DelayCategoryId IsDelayManual IsMicroDelay AssetId    
----------------------- ----------------------- --------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------------------- ----------- --------------- ------------- ------------ -----------
2026-05-01 06:00:00.000 2026-05-01 08:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 18:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
2026-05-01 08:00:00.000 2026-05-01 16:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 18:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
2026-05-01 16:00:00.000 2026-05-01 18:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 18:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
Start                   End                     OriginalDelayId OriginalStart           OriginalEnd             Comments                                                                                                                                                                                                                                                         JustifiedByUser                                    JustifiedDatetime       DelayCodeId DelayCategoryId IsDelayManual IsMicroDelay AssetId    
----------------------- ----------------------- --------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------------------- ----------- --------------- ------------- ------------ -----------
Start                   End                     OriginalDelayId OriginalStart           OriginalEnd             Comments                                                                                                                                                                                                                                                         JustifiedByUser                                    JustifiedDatetime       DelayCodeId DelayCategoryId IsDelayManual IsMicroDelay AssetId    
----------------------- ----------------------- --------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------------------- ----------- --------------- ------------- ------------ -----------
2026-05-01 06:00:00.000 2026-05-01 08:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 18:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
2026-05-01 08:00:00.000 2026-05-01 16:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 18:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
2026-05-01 16:00:00.000 2026-05-01 18:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 18:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
Start                   End                     OriginalDelayId OriginalStart           OriginalEnd             Comments                                                                                                                                                                                                                                                         JustifiedByUser                                    JustifiedDatetime       DelayCodeId DelayCategoryId IsDelayManual IsMicroDelay AssetId    
----------------------- ----------------------- --------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------------------- ----------- --------------- ------------- ------------ -----------
2026-05-01 06:00:00.000 2026-05-01 08:00:00.000             999 2026-05-01 06:00:00.000 2026-05-01 10:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
2026-05-01 08:00:00.000 2026-05-01 10:00:00.000             999 2026-05-01 06:00:00.000 2026-05-01 10:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
Start                   End                     OriginalDelayId OriginalStart           OriginalEnd             Comments                                                                                                                                                                                                                                                         JustifiedByUser                                    JustifiedDatetime       DelayCodeId DelayCategoryId IsDelayManual IsMicroDelay AssetId    
----------------------- ----------------------- --------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------------------- ----------- --------------- ------------- ------------ -----------
2026-05-01 06:00:00.000 2026-05-01 08:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 10:00:00.000 broken thing                                                                                                                                                                                                                                                     alice                                              2026-05-01 11:00:00.000           5               2             1            0           1
2026-05-01 08:00:00.000 2026-05-01 10:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 10:00:00.000 broken thing                                                                                                                                                                                                                                                     alice                                              2026-05-01 11:00:00.000           5               2             1            0           1
Start                   End                     OriginalDelayId OriginalStart           OriginalEnd             Comments                                                                                                                                                                                                                                                         JustifiedByUser                                    JustifiedDatetime       DelayCodeId DelayCategoryId IsDelayManual IsMicroDelay AssetId    
----------------------- ----------------------- --------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------------------- ----------- --------------- ------------- ------------ -----------
2026-05-01 06:00:00.000 2026-05-01 08:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 18:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
2026-05-01 08:00:00.000 2026-05-01 16:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 18:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
2026-05-01 16:00:00.000 2026-05-01 18:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 18:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
Start                   End                     OriginalDelayId OriginalStart           OriginalEnd             Comments                                                                                                                                                                                                                                                         JustifiedByUser                                    JustifiedDatetime       DelayCodeId DelayCategoryId IsDelayManual IsMicroDelay AssetId    
----------------------- ----------------------- --------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------------------- ----------- --------------- ------------- ------------ -----------
2026-05-01 06:00:00.000 2026-05-01 08:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 08:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
2026-05-01 08:00:00.000 2026-05-01 16:00:00.000               1 2026-05-01 08:00:00.000 2026-05-01 16:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
2026-05-01 16:00:00.000 2026-05-01 18:00:00.000               1 2026-05-01 16:00:00.000 2026-05-01 18:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
Start                   End                     OriginalDelayId OriginalStart           OriginalEnd             Comments                                                                                                                                                                                                                                                         JustifiedByUser                                    JustifiedDatetime       DelayCodeId DelayCategoryId IsDelayManual IsMicroDelay AssetId    
----------------------- ----------------------- --------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------------------- ----------- --------------- ------------- ------------ -----------
2026-05-01 06:00:00.000 2026-05-01 08:00:00.000               1 2026-05-01 06:00:00.000                    NULL NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
2026-05-01 08:00:00.000 2026-05-01 16:00:00.000               1 2026-05-01 06:00:00.000                    NULL NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
2026-05-01 16:00:00.000 2026-05-02 00:00:00.000               1 2026-05-01 06:00:00.000                    NULL NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
Start                   End                     OriginalDelayId OriginalStart           OriginalEnd             Comments                                                                                                                                                                                                                                                         JustifiedByUser                                    JustifiedDatetime       DelayCodeId DelayCategoryId IsDelayManual IsMicroDelay AssetId    
----------------------- ----------------------- --------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------------------- ----------- --------------- ------------- ------------ -----------
2026-05-01 06:00:00.000 2026-05-01 08:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 10:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
2026-05-01 08:00:00.000 2026-05-01 10:00:00.000               1 2026-05-01 06:00:00.000 2026-05-01 10:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
Start                   End                     OriginalDelayId OriginalStart           OriginalEnd             Comments                                                                                                                                                                                                                                                         JustifiedByUser                                    JustifiedDatetime       DelayCodeId DelayCategoryId IsDelayManual IsMicroDelay AssetId    
----------------------- ----------------------- --------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------------------- ----------- --------------- ------------- ------------ -----------
Start                   End                     OriginalDelayId OriginalStart           OriginalEnd             Comments                                                                                                                                                                                                                                                         JustifiedByUser                                    JustifiedDatetime       DelayCodeId DelayCategoryId IsDelayManual IsMicroDelay AssetId    
----------------------- ----------------------- --------------- ----------------------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------- ----------------------- ----------- --------------- ------------- ------------ -----------
2026-05-01 08:00:00.000 2026-05-01 10:00:00.000               1 2026-05-01 08:00:00.000 2026-05-01 10:00:00.000 NULL                                                                                                                                                                                                                                                             NULL                                                                  NULL        NULL            NULL             0            0           1
  BatchId:1 ReferenceId:5000 PartId:100 Timestamp:Jan  1 2026 12:00AM by test Success
  BatchId:10 ReferenceId:5000 PartId:100 Timestamp:Feb  2 2026 12:00AM by NULL Success
  BatchId:11 ReferenceId:9999 PartId:100 Timestamp:NULL by NULL Success
  BatchId:10 ReferenceId:7777 PartId:100 Timestamp:Jan  1 2026 12:00AM by NULL Success
  BatchId:1 ReferenceId:1241919908 PartId:100 Timestamp:Jan  1 2026 12:00AM by NULL Success
  BatchId:1 ReferenceId:5000 PartId:100 Timestamp:Jan  1 2026 12:00AM by NULL Success
  BatchId:1 ReferenceId:5000 PartId:100 Timestamp:Jan  1 2026 12:00AM by NULL Success
UpsertTask CREATE+INSTALL Type=3 Name=Roof #42 to 1 pos 1 on Jan  1 2099 12:00AM by TESTER | Created PartId=101 | Success
UpsertTask TO-DEFAULT-ARRAY 100 on Jan  1 2020 12:00AM by TESTER | LastTaskId=3000 IsDefaultArray=0 | Path A: Fresh Removal Success
UpsertTask 100 to 1 pos 1 on May 22 2026  6:00AM by CORRECTOR | LastTaskId=3002 IsDefaultArray=0 | Path B: Correction Success
UpsertTask 100 to NULL pos NULL on May 22 2026 12:00PM by CORRECTOR | LastTaskId=3002 IsDefaultArray=0 | Path B: Correction Success
UpsertTask 100 to 1 pos 1 on Jan  1 2099 12:00AM by TESTER | LastTaskId=3001 IsDefaultArray=1 | Path A: Fresh Install Success
UpsertTask TO-DEFAULT-ARRAY 100 on May 21 2026  2:30PM by CORRECTOR | LastTaskId=3001 IsDefaultArray=1 | Path B: Correction Success
UpsertTask CREATE+INSTALL Type=3 Name=Roof #42 to 1 pos 1 on Jan  1 2099 12:00AM by TESTER | Created PartId=101 | Success
UpsertTask 100 to 1 pos 1 on Jan  1 2099 12:00AM by TESTER | LastTaskId=3001 IsDefaultArray=1 | Path A: Fresh Install Success
UpsertTask TO-DEFAULT-ARRAY 100 on Apr  1 2026 12:00AM by TESTER | LastTaskId=3001 IsDefaultArray=1 | Path B: Correction Success
UpsertTask 100 to 1 pos 1 on Jan  1 2020 12:00AM by TESTER | LastTaskId=3001 IsDefaultArray=1 | Path A: Fresh Install Success
UpsertTask TO-DEFAULT-ARRAY 100 on Jan  1 2099 12:00AM by TESTER | LastTaskId=3000 IsDefaultArray=0 | Path A: Fresh Removal Success
UpsertTask TO-DEFAULT-ARRAY 100 on May 21 2026  2:30PM by TESTER | LastTaskId=3001 IsDefaultArray=1 | Path B: Correction Success
UpsertTask TO-DEFAULT-ARRAY 100 on Jan  1 2099 12:00AM by TESTER | LastTaskId=3000 IsDefaultArray=0 | Path A: Fresh Removal Success
UpsertTask TO-DEFAULT-ARRAY 100 on May 21 2026  2:30PM by CORRECTOR | LastTaskId=3001 IsDefaultArray=1 | Path B: Correction Success
UpsertTask 100 to 1 pos 1 on May 22 2026  6:00AM by TESTER | LastTaskId=3002 IsDefaultArray=0 | Path B: Correction Success
UpsertTask 100 to 1 pos 1 on Jun  8 2026  2:53PM by TESTER | LastTaskId=3001 IsDefaultArray=1 | Path A: Fresh Install Success
UpsertTask 100 to 1 pos 1 on Jan  1 2099 12:00AM by TESTER | LastTaskId=NULL IsDefaultArray=NULL | Path A: Fresh Install Success
UpsertTask TO-DEFAULT-ARRAY 100 on Jan  1 2099 12:00AM by TESTER | LastTaskId=NULL IsDefaultArray=NULL | Path A: Fresh Removal Success
UpsertTask CREATE+INSTALL Type=3 Name=Roof #42 to 1 pos 1 on Jan  1 2020 12:00AM by TESTER | Created PartId=101 | Success
UpsertTask CREATE+INSTALL Type=3 Name=Roof #42 to 1 pos 1 on Jan  1 2099 12:00AM by TESTER | Created PartId=101 | Success
UpsertTask CREATE+INSTALL Type=3 Name=Roof #42 to 1 pos 1 on Jan  1 2099 12:00AM by TESTER | Created PartId=101 | Error: boom from MovePart spy
UpsertTask TO-DEFAULT-ARRAY 100 on Jan  1 2099 12:00AM by TESTER | LastTaskId=3000 IsDefaultArray=0 | Path A: Fresh Removal Success
UpsertTask 100 to 200 pos 9 on May 22 2026  6:00AM by CORRECTOR | LastTaskId=3002 IsDefaultArray=0 | Path B: Correction Success
UpsertTask 100 to 1 pos 1 on Jan  1 2099 12:00AM by TESTER | LastTaskId=3001 IsDefaultArray=1 | Path A: Fresh Install Success
UpsertTask CREATE+INSTALL Type=3 Name=Roof #42 to 1 pos 1 on Jan  1 2099 12:00AM by TESTER | Created PartId=101 | Success
UpsertTask TO-DEFAULT-ARRAY 100 on Jan  1 2020 12:00AM by TESTER | LastTaskId=3001 IsDefaultArray=1 | Path B: Correction Success
 
+----------------------+
|Test Execution Summary|
+----------------------+
 
|No |Test Case Name                                                                                                       |Dur(ms)|Result |
+---+---------------------------------------------------------------------------------------------------------------------+-------+-------+
|1  |[DEL_GetDelay_Tests].[test IsDelayManual is aliased as IsManual for manual delay]                                    |     99|Success|
|2  |[DEL_GetDelay_Tests].[test returns delay row when DelayId exists]                                                    |    103|Success|
|3  |[DEL_GetDelay_Tests].[test returns empty result set when DelayId does not exist]                                     |     28|Success|
|4  |[DEL_GetDelay_Tests].[test returns NULL End for active delay]                                                        |     62|Success|
|5  |[DEL_GetDelay_Tests].[test returns NULL justification fields for unjustified delay]                                  |   1249|Success|
|6  |[DEL_GetDelay_Tests].[test returns only matching delay when multiple delays exist]                                   |    136|Success|
|7  |[DEL_GetDelay_Tests].[test returns split delay original fields]                                                      |     73|Success|
|8  |[DEL_SpliceDelaysByShiftJob_Tests].[test assigns ShiftId via GetShiftId for new slices]                              |     66|Success|
|9  |[DEL_SpliceDelaysByShiftJob_Tests].[test closes open delay at boundary for past shifts]                              |     87|Success|
|10 |[DEL_SpliceDelaysByShiftJob_Tests].[test does not modify delay contained in one shift]                               |     86|Success|
|11 |[DEL_SpliceDelaysByShiftJob_Tests].[test handles delay starting on shift boundary]                                   |     66|Success|
|12 |[DEL_SpliceDelaysByShiftJob_Tests].[test ignores delays before DaysBack window]                                      |     61|Success|
|13 |[DEL_SpliceDelaysByShiftJob_Tests].[test ignores delays starting after End parameter]                                |    132|Success|
|14 |[DEL_SpliceDelaysByShiftJob_Tests].[test is idempotent on second run]                                                |     86|Success|
|15 |[DEL_SpliceDelaysByShiftJob_Tests].[test keeps open delay open in current shift]                                     |     82|Success|
|16 |[DEL_SpliceDelaysByShiftJob_Tests].[test marks slice non-micro when longer than MinDelayTime]                        |    107|Success|
|17 |[DEL_SpliceDelaysByShiftJob_Tests].[test NULL AssetId processes only Caster EAF LMF]                                 |     86|Success|
|18 |[DEL_SpliceDelaysByShiftJob_Tests].[test preserves OriginalDelayId when re-splicing]                                 |     82|Success|
|19 |[DEL_SpliceDelaysByShiftJob_Tests].[test propagates justification and metadata to new slices]                        |     83|Success|
|20 |[DEL_SpliceDelaysByShiftJob_Tests].[test sets OriginalDelayId to self for first splice]                              |     78|Success|
|21 |[DEL_SpliceDelaysByShiftJob_Tests].[test splits delay crossing multiple shift boundaries]                            |     90|Success|
|22 |[DEL_SpliceDelaysByShiftJob_Tests].[test splits delay crossing one shift boundary]                                   |     91|Success|
|23 |[DEL_SpliceDelaysByShiftJob_Tests].[test throws when AssetId does not exist]                                         |     45|Success|
|24 |[DEL_UpsertDelayCategory_Tests].[test insert ignores @IsActive parameter]                                            |     37|Success|
|25 |[DEL_UpsertDelayCategory_Tests].[test insert with name colliding inactive sibling succeeds]                          |     54|Success|
|26 |[DEL_UpsertDelayCategory_Tests].[test insert with same name in different area succeeds]                              |     45|Success|
|27 |[DEL_UpsertDelayCategory_Tests].[test insert writes Name Color and DelayAreaAssetId]                                 |     45|Success|
|28 |[DEL_UpsertDelayCategory_Tests].[test successful insert does not call WriteLog]                                      |     90|Success|
|29 |[DEL_UpsertDelayCategory_Tests].[test successful update calls WriteLog once]                                         |     50|Success|
|30 |[DEL_UpsertDelayCategory_Tests].[test throws 50000 when name collides with active sibling in same area]              |     41|Success|
|31 |[DEL_UpsertDelayCategory_Tests].[test throws 51001 when both DelayAreaAssetId and DelayCategoryId are NULL]          |     50|Success|
|32 |[DEL_UpsertDelayCategory_Tests].[test throws 51002 when DelayAreaAssetId is not a delay area]                        |     41|Success|
|33 |[DEL_UpsertDelayCategory_Tests].[test throws 51002 when update reparents to a non-delay-area asset]                  |     45|Success|
|34 |[DEL_UpsertDelayCategory_Tests].[test throws 51004 when DelayCategoryName is NULL]                                   |     41|Success|
|35 |[DEL_UpsertDelayCategory_Tests].[test throws 51005 when DelayCategoryColor is NULL]                                  |     33|Success|
|36 |[DEL_UpsertDelayCategory_Tests].[test throws 51006 when DelayCategoryId does not exist]                              |     50|Success|
|37 |[DEL_UpsertDelayCategory_Tests].[test update inherits DelayAreaAssetId from existing row when NULL]                  |     62|Success|
|38 |[DEL_UpsertDelayCategory_Tests].[test update reparents category to new DelayAreaAssetId]                             |     86|Success|
|39 |[DEL_UpsertDelayCategory_Tests].[test update toggles IsActive]                                                       |     50|Success|
|40 |[DEL_UpsertDelayCategory_Tests].[test update with same name as self does not throw 50000]                            |     57|Success|
|41 |[DEL_UpsertDelayCategory_Tests].[test update writes new DelayCategoryColor]                                          |     53|Success|
|42 |[DEL_UpsertDelayCategory_Tests].[test update writes new DelayCategoryName]                                           |    115|Success|
|43 |[DEL_UpsertManualDelay_Tests].[test insert open delay leaves End NULL]                                               |     82|Success|
|44 |[DEL_UpsertManualDelay_Tests].[test insert throws 51301 when AssetId is NULL]                                        |     82|Success|
|45 |[DEL_UpsertManualDelay_Tests].[test insert throws 51302 when Start is NULL]                                          |     65|Success|
|46 |[DEL_UpsertManualDelay_Tests].[test insert throws 51303 when an open delay precedes Start]                           |     66|Success|
|47 |[DEL_UpsertManualDelay_Tests].[test insert throws 51304 when End is before Start]                                    |     66|Success|
|48 |[DEL_UpsertManualDelay_Tests].[test insert throws 51305 when range collides with existing delay]                     |     82|Success|
|49 |[DEL_UpsertManualDelay_Tests].[test insert throws 51306 when End is NULL and a later delay exists]                   |    111|Success|
|50 |[DEL_UpsertManualDelay_Tests].[test insert with code stamps JustifiedByUser and JustifiedDatetime]                   |     78|Success|
|51 |[DEL_UpsertManualDelay_Tests].[test insert with End sets IsDelayManual IsMicroDelay and ShiftId]                     |     84|Success|
|52 |[DEL_UpsertManualDelay_Tests].[test insert without code or category leaves Justified fields NULL]                    |    160|Success|
|53 |[DEL_UpsertManualDelay_Tests].[test NULL skips Code and Category existence check]                                    |     78|Success|
|54 |[DEL_UpsertManualDelay_Tests].[test sentinel -1 skips Code and Category existence check]                             |    132|Success|
|55 |[DEL_UpsertManualDelay_Tests].[test throws 51309 when DelayCategoryId does not exist]                                |    185|Success|
|56 |[DEL_UpsertManualDelay_Tests].[test throws 51309 when DelayCodeId does not exist]                                    |     78|Success|
|57 |[DEL_UpsertManualDelay_Tests].[test throws 51310 when no shift exists for Start]                                     |     95|Success|
|58 |[DEL_UpsertManualDelay_Tests].[test update changing code re-stamps Justified fields]                                 |     98|Success|
|59 |[DEL_UpsertManualDelay_Tests].[test update inherits current Start when @Start is NULL]                               |    143|Success|
|60 |[DEL_UpsertManualDelay_Tests].[test update throws 51307 when DelayId does not exist]                                 |     66|Success|
|61 |[DEL_UpsertManualDelay_Tests].[test update throws 51308 when delay is not manual]                                    |    165|Success|
|62 |[DEL_UpsertManualDelay_Tests].[test update throws 51311 when an open delay precedes Start]                           |     91|Success|
|63 |[DEL_UpsertManualDelay_Tests].[test update throws 51312 when inherited End is before new Start]                      |     62|Success|
|64 |[DEL_UpsertManualDelay_Tests].[test update with non-NULL Comments overwrites]                                        |     90|Success|
|65 |[DEL_UpsertManualDelay_Tests].[test update with NULL Comments keeps existing]                                        |    168|Success|
|66 |[DEL_UpsertManualDelay_Tests].[test update with NULL wipes code]                                                     |    169|Success|
|67 |[DEL_UpsertManualDelay_Tests].[test update with same code does not re-stamp Justified fields]                        |     90|Success|
|68 |[DEL_UpsertManualDelay_Tests].[test update with sentinel -1 keeps current code]                                      |     87|Success|
|69 |[DEL_UpsertManualDelay_Tests].[test update with sentinel -1 on code does not re-stamp Justified fields]              |    174|Success|
|70 |[DEL_UpsertManualDelay_Tests].[test update writes new Start End and recomputes ShiftId]                              |     99|Success|
|71 |[EQP_UpsertBatch_Tests].[test 1 INSERT: new ReferenceId+PartId creates a row]                                        |     33|Success|
|72 |[EQP_UpsertBatch_Tests].[test 10 LOG: writes audit on insert but not on a no-op re-run]                              |     37|Success|
|73 |[EQP_UpsertBatch_Tests].[test 2 INSERT: omitted BatchId resolves existing key instead of inserting]                  |     29|Success|
|74 |[EQP_UpsertBatch_Tests].[test 3 INSERT: null Timestamp skips the duplicate guard and inserts]                        |     41|Success|
|75 |[EQP_UpsertBatch_Tests].[test 4 INSERT: omitted ReferenceId is backfilled with a non-null value]                     |     42|Success|
|76 |[EQP_UpsertBatch_Tests].[test 5 UPDATE: identical re-run is a no-op]                                                 |     33|Success|
|77 |[EQP_UpsertBatch_Tests].[test 6 UPDATE: changed Timestamp updates the existing row]                                  |     45|Success|
|78 |[EQP_UpsertBatch_Tests].[test 7 UPDATE: explicit BatchId with different ReferenceId overwrites it]                   |     37|Success|
|79 |[EQP_UpsertBatch_Tests].[test 8 VALIDATE: same Timestamp+PartId on a different batch raises]                         |     28|Success|
|80 |[EQP_UpsertBatch_Tests].[test 9 VALIDATE: returns the persisted BatchId on insert and no-op]                         |     33|Success|
|81 |[EQP_UpsertBatchMetrics_Tests].[test 1 INSERT: new BatchId+MetricTypeId creates a row]                               |     25|Success|
|82 |[EQP_UpsertBatchMetrics_Tests].[test 2 INSERT: float Value is stored precisely]                                      |     29|Success|
|83 |[EQP_UpsertBatchMetrics_Tests].[test 3 INSERT: null Value inserts a null]                                            |     25|Success|
|84 |[EQP_UpsertBatchMetrics_Tests].[test 4 UPDATE: existing row has its Value overwritten]                               |     37|Success|
|85 |[EQP_UpsertBatchMetrics_Tests].[test 5 UPDATE: replace touches only the matching MetricTypeId]                       |     37|Success|
|86 |[EQP_UpsertBatchMetrics_Tests].[test 6 VALIDATE: failed write logs E and re-raises]                                  |     37|Success|
|87 |[EQP_UpsertPart_Tests].[test 1 INSERT writes PartTypeId and PartName]                                                |     25|Success|
|88 |[EQP_UpsertPart_Tests].[test 10 VALIDATE NULL PartTypeId throws]                                                     |     20|Success|
|89 |[EQP_UpsertPart_Tests].[test 11 UPDATE overwrites PartTypeId and PartName of the targeted row]                       |     37|Success|
|90 |[EQP_UpsertPart_Tests].[test 12 UPDATE returns the targeted PartId]                                                  |     62|Success|
|91 |[EQP_UpsertPart_Tests].[test 13 UPDATE preserves IsActive IsDefaultArray and AuxPartId]                              |     24|Success|
|92 |[EQP_UpsertPart_Tests].[test 14 UPDATE only affects the targeted row]                                                |     33|Success|
|93 |[EQP_UpsertPart_Tests].[test 15 UPDATE with PartTypeId = -1 preserves current]                                       |     33|Success|
|94 |[EQP_UpsertPart_Tests].[test 16 UPDATE with empty PartName preserves current]                                        |    120|Success|
|95 |[EQP_UpsertPart_Tests].[test 17 UPDATE with explicit IsActive flips the value]                                       |     32|Success|
|96 |[EQP_UpsertPart_Tests].[test 18 UPDATE with explicit IsDefaultArray flips the value]                                 |     33|Success|
|97 |[EQP_UpsertPart_Tests].[test 19 UPDATE with explicit AuxPartId writes the new value]                                 |     33|Success|
|98 |[EQP_UpsertPart_Tests].[test 2 INSERT returns the new identity value]                                                |     58|Success|
|99 |[EQP_UpsertPart_Tests].[test 20 UPDATE with AuxPartId = -1 preserves current]                                        |     57|Success|
|100|[EQP_UpsertPart_Tests].[test 21 UPDATE with explicit NULL AuxPartId clears the value]                                |     29|Success|
|101|[EQP_UpsertPart_Tests].[test 22 VALIDATE on non-existent PartId throws]                                              |     33|Success|
|102|[EQP_UpsertPart_Tests].[test 23 UPDATE with no changes still returns the PartId]                                     |     25|Success|
|103|[EQP_UpsertPart_Tests].[test 24 VALIDATE NULL User throws]                                                           |     33|Success|
|104|[EQP_UpsertPart_Tests].[test 25 VALIDATE empty User throws]                                                          |     25|Success|
|105|[EQP_UpsertPart_Tests].[test 26 LOG insert writes an informational audit log row]                                    |     33|Success|
|106|[EQP_UpsertPart_Tests].[test 27 LOG update with changes writes an informational audit log row with the delta]        |     32|Success|
|107|[EQP_UpsertPart_Tests].[test 28 LOG update with no changes writes no audit log row]                                  |     29|Success|
|108|[EQP_UpsertPart_Tests].[test 29 LOG User parameter is forwarded to the audit log]                                    |     38|Success|
|109|[EQP_UpsertPart_Tests].[test 3 INSERT leaves IsActive IsDefaultArray and AuxPartId at table defaults]                |     29|Success|
|110|[EQP_UpsertPart_Tests].[test 30 LOG custom LogMessage replaces the auto-generated insert message]                    |     41|Success|
|111|[EQP_UpsertPart_Tests].[test 31 LOG custom LogMessage replaces the auto-generated update message]                    |     37|Success|
|112|[EQP_UpsertPart_Tests].[test 32 LOG custom LogMessage is ignored on no-change update]                                |     20|Success|
|113|[EQP_UpsertPart_Tests].[test 4 INSERT with explicit IsDefaultArray writes the value]                                 |     66|Success|
|114|[EQP_UpsertPart_Tests].[test 5 INSERT with explicit AuxPartId writes the value]                                      |     25|Success|
|115|[EQP_UpsertPart_Tests].[test 6 INSERT allows duplicate PartName values]                                              |     29|Success|
|116|[EQP_UpsertPart_Tests].[test 7 VALIDATE empty PartName throws]                                                       |     21|Success|
|117|[EQP_UpsertPart_Tests].[test 8 VALIDATE NULL PartName throws]                                                        |     21|Success|
|118|[EQP_UpsertPart_Tests].[test 9 VALIDATE PartTypeId = -1 throws]                                                      |     20|Success|
|119|[EQP_UpsertPartType_Tests].[test 1 INSERT writes PartTypeName IsArray IsReplaceable and InheritedFrom]               |     29|Success|
|120|[EQP_UpsertPartType_Tests].[test 10 UPDATE with IsArray IsReplaceable and SortOrder omitted preserves current]       |     29|Success|
|121|[EQP_UpsertPartType_Tests].[test 11 UPDATE with explicit SortOrder writes the new value]                             |     33|Success|
|122|[EQP_UpsertPartType_Tests].[test 12 VALIDATE on non-existent PartTypeId throws]                                      |     21|Success|
|123|[EQP_UpsertPartType_Tests].[test 13 VALIDATE InheritedFrom equal to PartTypeId throws]                               |     25|Success|
|124|[EQP_UpsertPartType_Tests].[test 14 UPDATE with no changes still returns the PartTypeId]                             |     24|Success|
|125|[EQP_UpsertPartType_Tests].[test 15 VALIDATE NULL User throws]                                                       |     24|Success|
|126|[EQP_UpsertPartType_Tests].[test 16 VALIDATE empty User throws]                                                      |     21|Success|
|127|[EQP_UpsertPartType_Tests].[test 17 LOG insert writes an informational audit log row]                                |     29|Success|
|128|[EQP_UpsertPartType_Tests].[test 18 LOG update with changes writes an informational audit log row with the delta]    |     37|Success|
|129|[EQP_UpsertPartType_Tests].[test 19 LOG update with no changes writes no audit log row]                              |     24|Success|
|130|[EQP_UpsertPartType_Tests].[test 2 INSERT returns the new identity value]                                            |     66|Success|
|131|[EQP_UpsertPartType_Tests].[test 20 LOG User parameter is forwarded to the audit log]                                |     74|Success|
|132|[EQP_UpsertPartType_Tests].[test 21 LOG custom LogMessage replaces the auto-generated insert message]                |     41|Success|
|133|[EQP_UpsertPartType_Tests].[test 22 LOG custom LogMessage replaces the auto-generated update message]                |     33|Success|
|134|[EQP_UpsertPartType_Tests].[test 23 LOG custom LogMessage is ignored on no-change update]                            |     45|Success|
|135|[EQP_UpsertPartType_Tests].[test 3 INSERT with optional params omitted honours table defaults]                       |     29|Success|
|136|[EQP_UpsertPartType_Tests].[test 4 VALIDATE empty PartTypeName throws]                                               |     20|Success|
|137|[EQP_UpsertPartType_Tests].[test 5 VALIDATE NULL PartTypeName throws]                                                |     25|Success|
|138|[EQP_UpsertPartType_Tests].[test 6 UPDATE overwrites all five columns of the existing row]                           |     24|Success|
|139|[EQP_UpsertPartType_Tests].[test 7 UPDATE returns the targeted PartTypeId]                                           |     25|Success|
|140|[EQP_UpsertPartType_Tests].[test 8 UPDATE with empty PartTypeName preserves current]                                 |     82|Success|
|141|[EQP_UpsertPartType_Tests].[test 9 UPDATE with InheritedFrom = -1 preserves current]                                 |     24|Success|
|142|[EQP_UpsertPartTypeTree_Tests].[test 1 INSERT writes ParentPartTypeId PartTypeId PositionId and PositionName]        |     29|Success|
|143|[EQP_UpsertPartTypeTree_Tests].[test 10 UPDATE returns zero]                                                         |     25|Success|
|144|[EQP_UpsertPartTypeTree_Tests].[test 11 UPDATE with empty PositionName preserves current]                            |     28|Success|
|145|[EQP_UpsertPartTypeTree_Tests].[test 12 UPDATE with explicit NULL PositionName clears the value]                     |     37|Success|
|146|[EQP_UpsertPartTypeTree_Tests].[test 13 VALIDATE NULL User throws]                                                   |     21|Success|
|147|[EQP_UpsertPartTypeTree_Tests].[test 14 VALIDATE empty User throws]                                                  |     16|Success|
|148|[EQP_UpsertPartTypeTree_Tests].[test 15 LOG insert writes an informational audit log row]                            |     37|Success|
|149|[EQP_UpsertPartTypeTree_Tests].[test 16 LOG update with changes writes an informational audit log row with the delta]|     36|Success|
|150|[EQP_UpsertPartTypeTree_Tests].[test 17 LOG update with no changes writes no audit log row]                          |     25|Success|
|151|[EQP_UpsertPartTypeTree_Tests].[test 18 LOG User parameter is forwarded to the audit log]                            |     29|Success|
|152|[EQP_UpsertPartTypeTree_Tests].[test 19 LOG custom LogMessage replaces the auto-generated insert message]            |     37|Success|
|153|[EQP_UpsertPartTypeTree_Tests].[test 2 INSERT returns zero]                                                          |     29|Success|
|154|[EQP_UpsertPartTypeTree_Tests].[test 20 LOG custom LogMessage replaces the auto-generated update message]            |     32|Success|
|155|[EQP_UpsertPartTypeTree_Tests].[test 21 LOG custom LogMessage is ignored on no-change update]                        |     25|Success|
|156|[EQP_UpsertPartTypeTree_Tests].[test 3 INSERT with omitted PositionName writes NULL]                                 |     28|Success|
|157|[EQP_UpsertPartTypeTree_Tests].[test 4 INSERT allows the same child type at multiple positions of the same parent]   |     29|Success|
|158|[EQP_UpsertPartTypeTree_Tests].[test 5 VALIDATE NULL ParentPartTypeId throws]                                        |     20|Success|
|159|[EQP_UpsertPartTypeTree_Tests].[test 6 VALIDATE NULL PartTypeId throws]                                              |     16|Success|
|160|[EQP_UpsertPartTypeTree_Tests].[test 7 VALIDATE NULL PositionId throws]                                              |     24|Success|
|161|[EQP_UpsertPartTypeTree_Tests].[test 8 VALIDATE self-referencing edge throws]                                        |     98|Success|
|162|[EQP_UpsertPartTypeTree_Tests].[test 9 UPDATE overwrites PositionName when edge already exists]                      |     28|Success|
|163|[EQP_UpsertTask_Tests].[test 1 INSERT: CREATE writes catParts row]                                                   |     78|Success|
|164|[EQP_UpsertTask_Tests].[test 10 UPDATE: CORRECTION removal updates existing task in place]                           |     78|Success|
|165|[EQP_UpsertTask_Tests].[test 11 UPDATE: CORRECTION removal preserves ParentPartId and PositionId]                    |    116|Success|
|166|[EQP_UpsertTask_Tests].[test 12 UPDATE: CORRECTION install updates existing task in place]                           |    160|Success|
|167|[EQP_UpsertTask_Tests].[test 13 UPDATE: CORRECTION install with NULL parent preserves existing]                      |     79|Success|
|168|[EQP_UpsertTask_Tests].[test 14 UPDATE: CORRECTION install overwrites parent and position]                           |     74|Success|
|169|[EQP_UpsertTask_Tests].[test 15 VALIDATE: CREATE requires PartTypeId]                                                |     86|Success|
|170|[EQP_UpsertTask_Tests].[test 16 VALIDATE: CREATE requires PartName]                                                  |    135|Success|
|171|[EQP_UpsertTask_Tests].[test 17 VALIDATE: CREATE requires ParentPartId]                                              |     66|Success|
|172|[EQP_UpsertTask_Tests].[test 18 VALIDATE: REMOVE fresh floor is last install timestamp]                              |     69|Success|
|173|[EQP_UpsertTask_Tests].[test 19 VALIDATE: CORRECTION removal floor is previous timestamp]                            |     86|Success|
|174|[EQP_UpsertTask_Tests].[test 2 INSERT: CREATE invokes MovePart with returned PartId]                                 |     78|Success|
|175|[EQP_UpsertTask_Tests].[test 20 VALIDATE: INSTALL part floor blocks earlier than last task]                          |     66|Success|
|176|[EQP_UpsertTask_Tests].[test 21 VALIDATE: INSTALL location floor blocks slot overlap]                                |    111|Success|
|177|[EQP_UpsertTask_Tests].[test 22 VALIDATE: NULL timestamp is coerced to GETUTCDATE]                                   |     74|Success|
|178|[EQP_UpsertTask_Tests].[test 23 LOG: CREATE success writes informational log]                                        |     78|Success|
|179|[EQP_UpsertTask_Tests].[test 24 LOG: error path writes error log and re-raises]                                      |    100|Success|
|180|[EQP_UpsertTask_Tests].[test 25 LOG: REMOVE fresh success writes informational log]                                  |     73|Success|
|181|[EQP_UpsertTask_Tests].[test 26 LOG: CORRECTION removal success writes informational log]                            |    144|Success|
|182|[EQP_UpsertTask_Tests].[test 27 LOG: INSTALL fresh success writes informational log]                                 |     83|Success|
|183|[EQP_UpsertTask_Tests].[test 28 LOG: CORRECTION install success writes informational log]                            |     82|Success|
|184|[EQP_UpsertTask_Tests].[test 29 INSERT: CREATE backdated triggers cache rebuild]                                     |     70|Success|
|185|[EQP_UpsertTask_Tests].[test 3 INSERT: CREATE returns new PartId]                                                    |    103|Success|
|186|[EQP_UpsertTask_Tests].[test 30 INSERT: REMOVE backdated deletes batches and batch metrics]                          |    152|Success|
|187|[EQP_UpsertTask_Tests].[test 31 UPDATE: CORRECTION removal backdated deletes window batches]                         |    117|Success|
|188|[EQP_UpsertTask_Tests].[test 32 INSERT: INSTALL backdated triggers cache rebuild]                                    |     74|Success|
|189|[EQP_UpsertTask_Tests].[test 33 VALIDATE: INSTALL fresh requires ParentPartId]                                       |     71|Success|
|190|[EQP_UpsertTask_Tests].[test 4 INSERT: INSTALL from default array invokes MovePart]                                  |    165|Success|
|191|[EQP_UpsertTask_Tests].[test 5 INSERT: INSTALL with no history invokes MovePart]                                     |     70|Success|
|192|[EQP_UpsertTask_Tests].[test 6 INSERT: INSTALL future timestamp does not rebuild cache]                              |     74|Success|
|193|[EQP_UpsertTask_Tests].[test 7 INSERT: REMOVE invokes MovePart with MoveToDefaultArray]                              |     95|Success|
|194|[EQP_UpsertTask_Tests].[test 8 INSERT: REMOVE with no history invokes MovePart with MoveToDefaultArray]              |    103|Success|
|195|[EQP_UpsertTask_Tests].[test 9 INSERT: REMOVE future timestamp does not delete batches]                              |    172|Success|
--------------------------------------------------------------------------------------------
Test Case Summary: 195 test case(s) executed, 195 succeeded, 0 skipped, 0 failed, 0 errored.
--------------------------------------------------------------------------------------------