|
6 | 6 | import json |
7 | 7 | import os.path |
8 | 8 | import re |
| 9 | +import pytest |
9 | 10 |
|
10 | 11 | from datetime import datetime |
11 | 12 |
|
12 | 13 | from splitio.models.grammar import matchers |
| 14 | +from splitio.models import splits |
| 15 | +from splitio.models.grammar import condition |
13 | 16 | from splitio.storage import SegmentStorage |
14 | 17 | from splitio.engine.evaluator import Evaluator |
15 | | - |
| 18 | +from tests.integration import splits_json |
16 | 19 |
|
17 | 20 | class MatcherTestsBase(object): |
18 | 21 | """Abstract class to make sure we test all relevant methods.""" |
@@ -398,26 +401,12 @@ def test_from_raw(self, mocker): |
398 | 401 | def test_matcher_behaviour(self, mocker): |
399 | 402 | """Test if the matcher works properly.""" |
400 | 403 | matcher = matchers.UserDefinedSegmentMatcher(self.raw) |
401 | | - segment_storage = mocker.Mock(spec=SegmentStorage) |
402 | 404 |
|
403 | 405 | # Test that if the key if the storage wrapper finds the key in the segment, it matches. |
404 | | - segment_storage.segment_contains.return_value = True |
405 | | - assert matcher.evaluate('some_key', {}, {'segment_storage': segment_storage}) is True |
| 406 | + assert matcher.evaluate('some_key', {}, {'segment_matchers':{'some_segment': True} }) is True |
406 | 407 |
|
407 | 408 | # Test that if the key if the storage wrapper doesn't find the key in the segment, it fails. |
408 | | - segment_storage.segment_contains.return_value = False |
409 | | - assert matcher.evaluate('some_key', {}, {'segment_storage': segment_storage}) is False |
410 | | - |
411 | | - assert segment_storage.segment_contains.mock_calls == [ |
412 | | - mocker.call('some_segment', 'some_key'), |
413 | | - mocker.call('some_segment', 'some_key') |
414 | | - ] |
415 | | - |
416 | | - assert matcher.evaluate([], {}, {'segment_storage': segment_storage}) is False |
417 | | - assert matcher.evaluate({}, {}, {'segment_storage': segment_storage}) is False |
418 | | - assert matcher.evaluate(123, {}, {'segment_storage': segment_storage}) is False |
419 | | - assert matcher.evaluate(True, {}, {'segment_storage': segment_storage}) is False |
420 | | - assert matcher.evaluate(False, {}, {'segment_storage': segment_storage}) is False |
| 409 | + assert matcher.evaluate('some_key', {}, {'segment_matchers':{'some_segment': False}}) is False |
421 | 410 |
|
422 | 411 | def test_to_json(self): |
423 | 412 | """Test that the object serializes to JSON properly.""" |
@@ -784,30 +773,36 @@ def test_from_raw(self, mocker): |
784 | 773 |
|
785 | 774 | def test_matcher_behaviour(self, mocker): |
786 | 775 | """Test if the matcher works properly.""" |
787 | | - parsed = matchers.DependencyMatcher(self.raw) |
| 776 | + cond_raw = self.raw.copy() |
| 777 | + cond_raw['dependencyMatcherData']['split'] = 'SPLIT_2' |
| 778 | + parsed = matchers.DependencyMatcher(cond_raw) |
788 | 779 | evaluator = mocker.Mock(spec=Evaluator) |
789 | 780 |
|
| 781 | + cond = condition.from_raw(splits_json["splitChange1_1"]["splits"][0]['conditions'][0]) |
| 782 | + split = splits.from_raw(splits_json["splitChange1_1"]["splits"][0]) |
| 783 | + |
790 | 784 | evaluator.evaluate_feature.return_value = {'treatment': 'on'} |
791 | | - assert parsed.evaluate('test1', {}, {'bucketing_key': 'buck', 'evaluator': evaluator}) is True |
| 785 | + assert parsed.evaluate('SPLIT_2', {}, {'bucketing_key': 'buck', 'evaluator': evaluator, 'dependent_splits': [(split, [cond])]}) is True |
792 | 786 |
|
793 | 787 | evaluator.evaluate_feature.return_value = {'treatment': 'off'} |
794 | | - assert parsed.evaluate('test1', {}, {'bucketing_key': 'buck', 'evaluator': evaluator}) is False |
| 788 | +# pytest.set_trace() |
| 789 | + assert parsed.evaluate('SPLIT_2', {}, {'bucketing_key': 'buck', 'evaluator': evaluator, 'dependent_splits': [(split, [cond])]}) is False |
795 | 790 |
|
796 | 791 | assert evaluator.evaluate_feature.mock_calls == [ |
797 | | - mocker.call('some_split', 'test1', 'buck', {}), |
798 | | - mocker.call('some_split', 'test1', 'buck', {}) |
| 792 | + mocker.call(split, 'SPLIT_2', 'buck', [cond], {}), |
| 793 | + mocker.call(split, 'SPLIT_2', 'buck', [cond], {}) |
799 | 794 | ] |
800 | 795 |
|
801 | | - assert parsed.evaluate([], {}, {'bucketing_key': 'buck', 'evaluator': evaluator}) is False |
802 | | - assert parsed.evaluate({}, {}, {'bucketing_key': 'buck', 'evaluator': evaluator}) is False |
803 | | - assert parsed.evaluate(123, {}, {'bucketing_key': 'buck', 'evaluator': evaluator}) is False |
804 | | - assert parsed.evaluate(object(), {}, {'bucketing_key': 'buck', 'evaluator': evaluator}) is False |
| 796 | + assert parsed.evaluate([], {}, {'bucketing_key': 'buck', 'evaluator': evaluator, 'dependent_splits': [(split, [cond])]}) is False |
| 797 | + assert parsed.evaluate({}, {}, {'bucketing_key': 'buck', 'evaluator': evaluator, 'dependent_splits': [(split, [cond])]}) is False |
| 798 | + assert parsed.evaluate(123, {}, {'bucketing_key': 'buck', 'evaluator': evaluator, 'dependent_splits': [(split, [cond])]}) is False |
| 799 | + assert parsed.evaluate(object(), {}, {'bucketing_key': 'buck', 'evaluator': evaluator, 'dependent_splits': [(split, [cond])]}) is False |
805 | 800 |
|
806 | 801 | def test_to_json(self): |
807 | 802 | """Test that the object serializes to JSON properly.""" |
808 | 803 | as_json = matchers.DependencyMatcher(self.raw).to_json() |
809 | 804 | assert as_json['matcherType'] == 'IN_SPLIT_TREATMENT' |
810 | | - assert as_json['dependencyMatcherData']['split'] == 'some_split' |
| 805 | + assert as_json['dependencyMatcherData']['split'] == 'SPLIT_2' |
811 | 806 | assert as_json['dependencyMatcherData']['treatments'] == ['on', 'almost_on'] |
812 | 807 |
|
813 | 808 |
|
|
0 commit comments