@@ -34,6 +34,25 @@ public void GetOrderedEnabledColumns_AppendsEnabledColumnsMissingFromOrder()
3434 Assert . Equal ( 2 , ordered . Count ) ;
3535 }
3636
37+ [ Fact ]
38+ public void GetOrderedEnabledColumns_DuplicateOrderAndMissingEnabledColumn_DeduplicatesThenAppends ( )
39+ {
40+ var state = new LogTableState
41+ {
42+ Columns = ImmutableDictionary < ColumnName , bool > . Empty
43+ . Add ( ColumnName . Source , true )
44+ . Add ( ColumnName . EventId , true ) ,
45+ ColumnOrder = [ ColumnName . Source , ColumnName . Source ]
46+ } ;
47+
48+ var ordered = state . GetOrderedEnabledColumns ( new ColumnDefaults ( ) ) ;
49+
50+ // Source deduplicated to one entry; EventId (enabled, absent from the order) appended from defaults.
51+ Assert . Equal ( ColumnName . Source , ordered [ 0 ] ) ;
52+ Assert . Contains ( ColumnName . EventId , ordered ) ;
53+ Assert . Equal ( 2 , ordered . Count ) ;
54+ }
55+
3756 [ Fact ]
3857 public void GetOrderedEnabledColumns_FiltersToEnabled_InColumnOrder ( )
3958 {
@@ -51,4 +70,21 @@ public void GetOrderedEnabledColumns_FiltersToEnabled_InColumnOrder()
5170 ColumnName [ ] expected = [ ColumnName . EventId , ColumnName . Source ] ;
5271 Assert . Equal ( expected , ordered ) ;
5372 }
73+
74+ [ Fact ]
75+ public void GetOrderedEnabledColumns_WithDuplicatesInColumnOrder_DeduplicatesPreservingFirstOccurrence ( )
76+ {
77+ var state = new LogTableState
78+ {
79+ Columns = ImmutableDictionary < ColumnName , bool > . Empty
80+ . Add ( ColumnName . Source , true )
81+ . Add ( ColumnName . EventId , true ) ,
82+ ColumnOrder = [ ColumnName . Source , ColumnName . EventId , ColumnName . Source ]
83+ } ;
84+
85+ var ordered = state . GetOrderedEnabledColumns ( new ColumnDefaults ( ) ) ;
86+
87+ ColumnName [ ] expected = [ ColumnName . Source , ColumnName . EventId ] ;
88+ Assert . Equal ( expected , ordered ) ;
89+ }
5490}
0 commit comments