@@ -414,6 +414,123 @@ public void ReduceAddTable_WhenSecondTable_ShouldSetCombinedAsActive()
414414 Assert . Equal ( combinedTable . Id , newState . ActiveEventLogId ) ;
415415 }
416416
417+ [ Fact ]
418+ public void ReduceAppendTableEvents_ShouldAppendEventsToExistingDisplayedEvents ( )
419+ {
420+ // Arrange
421+ var logData = new EventLogData ( Constants . LogNameTestLog , PathType . LogName , [ ] ) ;
422+ var state = new EventTableState ( ) ;
423+ state = EventTableReducers . ReduceAddTable ( state , new EventTableAction . AddTable ( logData ) ) ;
424+
425+ var initialEvents = new List < DisplayEventModel >
426+ {
427+ EventUtils . CreateTestEvent ( 100 , recordId : 1 ) ,
428+ EventUtils . CreateTestEvent ( 200 , recordId : 2 )
429+ } ;
430+
431+ state = EventTableReducers . ReduceAppendTableEvents (
432+ state ,
433+ new EventTableAction . AppendTableEvents ( logData . Id , initialEvents ) ) ;
434+
435+ var deltaEvents = new List < DisplayEventModel >
436+ {
437+ EventUtils . CreateTestEvent ( 300 , recordId : 3 ) ,
438+ EventUtils . CreateTestEvent ( 400 , recordId : 4 )
439+ } ;
440+
441+ var action = new EventTableAction . AppendTableEvents ( logData . Id , deltaEvents ) ;
442+
443+ // Act
444+ var newState = EventTableReducers . ReduceAppendTableEvents ( state , action ) ;
445+
446+ // Assert
447+ var updatedTable = newState . EventTables . First ( t => t . Id == logData . Id ) ;
448+ Assert . Equal ( 4 , updatedTable . DisplayedEvents . Count ) ;
449+ }
450+
451+ [ Fact ]
452+ public void ReduceAppendTableEvents_ShouldNotChangeIsLoading ( )
453+ {
454+ // Arrange
455+ var logData = new EventLogData ( Constants . LogNameTestLog , PathType . LogName , [ ] ) ;
456+ var state = new EventTableState ( ) ;
457+ state = EventTableReducers . ReduceAddTable ( state , new EventTableAction . AddTable ( logData ) ) ;
458+
459+ // Table should be in loading state after AddTable
460+ Assert . True ( state . EventTables . First ( t => t . Id == logData . Id ) . IsLoading ) ;
461+
462+ var action = new EventTableAction . AppendTableEvents (
463+ logData . Id ,
464+ new List < DisplayEventModel > { EventUtils . CreateTestEvent ( 100 , recordId : 1 ) } ) ;
465+
466+ // Act
467+ var newState = EventTableReducers . ReduceAppendTableEvents ( state , action ) ;
468+
469+ // Assert - IsLoading should still be true (partial update doesn't complete loading)
470+ var updatedTable = newState . EventTables . First ( t => t . Id == logData . Id ) ;
471+ Assert . True ( updatedTable . IsLoading ) ;
472+ Assert . Single ( updatedTable . DisplayedEvents ) ;
473+ }
474+
475+ [ Fact ]
476+ public void ReduceAppendTableEvents_ShouldPreserveSortOrder ( )
477+ {
478+ // Arrange
479+ var logData = new EventLogData ( Constants . LogNameTestLog , PathType . LogName , [ ] ) ;
480+ var state = new EventTableState ( ) ;
481+ state = EventTableReducers . ReduceAddTable ( state , new EventTableAction . AddTable ( logData ) ) ;
482+
483+ var initialEvents = new List < DisplayEventModel >
484+ {
485+ EventUtils . CreateTestEvent ( 100 , recordId : 10 ) ,
486+ EventUtils . CreateTestEvent ( 200 , recordId : 20 )
487+ } ;
488+
489+ state = EventTableReducers . ReduceAppendTableEvents (
490+ state ,
491+ new EventTableAction . AppendTableEvents ( logData . Id , initialEvents ) ) ;
492+
493+ // Append events with record IDs that should sort between and after existing
494+ var deltaEvents = new List < DisplayEventModel >
495+ {
496+ EventUtils . CreateTestEvent ( 300 , recordId : 5 ) ,
497+ EventUtils . CreateTestEvent ( 400 , recordId : 15 )
498+ } ;
499+
500+ var action = new EventTableAction . AppendTableEvents ( logData . Id , deltaEvents ) ;
501+
502+ // Act
503+ var newState = EventTableReducers . ReduceAppendTableEvents ( state , action ) ;
504+
505+ // Assert - default sort is by RecordId descending (IsDescending defaults to true)
506+ var displayedEvents = newState . EventTables . First ( t => t . Id == logData . Id ) . DisplayedEvents ;
507+ Assert . Equal ( 4 , displayedEvents . Count ) ;
508+
509+ var recordIds = displayedEvents . Select ( e => e . RecordId ) . ToList ( ) ;
510+ Assert . Equal ( recordIds . OrderByDescending ( x => x ) . ToList ( ) , recordIds ) ;
511+ }
512+
513+ [ Fact ]
514+ public void ReduceAppendTableEvents_WhenTableNotFound_ShouldReturnUnchangedState ( )
515+ {
516+ // Arrange
517+ var logData = new EventLogData ( Constants . LogNameTestLog , PathType . LogName , [ ] ) ;
518+ var state = new EventTableState ( ) ;
519+ state = EventTableReducers . ReduceAddTable ( state , new EventTableAction . AddTable ( logData ) ) ;
520+
521+ var unknownLogId = EventLogId . Create ( ) ;
522+
523+ var action = new EventTableAction . AppendTableEvents (
524+ unknownLogId ,
525+ new List < DisplayEventModel > { EventUtils . CreateTestEvent ( 100 ) } ) ;
526+
527+ // Act
528+ var newState = EventTableReducers . ReduceAppendTableEvents ( state , action ) ;
529+
530+ // Assert
531+ Assert . Same ( state , newState ) ;
532+ }
533+
417534 [ Fact ]
418535 public void ReduceCloseAll_ShouldClearAllTables ( )
419536 {
@@ -518,7 +635,7 @@ public void ReduceLoadColumnsCompleted_ShouldUpdateColumns()
518635 }
519636
520637 [ Fact ]
521- public void ReduceSetActiveTable_WhenTableIsLoading_ShouldNotChangeActive ( )
638+ public void ReduceSetActiveTable_WhenTableIsLoading_ShouldChangeActive ( )
522639 {
523640 // Arrange
524641 var logData = new EventLogData ( Constants . LogNameTestLog , PathType . LogName , [ ] ) ;
@@ -531,7 +648,7 @@ public void ReduceSetActiveTable_WhenTableIsLoading_ShouldNotChangeActive()
531648 var newState = EventTableReducers . ReduceSetActiveTable ( state , action ) ;
532649
533650 // Assert
534- Assert . Equal ( state . ActiveEventLogId , newState . ActiveEventLogId ) ;
651+ Assert . Equal ( logData . Id , newState . ActiveEventLogId ) ;
535652 }
536653
537654 [ Fact ]
@@ -632,7 +749,7 @@ public void ReduceToggleSorting_ShouldToggleIsDescending()
632749 }
633750
634751 [ Fact ]
635- public void ReduceUpdateCombinedEvents_WhenAnyTableIsLoading_ShouldReturnSameState ( )
752+ public void ReduceUpdateCombinedEvents_WhenAllTablesAreLoading_ShouldReturnSameState ( )
636753 {
637754 // Arrange
638755 var logData1 = new EventLogData ( Constants . LogNameLog1 , PathType . LogName , [ ] ) ;
0 commit comments