Skip to content

Commit f9c8723

Browse files
Add test case for evaluate clauses func
1 parent 5f77107 commit f9c8723

File tree

1 file changed

+43
-3
lines changed

1 file changed

+43
-3
lines changed

tests/unit/test_evaluator.py

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from featureflags.evaluations.auth_target import Target
44
from featureflags.evaluations.clause import Clause
5-
from featureflags.evaluations.constants import EQUAL_OPERATOR
5+
from featureflags.evaluations.constants import EQUAL_OPERATOR, STARTS_WITH_OPERATOR
66
from featureflags.evaluations.distribution import Distribution
77
from featureflags.evaluations.enum import FeatureState
88
from featureflags.evaluations.evaluator import Evaluator
@@ -58,7 +58,6 @@ def distribution_by_email():
5858

5959
@pytest.fixture
6060
def feature(variations):
61-
6261
default_serve = Serve(variation=TRUE)
6362

6463
return FeatureConfig(
@@ -75,7 +74,6 @@ def feature(variations):
7574

7675
@pytest.fixture
7776
def segment(target):
78-
7977
return Segment(
8078
identifier="beta",
8179
name="Beta users",
@@ -164,6 +162,48 @@ def test_evaluate_clause(data_provider, target):
164162
assert got is True
165163

166164

165+
def test_evaluate_clauses(data_provider, target):
166+
evaluator = Evaluator(data_provider)
167+
clause1 = Clause(
168+
id="",
169+
attribute="identifier",
170+
op=EQUAL_OPERATOR,
171+
values=[target.identifier]
172+
)
173+
174+
clause2 = Clause(
175+
id="",
176+
attribute="name",
177+
op=EQUAL_OPERATOR,
178+
values=[target.name]
179+
)
180+
181+
clause3 = Clause(
182+
id="",
183+
attribute="name",
184+
op=EQUAL_OPERATOR,
185+
values=["Not John"]
186+
)
187+
188+
clause4 = Clause(
189+
id="",
190+
attribute="name",
191+
op=STARTS_WITH_OPERATOR,
192+
values=["Not John"]
193+
)
194+
195+
testcases = [
196+
{"scenario": "Evaluate clauses with no clauses", "input": [], "expected": False},
197+
{"scenario": "Evaluate clauses with 2 Clauses both will match", "input": [clause1, clause2], "expected": True},
198+
{"scenario": "Evaluate clauses with 2 Clauses only 1 match", "input": [clause1, clause3], "expected": True},
199+
{"scenario": "Evaluate clauses with 2 Clauses but no match", "input": [clause3, clause4], "expected": False}
200+
]
201+
202+
for tc in testcases:
203+
actual = evaluator._evaluate_clauses(tc["input"], target)
204+
assert actual is tc["expected"]
205+
206+
167207
def test_evaluate_rules(data_provider, target):
168208
evaluator = Evaluator(data_provider)
169209

0 commit comments

Comments
 (0)