@@ -466,7 +466,8 @@ def default(name: str) -> DefaultFlag:
466466def test_build_segment_overrides_index__indexes_only_overriding_segments (
467467 lazy_context : SDKEvaluationContext ,
468468) -> None :
469- # Given: a second segment with no overrides on top of the default context.
469+ # Given
470+ # a second segment with no overrides on top of the default context
470471 assert lazy_context ["segments" ] is not None
471472 lazy_context ["segments" ]["no_override_segment" ] = {
472473 "key" : "no_override_segment" ,
@@ -481,9 +482,32 @@ def test_build_segment_overrides_index__indexes_only_overriding_segments(
481482 ],
482483 }
483484
484- # When: we build the reverse index.
485+ # When
486+ # we build the reverse index
485487 index = build_segment_overrides_index (lazy_context )
486488
487- # Then: only segments that actually carry an override appear.
489+ # Then
490+ # only segments that actually carry an override appear,
491+ # keyed by their key in the evaluation context
488492 assert set (index ) == {"target" }
489- assert index ["target" ][0 ]["name" ] == "premium_segment"
493+ assert index ["target" ]["premium_segment" ]["name" ] == "premium_segment"
494+
495+
496+ def test_build_segment_overrides_index__duplicate_segment_key_fields__keeps_both (
497+ lazy_context : SDKEvaluationContext ,
498+ ) -> None :
499+ # Given: a second overriding segment reusing the first segment's `key`
500+ # field, as identity-override segments used to do.
501+ assert lazy_context ["segments" ] is not None
502+ premium_segment = lazy_context ["segments" ]["premium_segment" ]
503+ lazy_context ["segments" ]["enterprise_segment" ] = {
504+ ** premium_segment ,
505+ "name" : "enterprise_segment" ,
506+ }
507+
508+ # When
509+ index = build_segment_overrides_index (lazy_context )
510+
511+ # Then
512+ # both segments are indexed, neither collapses into the other
513+ assert set (index ["target" ]) == {"premium_segment" , "enterprise_segment" }
0 commit comments