@@ -1263,6 +1263,46 @@ def test_get_experiment(self):
12631263 self .assertEqual (experiment .stop_ts , cfg ["stop_ts" ])
12641264 self .assertEqual (experiment .owner , cfg ["owner" ])
12651265
1266+ def test_get_variant_without_expose_with_HG_as_control_1_and_child_returns_none_does_expose (self ):
1267+ self .exp_base_config ["exp_1" ].update ({"parent_hg_name" : "hg" })
1268+ # force child "exp_1" to return `None`
1269+ self .exp_base_config ["exp_1" ]["experiment" ]["variants" ] = [
1270+ {"name" : "control_1" , "size" : 0.0 , "range_end" : 0.0 , "range_start" : 0.0 },
1271+ ]
1272+
1273+ self .exp_base_config .update (self .parent_hg_config )
1274+ # force "hg" to bucket "control_1"
1275+ self .exp_base_config ["hg" ]["experiment" ]["variants" ] = [
1276+ {
1277+ "name" : "control_1" ,
1278+ "size" : 1.00 ,
1279+ "range_end" : 1.0 ,
1280+ "range_start" : 0
1281+ },
1282+ {
1283+ "name" : "holdout" ,
1284+ "size" : 0.00 ,
1285+ "range_end" : 0.0 ,
1286+ "range_start" : 0.00
1287+ }
1288+ ]
1289+
1290+ with create_temp_config_file (self .exp_base_config ) as f :
1291+ decider = self .setup_decider (f .name , self .dc )
1292+
1293+ self .assertEqual (self .event_logger .log .call_count , 0 )
1294+ variant = decider .get_variant_without_expose ("exp_1" )
1295+
1296+ assert variant == None
1297+
1298+ # exposure from control_1 of "hg"
1299+ self .assertEqual (self .event_logger .log .call_count , 1 )
1300+ event_fields = self .event_logger .log .call_args [1 ]
1301+
1302+ # `variant == None` for child but event will fire with `variant == "control_1"` for analysis
1303+ self .assert_exposure_event_fields (
1304+ experiment_name = "hg" , variant = "control_1" , event_fields = event_fields
1305+ )
12661306
12671307class TestDeciderGetDynamicConfig (unittest .TestCase ):
12681308 def setUp (self ):
0 commit comments