Skip to content

Commit 5c72f76

Browse files
authored
Merge pull request #81 from reddit/test_ulf_hg
Test HG/control_1 exposure + bump reddit-decider version
2 parents 0480a63 + b388379 commit 5c72f76

File tree

3 files changed

+36
-2
lines changed

3 files changed

+36
-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.2.24
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.2.24",
2323
"typing_extensions>=3.10.0.0,<5.0",
2424
],
2525
package_data={"reddit_experiments": ["py.typed"]},

tests/decider_tests.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,7 @@ def test_none_returned_on_variant_call_with_bad_id(self):
469469
"experiment": {
470470
"id": 1,
471471
"name": "test",
472+
"experiment_version": 1,
472473
"variants": [
473474
{"range_start": 0.0, "range_end": 0.2, "name": "active"},
474475
{"range_start": 0.2, "range_end": 0.4, "name": "control_1"},
@@ -1263,6 +1264,39 @@ def test_get_experiment(self):
12631264
self.assertEqual(experiment.stop_ts, cfg["stop_ts"])
12641265
self.assertEqual(experiment.owner, cfg["owner"])
12651266

1267+
def test_get_variant_without_expose_with_HG_as_control_1_and_child_returns_none_does_expose(
1268+
self,
1269+
):
1270+
self.exp_base_config["exp_1"].update({"parent_hg_name": "hg"})
1271+
# force child "exp_1" to return `None`
1272+
self.exp_base_config["exp_1"]["experiment"]["variants"] = [
1273+
{"name": "control_1", "size": 0.0, "range_end": 0.0, "range_start": 0.0},
1274+
]
1275+
1276+
self.exp_base_config.update(self.parent_hg_config)
1277+
# force "hg" to bucket "control_1"
1278+
self.exp_base_config["hg"]["experiment"]["variants"] = [
1279+
{"name": "control_1", "size": 1.00, "range_end": 1.0, "range_start": 0},
1280+
{"name": "holdout", "size": 0.00, "range_end": 0.0, "range_start": 0.00},
1281+
]
1282+
1283+
with create_temp_config_file(self.exp_base_config) as f:
1284+
decider = self.setup_decider(f.name, self.dc)
1285+
1286+
self.assertEqual(self.event_logger.log.call_count, 0)
1287+
variant = decider.get_variant_without_expose("exp_1")
1288+
1289+
assert variant == None
1290+
1291+
# exposure from control_1 of "hg"
1292+
self.assertEqual(self.event_logger.log.call_count, 1)
1293+
event_fields = self.event_logger.log.call_args[1]
1294+
1295+
# `variant == None` for child but event will fire with `variant == "control_1"` for analysis
1296+
self.assert_exposure_event_fields(
1297+
experiment_name="hg", variant="control_1", event_fields=event_fields
1298+
)
1299+
12661300

12671301
class TestDeciderGetDynamicConfig(unittest.TestCase):
12681302
def setUp(self):

0 commit comments

Comments
 (0)