Source code for yawf.tests.permissions

from django.test import TestCase

from yawf.permissions import C, allow_to_all, restrict_to_all

__all__ = ('PermissionsTestCase',)


[docs]class PermissionsTestCase(TestCase): @staticmethod
[docs] def call_count(func): func.call_count = 0 def wrapper(*args): func.call_count += 1 return func(*args) wrapper.func = func return wrapper
[docs] def setUp(self): self.sender_is_even = self.call_count(lambda obj, sender: sender & 1 == 0) self.obj_is_even = self.call_count(lambda obj, sender: obj & 1 == 0) self.complex_checker = ( C(self.obj_is_even, self.sender_is_even) | allow_to_all & ~C(self.sender_is_even) & allow_to_all)
[docs] def test_custom_sender(self): self.assertFalse(self.sender_is_even(None, 3)) self.assertTrue(self.sender_is_even(None, 4)) self.assertFalse(self.obj_is_even(3, None)) self.assertTrue(self.obj_is_even(4, None))
[docs] def test_inversion(self): sender_is_odd = ~C(self.sender_is_even) self.assertTrue(sender_is_odd(None, 3)) self.assertFalse(sender_is_odd(None, 4)) sender_is_even = ~C(sender_is_odd) self.assertFalse(sender_is_even(None, 3)) self.assertTrue(sender_is_even(None, 4))
[docs] def test_inversion_invariance(self): sender_is_even = C(self.sender_is_even) sender_is_odd = ~sender_is_even sender_is_even_again = ~sender_is_odd self.assertTrue(sender_is_even is sender_is_even_again)
[docs] def test_checker_expressions(self): complex_checker = self.complex_checker self.assertTrue(complex_checker(2, 2)) self.assertTrue(complex_checker(0, 1)) self.assertFalse(complex_checker(1, 2)) new_allow_to_all = allow_to_all | complex_checker self.assertTrue(new_allow_to_all(2, 2)) self.assertTrue(new_allow_to_all(0, 1)) self.assertTrue(new_allow_to_all(1, 2)) new_restrict_to_all = complex_checker & restrict_to_all self.assertFalse(new_restrict_to_all(2, 2)) self.assertFalse(new_restrict_to_all(0, 1)) self.assertFalse(new_restrict_to_all(1, 2))
[docs] def test_atomics(self): complex_checker = self.complex_checker self.assertEqual(len(set(complex_checker.get_atomical_checkers())), 3)
[docs] def test_cache(self): ''' Call complex checker three times and check times that checker functions actually been called ''' complex_checker = self.complex_checker self.assertEqual(self.sender_is_even.func.call_count, 0) self.assertEqual(self.obj_is_even.func.call_count, 0) complex_checker(0, 1) self.assertEqual(self.sender_is_even.func.call_count, 1) self.assertEqual(self.obj_is_even.func.call_count, 1) complex_checker(2, 2) self.assertEqual(self.sender_is_even.func.call_count, 2) self.assertEqual(self.obj_is_even.func.call_count, 2) complex_checker(1, 2) self.assertEqual(self.sender_is_even.func.call_count, 3) self.assertEqual(self.obj_is_even.func.call_count, 3)
[docs] def test_fill_cache(self): cache = self.complex_checker.fill_cache(2, 2) allower = allow_to_all.get_atomical_checkers().next() self.assertEqual(len(cache), 3) self.assertTrue(self.sender_is_even in cache) self.assertTrue(self.obj_is_even in cache) self.assertTrue(allower in cache)
[docs] def test_cyclic(self): or_checker = C(self.sender_is_even) | C(self.obj_is_even) atom_checkers = list(or_checker.get_atomical_checkers()) or_checker |= or_checker self.assertListEqual( atom_checkers, list(or_checker.get_atomical_checkers())) and_checker = C(self.sender_is_even, self.obj_is_even) and_checker &= and_checker atom_checkers = list(and_checker.get_atomical_checkers()) self.assertListEqual( atom_checkers, list(and_checker.get_atomical_checkers()))