22
33from featureflags .evaluations .auth_target import Target
44from featureflags .evaluations .clause import Clause
5- from featureflags .evaluations .constants import EQUAL_OPERATOR
5+ from featureflags .evaluations .constants import EQUAL_OPERATOR , STARTS_WITH_OPERATOR
66from featureflags .evaluations .distribution import Distribution
77from featureflags .evaluations .enum import FeatureState
88from featureflags .evaluations .evaluator import Evaluator
@@ -58,7 +58,6 @@ def distribution_by_email():
5858
5959@pytest .fixture
6060def feature (variations ):
61-
6261 default_serve = Serve (variation = TRUE )
6362
6463 return FeatureConfig (
@@ -75,7 +74,6 @@ def feature(variations):
7574
7675@pytest .fixture
7776def 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+
167207def test_evaluate_rules (data_provider , target ):
168208 evaluator = Evaluator (data_provider )
169209
0 commit comments