Skip to content

Commit 971f9ed

Browse files
authored
Merge pull request #575 from splitio/T-FME-4178-prereq-integration
Updated integrations tests
2 parents c830bc3 + de2f013 commit 971f9ed

File tree

3 files changed

+87
-6
lines changed

3 files changed

+87
-6
lines changed

tests/client/test_input_validator.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def test_get_treatment(self, mocker):
2828
conditions_mock = mocker.PropertyMock()
2929
conditions_mock.return_value = []
3030
type(split_mock).conditions = conditions_mock
31+
type(split_mock).prerequisites = []
3132
storage_mock = mocker.Mock(spec=SplitStorage)
3233
storage_mock.fetch_many.return_value = {'some_feature': split_mock}
3334
rbs_storage = mocker.Mock(spec=InMemoryRuleBasedSegmentStorage)
@@ -264,6 +265,7 @@ def test_get_treatment_with_config(self, mocker):
264265
conditions_mock = mocker.PropertyMock()
265266
conditions_mock.return_value = []
266267
type(split_mock).conditions = conditions_mock
268+
type(split_mock).prerequisites = []
267269

268270
def _configs(treatment):
269271
return '{"some": "property"}' if treatment == 'default_treatment' else None
@@ -819,6 +821,8 @@ def test_get_treatments(self, mocker):
819821
conditions_mock = mocker.PropertyMock()
820822
conditions_mock.return_value = []
821823
type(split_mock).conditions = conditions_mock
824+
type(split_mock).prerequisites = []
825+
822826
storage_mock = mocker.Mock(spec=SplitStorage)
823827
storage_mock.fetch_many.return_value = {
824828
'some_feature': split_mock
@@ -965,6 +969,7 @@ def test_get_treatments_with_config(self, mocker):
965969
conditions_mock = mocker.PropertyMock()
966970
conditions_mock.return_value = []
967971
type(split_mock).conditions = conditions_mock
972+
type(split_mock).prerequisites = []
968973

969974
storage_mock = mocker.Mock(spec=SplitStorage)
970975
storage_mock.fetch_many.return_value = {
@@ -1113,6 +1118,7 @@ def test_get_treatments_by_flag_set(self, mocker):
11131118
conditions_mock = mocker.PropertyMock()
11141119
conditions_mock.return_value = []
11151120
type(split_mock).conditions = conditions_mock
1121+
type(split_mock).prerequisites = []
11161122
storage_mock = mocker.Mock(spec=InMemorySplitStorage)
11171123
storage_mock.fetch_many.return_value = {
11181124
'some_feature': split_mock
@@ -1231,6 +1237,7 @@ def test_get_treatments_by_flag_sets(self, mocker):
12311237
conditions_mock = mocker.PropertyMock()
12321238
conditions_mock.return_value = []
12331239
type(split_mock).conditions = conditions_mock
1240+
type(split_mock).prerequisites = []
12341241
storage_mock = mocker.Mock(spec=InMemorySplitStorage)
12351242
storage_mock.fetch_many.return_value = {
12361243
'some_feature': split_mock
@@ -1358,6 +1365,7 @@ def _configs(treatment):
13581365
conditions_mock = mocker.PropertyMock()
13591366
conditions_mock.return_value = []
13601367
type(split_mock).conditions = conditions_mock
1368+
type(split_mock).prerequisites = []
13611369
storage_mock = mocker.Mock(spec=InMemorySplitStorage)
13621370
storage_mock.fetch_many.return_value = {
13631371
'some_feature': split_mock
@@ -1481,6 +1489,7 @@ def _configs(treatment):
14811489
conditions_mock = mocker.PropertyMock()
14821490
conditions_mock.return_value = []
14831491
type(split_mock).conditions = conditions_mock
1492+
type(split_mock).prerequisites = []
14841493
storage_mock = mocker.Mock(spec=InMemorySplitStorage)
14851494
storage_mock.fetch_many.return_value = {
14861495
'some_feature': split_mock
@@ -1632,6 +1641,7 @@ async def test_get_treatment(self, mocker):
16321641
conditions_mock = mocker.PropertyMock()
16331642
conditions_mock.return_value = []
16341643
type(split_mock).conditions = conditions_mock
1644+
type(split_mock).prerequisites = []
16351645
storage_mock = mocker.Mock(spec=SplitStorage)
16361646
async def fetch_many(*_):
16371647
return {
@@ -1889,6 +1899,7 @@ async def test_get_treatment_with_config(self, mocker):
18891899
conditions_mock = mocker.PropertyMock()
18901900
conditions_mock.return_value = []
18911901
type(split_mock).conditions = conditions_mock
1902+
type(split_mock).prerequisites = []
18921903

18931904
def _configs(treatment):
18941905
return '{"some": "property"}' if treatment == 'default_treatment' else None
@@ -2423,6 +2434,7 @@ async def test_get_treatments(self, mocker):
24232434
conditions_mock = mocker.PropertyMock()
24242435
conditions_mock.return_value = []
24252436
type(split_mock).conditions = conditions_mock
2437+
type(split_mock).prerequisites = []
24262438
storage_mock = mocker.Mock(spec=SplitStorage)
24272439
async def get(*_):
24282440
return split_mock
@@ -2586,6 +2598,7 @@ async def test_get_treatments_with_config(self, mocker):
25862598
conditions_mock = mocker.PropertyMock()
25872599
conditions_mock.return_value = []
25882600
type(split_mock).conditions = conditions_mock
2601+
type(split_mock).prerequisites = []
25892602

25902603
storage_mock = mocker.Mock(spec=SplitStorage)
25912604
async def get(*_):
@@ -2749,6 +2762,7 @@ async def test_get_treatments_by_flag_set(self, mocker):
27492762
conditions_mock = mocker.PropertyMock()
27502763
conditions_mock.return_value = []
27512764
type(split_mock).conditions = conditions_mock
2765+
type(split_mock).prerequisites = []
27522766
storage_mock = mocker.Mock(spec=SplitStorage)
27532767
async def get(*_):
27542768
return split_mock
@@ -2893,6 +2907,7 @@ async def test_get_treatments_by_flag_sets(self, mocker):
28932907
conditions_mock = mocker.PropertyMock()
28942908
conditions_mock.return_value = []
28952909
type(split_mock).conditions = conditions_mock
2910+
type(split_mock).prerequisites = []
28962911
storage_mock = mocker.Mock(spec=SplitStorage)
28972912
async def get(*_):
28982913
return split_mock
@@ -3048,6 +3063,7 @@ def _configs(treatment):
30483063
conditions_mock = mocker.PropertyMock()
30493064
conditions_mock.return_value = []
30503065
type(split_mock).conditions = conditions_mock
3066+
type(split_mock).prerequisites = []
30513067
storage_mock = mocker.Mock(spec=SplitStorage)
30523068
async def get(*_):
30533069
return split_mock
@@ -3195,6 +3211,7 @@ def _configs(treatment):
31953211
conditions_mock = mocker.PropertyMock()
31963212
conditions_mock.return_value = []
31973213
type(split_mock).conditions = conditions_mock
3214+
type(split_mock).prerequisites = []
31983215
storage_mock = mocker.Mock(spec=SplitStorage)
31993216
async def get(*_):
32003217
return split_mock

tests/integration/files/splitChanges.json

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323
"userDefinedSegmentMatcherData": null,
2424
"whitelistMatcherData": {
2525
"whitelist": [
26-
"whitelisted_user"
26+
"whitelisted_user",
27+
"user1234"
2728
]
2829
}
2930
}
@@ -394,7 +395,50 @@
394395
"configurations": {},
395396
"sets": [],
396397
"impressionsDisabled": false
397-
}
398+
},
399+
{
400+
"orgId": null,
401+
"environment": null,
402+
"trafficTypeId": null,
403+
"trafficTypeName": null,
404+
"name": "prereq_feature",
405+
"seed": 1699838640,
406+
"status": "ACTIVE",
407+
"killed": false,
408+
"changeNumber": 123,
409+
"defaultTreatment": "off_default",
410+
"conditions": [
411+
{
412+
"conditionType": "ROLLOUT",
413+
"matcherGroup": {
414+
"combiner": "AND",
415+
"matchers": [
416+
{
417+
"matcherType": "ALL_KEYS",
418+
"negate": false,
419+
"userDefinedSegmentMatcherData": null,
420+
"whitelistMatcherData": null
421+
}
422+
]
423+
},
424+
"partitions": [
425+
{
426+
"treatment": "on",
427+
"size": 100
428+
},
429+
{
430+
"treatment": "off",
431+
"size": 0
432+
}
433+
]
434+
}
435+
],
436+
"sets": [],
437+
"prerequisites": [
438+
{"n": "regex_test", "ts": ["on"]},
439+
{"n": "whitelist_feature", "ts": ["off"]}
440+
]
441+
}
398442
],
399443
"s": -1,
400444
"t": 1457726098069

tests/integration/test_client_e2e.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,16 @@ def _get_treatment(factory, skip_rbs=False):
171171
if not isinstance(factory._recorder._impressions_manager._strategy, StrategyNoneMode):
172172
_validate_last_impressions(client, ('rbs_feature_flag', 'mauro@split.io', 'off'))
173173

174+
# test prerequisites matcher
175+
assert client.get_treatment('abc4', 'prereq_feature') == 'on'
176+
if not isinstance(factory._recorder._impressions_manager._strategy, StrategyNoneMode):
177+
_validate_last_impressions(client, ('prereq_feature', 'abc4', 'on'))
178+
179+
# test prerequisites matcher
180+
assert client.get_treatment('user1234', 'prereq_feature') == 'off_default'
181+
if not isinstance(factory._recorder._impressions_manager._strategy, StrategyNoneMode):
182+
_validate_last_impressions(client, ('prereq_feature', 'user1234', 'off_default'))
183+
174184
def _get_treatment_with_config(factory):
175185
"""Test client.get_treatment_with_config()."""
176186
try:
@@ -460,8 +470,8 @@ def _manager_methods(factory, skip_rbs=False):
460470
assert len(manager.splits()) == 7
461471
return
462472

463-
assert len(manager.split_names()) == 8
464-
assert len(manager.splits()) == 8
473+
assert len(manager.split_names()) == 9
474+
assert len(manager.splits()) == 9
465475

466476
class InMemoryDebugIntegrationTests(object):
467477
"""Inmemory storage-based integration tests."""
@@ -4458,6 +4468,16 @@ async def _get_treatment_async(factory, skip_rbs=False):
44584468

44594469
if skip_rbs:
44604470
return
4471+
4472+
# test prerequisites matcher
4473+
assert await client.get_treatment('abc4', 'prereq_feature') == 'on'
4474+
if not isinstance(factory._recorder._impressions_manager._strategy, StrategyNoneMode):
4475+
await _validate_last_impressions_async(client, ('prereq_feature', 'abc4', 'on'))
4476+
4477+
# test prerequisites matcher
4478+
assert await client.get_treatment('user1234', 'prereq_feature') == 'off_default'
4479+
if not isinstance(factory._recorder._impressions_manager._strategy, StrategyNoneMode):
4480+
await _validate_last_impressions_async(client, ('prereq_feature', 'user1234', 'off_default'))
44614481

44624482
# test rule based segment matcher
44634483
assert await client.get_treatment('bilal@split.io', 'rbs_feature_flag', {'email': 'bilal@split.io'}) == 'on'
@@ -4758,5 +4778,5 @@ async def _manager_methods_async(factory, skip_rbs=False):
47584778
assert len(await manager.splits()) == 7
47594779
return
47604780

4761-
assert len(await manager.split_names()) == 8
4762-
assert len(await manager.splits()) == 8
4781+
assert len(await manager.split_names()) == 9
4782+
assert len(await manager.splits()) == 9

0 commit comments

Comments
 (0)