Skip to content

Commit f558091

Browse files
committed
add HG returns control_1 + exposure, even if child returns None + bump reddit-decider
1 parent 0480a63 commit f558091

File tree

3 files changed

+42
-2
lines changed

3 files changed

+42
-2
lines changed

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
-r requirements-transitive.txt
22
baseplate==2.0.0a1
33
black==21.4b2
4-
reddit-decider==1.2.15
4+
reddit-decider==1.3.0
55
flake8==3.9.1
66
mypy==0.790
77
pyramid==2.0 # required for `from baseplate.frameworks.pyramid import BaseplateRequest` which calls `import pyramid.events`

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
install_requires=[
2020
"baseplate>=2.0.0a1,<3.0",
2121
"reddit-edgecontext>=1.0.0a3,<2.0",
22-
"reddit-decider~=1.2.23",
22+
"reddit-decider~=1.3.0",
2323
"typing_extensions>=3.10.0.0,<5.0",
2424
],
2525
package_data={"reddit_experiments": ["py.typed"]},

tests/decider_tests.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

12671307
class TestDeciderGetDynamicConfig(unittest.TestCase):
12681308
def setUp(self):

0 commit comments

Comments
 (0)