def test_loading_of_custom_rules(self): rule_system = RuleSystem() with override_settings(RCAL_CHECKS='rcal.rules.checks'): rule_system.ensure_initialized() self.assertEqual(rule_system._initialized, True) rule_system = RuleSystem() with override_settings(RCAL_CHECKS=['rcal.rules.checks'] * 2): rule_system.ensure_initialized() self.assertEqual(rule_system._initialized, True)
def setUp(self): self.rule_system = RuleSystem() self.group = Group.objects.create(name='testgroup') self.user = User.objects.create_user('test') self.user.groups.add(self.group) self.rulegroup = RuleGroup.objects.create(action=ACTION_CHANGE, name='test') self.rulegroup.groups.add(self.group) self.rule = Rule.objects.create(rule_group=self.rulegroup, parameter='', check='rcal.tests.test_func') self.test_func_args = [] self.data = Event(user=self.user, group=self.group) @self.rule_system.register('') def test_func(*args): self.test_func_args = args return True
class RuleSystemTestCase(test.TestCase): def setUp(self): self.rule_system = RuleSystem() self.group = Group.objects.create(name='testgroup') self.user = User.objects.create_user('test') self.user.groups.add(self.group) self.rulegroup = RuleGroup.objects.create(action=ACTION_CHANGE, name='test') self.rulegroup.groups.add(self.group) self.rule = Rule.objects.create(rule_group=self.rulegroup, parameter='', check='rcal.tests.test_func') self.test_func_args = [] self.data = Event(user=self.user, group=self.group) @self.rule_system.register('') def test_func(*args): self.test_func_args = args return True def test_check_and_can(self): args = ACTION_CHANGE, self.user, self.data self.assertEqual(self.rule_system.check(*args), None) self.assertEqual(self.test_func_args[:-1], args[1:]) def test_check_params(self): args = ACTION_CHANGE, self.user, self.data self.assertTrue(self.rule_system.can(*args)) # check if integer params are converted properly Rule.objects.update(parameter='1') self.rule_system.can(*args) self.assertEqual(self.test_func_args[-1], 1) # check if decimal params are converted properly Rule.objects.update(parameter='1.1') self.rule_system.can(*args) self.assertEqual(self.test_func_args[-1], decimal.Decimal('1.1')) # check if string params are handled properly Rule.objects.update(parameter='apo') self.rule_system.can(*args) self.assertEqual(self.test_func_args[-1], 'apo') def test_check_raises_validation_error(self): @self.rule_system.register('') def test_func(*args): raise ValidationError('test') args = ACTION_CHANGE, self.user, self.data self.assertRaises(ValidationError, self.rule_system.check, *args) self.assertFalse(self.rule_system.can(*args)) def test_loading_of_custom_rules(self): rule_system = RuleSystem() with override_settings(RCAL_CHECKS='rcal.rules.checks'): rule_system.ensure_initialized() self.assertEqual(rule_system._initialized, True) rule_system = RuleSystem() with override_settings(RCAL_CHECKS=['rcal.rules.checks'] * 2): rule_system.ensure_initialized() self.assertEqual(rule_system._initialized, True) def test_anonymous_user_and_no_rules(self): with translation.override('en-us'): args = [ACTION_CHANGE, AnonymousUser(), self.data] self.assertRaisesMessage(ValidationError, 'Anonymous users not supported!', lambda: self.rule_system.check(*args)) self.user.groups = [] args[1] = self.user self.data.group = Group.objects.create(name='testgroup2') self.assertRaisesMessage(ValidationError, 'No rule groups defined for this user!', lambda: self.rule_system.check(*args)) def test_null_actions(self): @self.rule_system.register('') def test_func(*args): raise ValidationError('test') args = ACTION_CHANGE, self.user, self.data self.rulegroup.action = None self.rulegroup.save() self.assertRaises(ValidationError, self.rule_system.check, *args)