예제 #1
0
    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)
예제 #2
0
    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
예제 #3
0
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)