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