def assert_person_case_is_under_n_years_old(self, n_years, criteria_name): rule = _create_empty_rule(self.domain, case_type='person') rule.add_criteria(CustomMatchDefinition, name=criteria_name) with _with_case(self.domain, 'person', datetime.utcnow()) as case: dob = datetime(2018, 2, 22, 12, 0) # No value for dob yet self.assertFalse(rule.criteria_match(case, dob)) # Bad value for dob case = self._set_dob(case, 'x') self.assertFalse(rule.criteria_match(case, dob)) # Set dob case = self._set_dob(case, '2018-02-22') for assert_, age in [ # Test over N years old (self.assertFalse, relativedelta(years=n_years)), (self.assertFalse, relativedelta(years=n_years, days=90)), # Test under N years old (self.assertTrue, relativedelta(years=n_years, days=-1)), (self.assertTrue, relativedelta(days=90)), ]: assert_(rule.criteria_match(case, dob + age), age) # Test wrong case type rule = _create_empty_rule(self.domain, case_type='x') rule.add_criteria(CustomMatchDefinition, name=criteria_name) with _with_case(self.domain, 'x', datetime.utcnow()) as case: case = self._set_dob(case, '2018-02-22') self.assertFalse( rule.criteria_match(case, dob + relativedelta(days=90)))
def test_child_health_case_that_is_availing_services(self): rule = _create_empty_rule(self.domain, case_type='child_health') rule.add_criteria( CustomMatchDefinition, name='ICDS_CHILD_HEALTH_CASE_CHILD_AVAILING_SERVICES') with _with_case(self.domain, 'person', datetime.utcnow()) as child: with _with_case(self.domain, 'child_health', datetime.utcnow()) as child_health: set_parent_case(self.domain, child_health, child, relationship='extension') self._set_case_props(child, {"registered_status": "registered"}) self._set_case_props(child, {"migration_status": "not_migrated"}) self.assertTrue( rule.criteria_match(child_health, datetime.utcnow())) with _with_case(self.domain, 'person', datetime.utcnow()) as child: with _with_case(self.domain, 'child_health', datetime.utcnow()) as child_health: self._set_case_props(child, {"registered_status": "not_registered"}) self._set_case_props(child, {"migration_status": "not_migrated"}) set_parent_case(self.domain, child_health, child, relationship='extension') self.assertFalse( rule.criteria_match(child_health, datetime.utcnow()))
def test_is_usercase_of_ls(self): rule = _create_empty_rule(self.domain, case_type=USERCASE_TYPE) rule.add_criteria(CustomMatchDefinition, name='ICDS_IS_USERCASE_OF_LS') with create_user_case(self.aww) as aww_uc, create_user_case( self.ls) as ls_uc: self.assertFalse(rule.criteria_match(aww_uc, datetime.utcnow())) self.assertTrue(rule.criteria_match(ls_uc, datetime.utcnow()))
def test_is_usercase_of_aww(self): rule = _create_empty_rule(self.domain, case_type=USERCASE_TYPE) rule.add_criteria(CustomMatchDefinition, name='ICDS_IS_USERCASE_OF_AWW') with _with_case(self.domain, USERCASE_TYPE, datetime.utcnow(), owner_id=self.aww.get_id) as aww_uc,\ _with_case(self.domain, USERCASE_TYPE, datetime.utcnow(), owner_id=self.ls.get_id) as ls_uc: self.assertTrue(rule.criteria_match(aww_uc, datetime.utcnow())) self.assertFalse(rule.criteria_match(ls_uc, datetime.utcnow()))
def test_person_case_is_under_6_years_old(self): rule = _create_empty_rule(self.domain, case_type='person') rule.add_criteria(CustomMatchDefinition, name='ICDS_PERSON_CASE_IS_UNDER_6_YEARS_OLD') with _with_case(self.domain, 'person', datetime.utcnow()) as case: # No value for dob yet self.assertFalse( rule.criteria_match(case, datetime(2018, 2, 22, 12, 0))) # Bad value for dob case = self._set_dob(case, 'x') self.assertFalse( rule.criteria_match(case, datetime(2018, 2, 22, 12, 0))) # Set dob case = self._set_dob(case, '2018-02-22') # Test over 6 years old self.assertFalse( rule.criteria_match(case, datetime(2024, 2, 22, 12, 0))) self.assertFalse( rule.criteria_match(case, datetime(2024, 5, 22, 12, 0))) # Test under 6 years old self.assertTrue( rule.criteria_match(case, datetime(2024, 2, 21, 12, 0))) self.assertTrue( rule.criteria_match(case, datetime(2018, 5, 22, 12, 0))) # Test wrong case type rule = _create_empty_rule(self.domain, case_type='x') rule.add_criteria(CustomMatchDefinition, name='ICDS_PERSON_CASE_IS_UNDER_6_YEARS_OLD') with _with_case(self.domain, 'x', datetime.utcnow()) as case: case = self._set_dob(case, '2018-02-22') self.assertFalse( rule.criteria_match(case, datetime(2018, 5, 22, 12, 0)))
def test_ccs_record_case_has_future_edd(self): rule = _create_empty_rule(self.domain, case_type='ccs_record') rule.add_criteria(CustomMatchDefinition, name='ICDS_CCS_RECORD_CASE_HAS_FUTURE_EDD') def check(case, edd, match): case = self._set_case_props(case, {"edd": edd}) (self.assertTrue if match else self.assertFalse)( rule.criteria_match(case, now), "%s case with edd=%s should%s match" % ( case.type, edd, "" if match else " not", ))
def test_ccs_record_case_that_is_availing_services(self): rule = _create_empty_rule(self.domain, case_type='ccs_record') rule.add_criteria(CustomMatchDefinition, name='ICDS_CCS_RECORD_CASE_AVAILING_SERVICES') def check(case, add, match): case = self._set_case_props(case, {"add": add}) (self.assertTrue if match else self.assertFalse)( rule.criteria_match(case, now), "%s case with add=%s should%s match" % ( case.type, add, "" if match else " not", ))