1717 FlagsmithAPIError ,
1818 FlagsmithFeatureDoesNotExistError ,
1919)
20- from flagsmith .models import DefaultFlag , Flag , Flags
20+ from flagsmith .models import DefaultFlag , ExperimentMetadata , Flag , Flags
2121from flagsmith .offline_handlers import OfflineHandler
2222from flagsmith .types import SDKEvaluationContext
2323
@@ -1122,12 +1122,18 @@ def test_get_experiment_flag__variant__returns_flag_and_tracks_exposure(
11221122 assert result .feature_name == "some_feature"
11231123 assert result .value == "some-value"
11241124 assert result .variant == "treatment"
1125+ # Taken from hard coded values in tests/data/identities.json
1126+ assert result .experiment == ExperimentMetadata (
1127+ id = 42 ,
1128+ name = "Some experiment" ,
1129+ in_experiment = True ,
1130+ )
11251131 mock_track .assert_called_once_with (
11261132 feature_name = "some_feature" ,
11271133 identifier = "user1" ,
11281134 value = "treatment" ,
11291135 traits = {"plan" : "premium" },
1130- metadata = None ,
1136+ metadata = { "experiment_id" : 42 } ,
11311137 )
11321138
11331139
@@ -1185,6 +1191,11 @@ def test_get_experiment_flag__variant__used_as_exposure_value(
11851191 feature_name = "checkout_v2" ,
11861192 feature_id = 1 ,
11871193 variant = "control" ,
1194+ experiment = ExperimentMetadata (
1195+ id = 42 ,
1196+ name = "New checkout CTA" ,
1197+ in_experiment = True ,
1198+ ),
11881199 )
11891200 mocker .patch .object (
11901201 flagsmith ,
@@ -1202,12 +1213,25 @@ def test_get_experiment_flag__variant__used_as_exposure_value(
12021213 identifier = "user1" ,
12031214 value = "control" ,
12041215 traits = None ,
1205- metadata = None ,
1216+ metadata = { "experiment_id" : 42 } ,
12061217 )
12071218
12081219
1209- def test_get_experiment_flag__no_variant__skips_exposure (
1210- mocker : MockerFixture , api_key : str , caplog : pytest .LogCaptureFixture
1220+ @pytest .mark .parametrize (
1221+ "experiment" ,
1222+ [
1223+ pytest .param (None , id = "no-experiment" ),
1224+ pytest .param (
1225+ ExperimentMetadata (id = 42 , name = "New checkout CTA" , in_experiment = False ),
1226+ id = "not-enrolled" ,
1227+ ),
1228+ ],
1229+ )
1230+ def test_get_experiment_flag__not_in_experiment__skips_exposure (
1231+ mocker : MockerFixture ,
1232+ api_key : str ,
1233+ caplog : pytest .LogCaptureFixture ,
1234+ experiment : typing .Optional [ExperimentMetadata ],
12111235) -> None :
12121236 # Given
12131237 config = EventProcessorConfig (events_api_url = "http://test/" )
@@ -1219,7 +1243,8 @@ def test_get_experiment_flag__no_variant__skips_exposure(
12191243 value = "blue" ,
12201244 feature_name = "checkout_v2" ,
12211245 feature_id = 1 ,
1222- variant = None ,
1246+ variant = "control" ,
1247+ experiment = experiment ,
12231248 )
12241249 mocker .patch .object (
12251250 flagsmith ,
@@ -1238,8 +1263,8 @@ def test_get_experiment_flag__no_variant__skips_exposure(
12381263 assert result is flag
12391264 mock_track .assert_not_called ()
12401265 assert (
1241- "Not sending $flag_exposure for feature checkout_v2: flag has no variant. "
1242- in caplog .messages
1266+ "Not sending $flag_exposure for feature checkout_v2:"
1267+ " identity is not in a running experiment." in caplog .messages
12431268 )
12441269
12451270
0 commit comments