@@ -235,17 +235,31 @@ def test_starts_with_rule():
235235 rule = IterationRuleFactory .build (operator = RuleOperator .starts_with , comparator = "YY66" )
236236 assert EligibilityService .evaluate_rule (rule , "YY66" )
237237 assert EligibilityService .evaluate_rule (rule , "YY66095" )
238-
239238 assert not EligibilityService .evaluate_rule (rule , "BB11" )
240239 assert not EligibilityService .evaluate_rule (rule , "BYY66095" )
241240 assert not EligibilityService .evaluate_rule (rule , " YY66" )
242-
243241 assert not EligibilityService .evaluate_rule (rule , None )
244242 assert not EligibilityService .evaluate_rule (rule , "" )
245243
246244
245+ def test_not_starts_with_rule ():
246+ rule = IterationRuleFactory .build (operator = RuleOperator .not_starts_with , comparator = "YY66" )
247+ assert not EligibilityService .evaluate_rule (rule , "YY66" )
248+ assert not EligibilityService .evaluate_rule (rule , "YY66095" )
249+ assert EligibilityService .evaluate_rule (rule , "BB11" )
250+ assert EligibilityService .evaluate_rule (rule , "BYY66095" )
251+ assert EligibilityService .evaluate_rule (rule , " YY66" )
252+ assert EligibilityService .evaluate_rule (rule , None )
253+ assert EligibilityService .evaluate_rule (rule , "" )
254+
255+
247256def test_ends_with_rule ():
248- pass
257+ rule = IterationRuleFactory .build (operator = RuleOperator .ends_with , comparator = "2BA" )
258+ assert EligibilityService .evaluate_rule (rule , "2BA" )
259+ assert EligibilityService .evaluate_rule (rule , "002BA" )
260+ assert not EligibilityService .evaluate_rule (rule , None )
261+ assert not EligibilityService .evaluate_rule (rule , "" )
262+ assert not EligibilityService .evaluate_rule (rule , "2BA00" )
249263
250264
251265def test_in_rule ():
@@ -264,44 +278,139 @@ def test_not_in_rule():
264278 assert not EligibilityService .evaluate_rule (rule , "QH8" )
265279
266280
267- def test_is_null_rule ():
268- pass
281+ def test_member_of_rule ():
282+ rule = IterationRuleFactory .build (operator = RuleOperator .member_of , comparator = "cohort1" )
283+ assert EligibilityService .evaluate_rule (rule , "cohort1,cohort2" )
284+ assert not EligibilityService .evaluate_rule (rule , None )
285+ assert not EligibilityService .evaluate_rule (rule , "" )
286+ assert not EligibilityService .evaluate_rule (rule , "cohort3" )
269287
270288
271- def test_is_not_null_rule ():
272- pass
289+ def test_not_member_of_rule ():
290+ rule = IterationRuleFactory .build (operator = RuleOperator .not_member_of , comparator = "cohort1" )
291+ assert not EligibilityService .evaluate_rule (rule , "cohort1,cohort2" )
292+ assert EligibilityService .evaluate_rule (rule , None )
293+ assert EligibilityService .evaluate_rule (rule , "" )
294+ assert EligibilityService .evaluate_rule (rule , "cohort3" )
273295
274296
297+ def test_is_null_rule ():
298+ # Check email flag is null
299+ rule = IterationRuleFactory .build (operator = RuleOperator .is_null )
300+ assert EligibilityService .evaluate_rule (rule , "" )
301+ assert EligibilityService .evaluate_rule (rule , None )
302+ assert not EligibilityService .evaluate_rule (rule , "email_flag" )
303+ assert not EligibilityService .evaluate_rule (rule , 42 )
304+
275305def test_is_not_null_rule ():
276- pass
306+ # Check email flag is not null
307+ rule = IterationRuleFactory .build (operator = RuleOperator .is_not_null )
308+ assert not EligibilityService .evaluate_rule (rule , "" )
309+ assert not EligibilityService .evaluate_rule (rule , None )
310+ assert EligibilityService .evaluate_rule (rule , "email_flag" )
311+ assert EligibilityService .evaluate_rule (rule , 42 )
277312
278313
279314def test_between_rule ():
280- pass
315+ # check if numerical value is between two give values (inclusive)
316+ rule = IterationRuleFactory .build (operator = RuleOperator .between , comparator = "1,3" )
317+ assert not EligibilityService .evaluate_rule (rule , "0" )
318+ assert EligibilityService .evaluate_rule (rule , "1" )
319+ assert EligibilityService .evaluate_rule (rule , "2" )
320+ assert EligibilityService .evaluate_rule (rule , "3" )
321+ assert not EligibilityService .evaluate_rule (rule , "4" )
322+ assert not EligibilityService .evaluate_rule (rule , "" )
323+ assert not EligibilityService .evaluate_rule (rule , None )
324+
325+ rule = IterationRuleFactory .build (operator = RuleOperator .between , comparator = "3,1" )
326+ assert not EligibilityService .evaluate_rule (rule , "0" )
327+ assert EligibilityService .evaluate_rule (rule , "1" )
328+ assert EligibilityService .evaluate_rule (rule , "2" )
329+ assert EligibilityService .evaluate_rule (rule , "3" )
330+ assert not EligibilityService .evaluate_rule (rule , "4" )
331+ assert not EligibilityService .evaluate_rule (rule , "" )
332+ assert not EligibilityService .evaluate_rule (rule , None )
333+
334+ rule = IterationRuleFactory .build (operator = RuleOperator .between , comparator = "3,3" )
335+ assert not EligibilityService .evaluate_rule (rule , "2" )
336+ assert EligibilityService .evaluate_rule (rule , "3" )
337+ assert not EligibilityService .evaluate_rule (rule , "4" )
338+ assert not EligibilityService .evaluate_rule (rule , "" )
339+ assert not EligibilityService .evaluate_rule (rule , None )
340+
341+ rule = IterationRuleFactory .build (operator = RuleOperator .between , comparator = "20100302,20100304" )
342+ assert not EligibilityService .evaluate_rule (rule , "20100301" )
343+ assert EligibilityService .evaluate_rule (rule , "20100302" )
344+ assert EligibilityService .evaluate_rule (rule , "20100303" )
345+ assert EligibilityService .evaluate_rule (rule , "20100304" )
346+ assert not EligibilityService .evaluate_rule (rule , "20100305" )
347+ assert not EligibilityService .evaluate_rule (rule , "" )
348+ assert not EligibilityService .evaluate_rule (rule , None )
349+
281350
282351
283352def test_not_between_rule ():
284- pass
353+ # check if numerical value is NOT between two give values (inclusive)
354+ rule = IterationRuleFactory .build (operator = RuleOperator .not_between , comparator = "1,3" )
355+ assert EligibilityService .evaluate_rule (rule , "0" )
356+ assert not EligibilityService .evaluate_rule (rule , "1" )
357+ assert not EligibilityService .evaluate_rule (rule , "2" )
358+ assert not EligibilityService .evaluate_rule (rule , "3" )
359+ assert EligibilityService .evaluate_rule (rule , "4" )
360+ assert not EligibilityService .evaluate_rule (rule , "" )
361+ assert not EligibilityService .evaluate_rule (rule , None )
285362
363+ rule = IterationRuleFactory .build (operator = RuleOperator .not_between , comparator = "3,1" )
364+ assert EligibilityService .evaluate_rule (rule , "0" )
365+ assert not EligibilityService .evaluate_rule (rule , "1" )
366+ assert not EligibilityService .evaluate_rule (rule , "2" )
367+ assert not EligibilityService .evaluate_rule (rule , "3" )
368+ assert EligibilityService .evaluate_rule (rule , "4" )
369+ assert not EligibilityService .evaluate_rule (rule , "" )
370+ assert not EligibilityService .evaluate_rule (rule , None )
286371
287- def test_is_empty_rule ():
288- pass
372+ rule = IterationRuleFactory .build (operator = RuleOperator .not_between , comparator = "3,3" )
373+ assert EligibilityService .evaluate_rule (rule , "2" )
374+ assert not EligibilityService .evaluate_rule (rule , "3" )
375+ assert EligibilityService .evaluate_rule (rule , "4" )
376+ assert not EligibilityService .evaluate_rule (rule , "" )
377+ assert not EligibilityService .evaluate_rule (rule , None )
289378
290379
380+ def test_is_empty_rule ():
381+ pass # clarify definition
382+
291383def test_is_not_empty_rule ():
292- pass
384+ pass # clarify definition
293385
294386
295387def test_is_true_rule ():
296- pass
388+ rule = IterationRuleFactory .build (operator = RuleOperator .is_true )
389+ assert EligibilityService .evaluate_rule (rule , True )
390+ assert not EligibilityService .evaluate_rule (rule , False )
391+ assert not EligibilityService .evaluate_rule (rule , "" )
392+ assert not EligibilityService .evaluate_rule (rule , None )
393+ assert not EligibilityService .evaluate_rule (rule , "True" )
297394
298395
299396def test_is_false_rule ():
300- pass
397+ rule = IterationRuleFactory .build (operator = RuleOperator .is_false )
398+ assert EligibilityService .evaluate_rule (rule , False )
399+ assert not EligibilityService .evaluate_rule (rule , True )
400+ assert not EligibilityService .evaluate_rule (rule , "" )
401+ assert not EligibilityService .evaluate_rule (rule , None )
402+ assert not EligibilityService .evaluate_rule (rule , "False" )
301403
302404
303405def test_day_lte_rule ():
304- pass
406+ today = datetime .today () # noqa: DTZ002
407+ days_offset = 2
408+ future_date = today + relativedelta (days = days_offset - 3 )
409+ attribute_value = future_date .strftime ("%Y%m%d" )
410+ rule = IterationRuleFactory .build (operator = RuleOperator .day_lte , comparator = str (days_offset ))
411+ assert EligibilityService .evaluate_rule (rule , attribute_value )
412+ assert not EligibilityService .evaluate_rule (rule , "" )
413+ assert not EligibilityService .evaluate_rule (rule , None )
305414
306415
307416def test_week_lte_rule ():
@@ -406,22 +515,6 @@ def test_year_gt_rule_same_date():
406515 assert not EligibilityService .evaluate_rule (rule , None )
407516
408517
409- def test_member_of_rule ():
410- rule = IterationRuleFactory .build (operator = RuleOperator .member_of , comparator = "cohort1" )
411- assert EligibilityService .evaluate_rule (rule , "cohort1,cohort2" )
412- assert not EligibilityService .evaluate_rule (rule , None )
413- assert not EligibilityService .evaluate_rule (rule , "" )
414- assert not EligibilityService .evaluate_rule (rule , "cohort3" )
415-
416-
417- def test_not_member_of_rule ():
418- rule = IterationRuleFactory .build (operator = RuleOperator .not_member_of , comparator = "cohort1" )
419- assert not EligibilityService .evaluate_rule (rule , "cohort1,cohort2" )
420- assert EligibilityService .evaluate_rule (rule , None )
421- assert EligibilityService .evaluate_rule (rule , "" )
422- assert EligibilityService .evaluate_rule (rule , "cohort3" )
423-
424-
425518@pytest .mark .skip (reason = "Skipping this test since all the operators are implemented" )
426519def test_unimplemented_operator ():
427520 rule = IterationRuleFactory .build (operator = RuleOperator .member_of , comparator = "something" )
0 commit comments