"""evaluator tests""" from django.core.exceptions import ValidationError from django.test import TestCase from guardian.shortcuts import get_anonymous_user from passbook.policies.expression.evaluator import Evaluator from passbook.policies.types import PolicyRequest class TestEvaluator(TestCase): """Evaluator tests""" def setUp(self): self.request = PolicyRequest(user=get_anonymous_user()) def test_valid(self): """test simple value expression""" template = "True" evaluator = Evaluator() evaluator.set_policy_request(self.request) self.assertEqual(evaluator.evaluate(template).passing, True) def test_messages(self): """test expression with message return""" template = '{% do pb_message("some message") %}False' evaluator = Evaluator() evaluator.set_policy_request(self.request) result = evaluator.evaluate(template) self.assertEqual(result.passing, False) self.assertEqual(result.messages, ("some message",)) def test_invalid_syntax(self): """test invalid syntax""" template = "{%" evaluator = Evaluator() evaluator.set_policy_request(self.request) result = evaluator.evaluate(template) self.assertEqual(result.passing, False) self.assertEqual(result.messages, ("tag name expected",)) def test_undefined(self): """test undefined result""" template = "{{ foo.bar }}" evaluator = Evaluator() evaluator.set_policy_request(self.request) result = evaluator.evaluate(template) self.assertEqual(result.passing, False) self.assertEqual(result.messages, ("'foo' is undefined",)) def test_validate(self): """test validate""" template = "True" evaluator = Evaluator() result = evaluator.validate(template) self.assertEqual(result, True) def test_validate_invalid(self): """test validate""" template = "{%" evaluator = Evaluator() with self.assertRaises(ValidationError): evaluator.validate(template)