11"""Evaluator tests module."""
22import logging
33import pytest
4+ import copy
45
56from splitio .models .splits import Split , Status
67from splitio .models .grammar .condition import Condition , ConditionType
@@ -243,7 +244,7 @@ def test_evaluate_treatment_with_rule_based_segment(self, mocker):
243244 ctx = EvaluationContext (flags = {'some' : mocked_split }, segment_memberships = set (), segment_rbs_memberships = {'sample_rule_based_segment' : True }, segment_rbs_conditions = {'sample_rule_based_segment' : []})
244245 result = e .eval_with_context ('bilal@split.io' , 'bilal@split.io' , 'some' , {'email' : 'bilal@split.io' }, ctx )
245246 assert result ['treatment' ] == 'off'
246-
247+
247248class EvaluationDataFactoryTests (object ):
248249 """Test evaluation factory class."""
249250
@@ -254,37 +255,75 @@ def test_get_context(self):
254255 segment_storage = InMemorySegmentStorage ()
255256 rbs_segment_storage = InMemoryRuleBasedSegmentStorage ()
256257 flag_storage .update ([mocked_split ], [], - 1 )
257- rbs = rule_based_segments .from_raw (rbs_raw )
258+ rbs = copy .deepcopy (rbs_raw )
259+ rbs ['conditions' ].append (
260+ {"matcherGroup" : {
261+ "combiner" : "AND" ,
262+ "matchers" : [
263+ {
264+ "matcherType" : "IN_SEGMENT" ,
265+ "negate" : False ,
266+ "userDefinedSegmentMatcherData" : {
267+ "segmentName" : "employees"
268+ },
269+ "whitelistMatcherData" : None
270+ }
271+ ]
272+ },
273+ })
274+ rbs = rule_based_segments .from_raw (rbs )
258275 rbs_segment_storage .update ([rbs ], [], - 1 )
259276
260277 eval_factory = EvaluationDataFactory (flag_storage , segment_storage , rbs_segment_storage )
261278 ec = eval_factory .context_for ('bilal@split.io' , ['some' ])
262279 assert ec .segment_rbs_conditions == {'sample_rule_based_segment' : rbs .conditions }
263280 assert ec .segment_rbs_memberships == {'sample_rule_based_segment' : False }
281+ assert ec .segment_memberships == {"employees" : False }
264282
283+ segment_storage .update ("employees" , {"mauro@split.io" }, {}, 1234 )
265284 ec = eval_factory .context_for ('mauro@split.io' , ['some' ])
266285 assert ec .segment_rbs_conditions == {}
267286 assert ec .segment_rbs_memberships == {'sample_rule_based_segment' : True }
268-
287+ assert ec .segment_memberships == {"employees" : True }
288+
269289class EvaluationDataFactoryAsyncTests (object ):
270290 """Test evaluation factory class."""
271291
272292 @pytest .mark .asyncio
273293 async def test_get_context (self ):
274294 """Test context."""
275- mocked_split = Split ('some' , 12345 , False , 'off' , 'user' , Status .ACTIVE , 12 , split_conditions , 1.2 , 100 , 1234 , {}, None , False )
295+ mocked_split = Split ('some' , 123 , False , 'off' , 'user' , Status .ACTIVE , 12 , split_conditions , 1.2 , 100 , 1234 , {}, None , False )
276296 flag_storage = InMemorySplitStorageAsync ([])
277297 segment_storage = InMemorySegmentStorageAsync ()
278298 rbs_segment_storage = InMemoryRuleBasedSegmentStorageAsync ()
279299 await flag_storage .update ([mocked_split ], [], - 1 )
280- rbs = rule_based_segments .from_raw (rbs_raw )
300+ rbs = copy .deepcopy (rbs_raw )
301+ rbs ['conditions' ].append (
302+ {"matcherGroup" : {
303+ "combiner" : "AND" ,
304+ "matchers" : [
305+ {
306+ "matcherType" : "IN_SEGMENT" ,
307+ "negate" : False ,
308+ "userDefinedSegmentMatcherData" : {
309+ "segmentName" : "employees"
310+ },
311+ "whitelistMatcherData" : None
312+ }
313+ ]
314+ },
315+ })
316+ rbs = rule_based_segments .from_raw (rbs )
281317 await rbs_segment_storage .update ([rbs ], [], - 1 )
282318
283319 eval_factory = AsyncEvaluationDataFactory (flag_storage , segment_storage , rbs_segment_storage )
284320 ec = await eval_factory .context_for ('bilal@split.io' , ['some' ])
285321 assert ec .segment_rbs_conditions == {'sample_rule_based_segment' : rbs .conditions }
286322 assert ec .segment_rbs_memberships == {'sample_rule_based_segment' : False }
323+ assert ec .segment_memberships == {"employees" : False }
287324
325+ await segment_storage .update ("employees" , {"mauro@split.io" }, {}, 1234 )
288326 ec = await eval_factory .context_for ('mauro@split.io' , ['some' ])
289327 assert ec .segment_rbs_conditions == {}
290328 assert ec .segment_rbs_memberships == {'sample_rule_based_segment' : True }
329+ assert ec .segment_memberships == {"employees" : True }
0 commit comments