@@ -1595,8 +1595,6 @@ def test_environment_feature_states_does_not_return_null_versions(
15951595 assert len (response_json ["results" ]) == 1
15961596 assert response_json ["results" ][0 ]["id" ] == feature_state .id
15971597
1598- # Feature tests
1599-
16001598
16011599def test_create_feature_default_is_archived_is_false (
16021600 admin_client_new : APIClient , project : Project
@@ -4077,6 +4075,76 @@ def test_get_multivariate_options_feature_not_found_responds_404(
40774075 assert response .status_code == status .HTTP_404_NOT_FOUND
40784076
40794077
4078+ def test_list_features_segment_query_param_with_valid_segment (
4079+ admin_client_new : APIClient ,
4080+ project : Project ,
4081+ feature : Feature ,
4082+ environment : Environment ,
4083+ segment : Segment ,
4084+ ) -> None :
4085+ # Given
4086+ feature_segment = FeatureSegment .objects .create (
4087+ feature = feature ,
4088+ segment = segment ,
4089+ environment = environment ,
4090+ )
4091+ segment_override = FeatureState .objects .create (
4092+ feature = feature ,
4093+ feature_segment = feature_segment ,
4094+ environment = environment ,
4095+ enabled = True ,
4096+ )
4097+ segment_override .feature_state_value .string_value = "segment_value"
4098+ segment_override .feature_state_value .save ()
4099+
4100+ base_url = reverse ("api-v1:projects:project-features-list" , args = [project .id ])
4101+ url = f"{ base_url } ?environment={ environment .id } &segment={ segment .id } "
4102+
4103+ # When
4104+ response = admin_client_new .get (url )
4105+
4106+ # Then
4107+ assert response .status_code == status .HTTP_200_OK
4108+ response_json = response .json ()
4109+ feature_data = next (
4110+ filter (lambda r : r ["id" ] == feature .id , response_json ["results" ])
4111+ )
4112+
4113+ assert "environment_feature_state" in feature_data
4114+ segment_state = feature_data ["segment_feature_state" ]
4115+
4116+ assert segment_state is not None
4117+ assert segment_state ["id" ] == segment_override .id
4118+ assert segment_state ["feature_state_value" ] == "segment_value"
4119+ assert segment_state ["enabled" ] is True
4120+
4121+
4122+ def test_list_features_segment_query_param_with_invalid_segment (
4123+ admin_client_new : APIClient ,
4124+ project : Project ,
4125+ feature : Feature ,
4126+ environment : Environment ,
4127+ segment : Segment ,
4128+ ) -> None :
4129+ # Given
4130+ base_url = reverse ("api-v1:projects:project-features-list" , args = [project .id ])
4131+ invalid_segment_id = segment .id + 9999
4132+ url = f"{ base_url } ?environment={ environment .id } &segment={ invalid_segment_id } "
4133+
4134+ # When
4135+ response = admin_client_new .get (url )
4136+
4137+ # Then
4138+ assert response .status_code == status .HTTP_200_OK
4139+ response_json = response .json ()
4140+ feature_data = next (
4141+ filter (lambda r : r ["id" ] == feature .id , response_json ["results" ])
4142+ )
4143+
4144+ assert "segment_feature_state" in feature_data
4145+ assert feature_data ["segment_feature_state" ] is None
4146+
4147+
40804148def test_create_multiple_features_with_metadata_keeps_metadata_isolated (
40814149 admin_client_new : APIClient ,
40824150 project : Project ,
0 commit comments