test_providers.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. from types import ModuleType
  2. from django.test import TestCase
  3. from misago.acl.providers import PermissionProviders
  4. from misago.conf import settings
  5. class TestType(object):
  6. pass
  7. class PermissionProvidersTests(TestCase):
  8. def test_initialization(self):
  9. """providers manager is lazily initialized"""
  10. providers = PermissionProviders()
  11. self.assertTrue(providers._initialized is False)
  12. self.assertTrue(not providers._providers)
  13. self.assertTrue(not providers._providers_dict)
  14. # public api errors on non-loaded object
  15. with self.assertRaises(AssertionError):
  16. providers.get_obj_type_annotators(TestType())
  17. with self.assertRaises(AssertionError):
  18. providers.get_obj_type_serializers(TestType())
  19. with self.assertRaises(AssertionError):
  20. providers.list()
  21. self.assertTrue(providers._initialized is False)
  22. self.assertTrue(not providers._providers)
  23. self.assertTrue(not providers._providers_dict)
  24. # load initializes providers
  25. providers = PermissionProviders()
  26. providers.load()
  27. self.assertTrue(providers._initialized)
  28. self.assertTrue(providers._providers)
  29. self.assertTrue(providers._providers_dict)
  30. def test_list(self):
  31. """providers manager list() returns iterable of tuples"""
  32. providers = PermissionProviders()
  33. # providers.list() throws before loading providers
  34. with self.assertRaises(AssertionError):
  35. providers.list()
  36. providers.load()
  37. providers_list = providers.list()
  38. providers_setting = settings.MISAGO_ACL_EXTENSIONS
  39. self.assertEqual(len(providers_list), len(providers_setting))
  40. for extension, module in providers_list:
  41. self.assertTrue(isinstance(extension, str))
  42. self.assertEqual(type(module), ModuleType)
  43. def test_dict(self):
  44. """providers manager dict() returns dict"""
  45. providers = PermissionProviders()
  46. # providers.dict() throws before loading providers
  47. with self.assertRaises(AssertionError):
  48. providers.dict()
  49. providers.load()
  50. providers_dict = providers.dict()
  51. providers_setting = settings.MISAGO_ACL_EXTENSIONS
  52. self.assertEqual(len(providers_dict), len(providers_setting))
  53. for extension, module in providers_dict.items():
  54. self.assertTrue(isinstance(extension, str))
  55. self.assertEqual(type(module), ModuleType)
  56. def test_annotators(self):
  57. """its possible to register and get annotators"""
  58. def mock_annotator(*args):
  59. pass
  60. providers = PermissionProviders()
  61. providers.acl_annotator(TestType, mock_annotator)
  62. providers.load()
  63. # providers.acl_annotator() throws after loading providers
  64. with self.assertRaises(AssertionError):
  65. providers.acl_annotator(TestType, mock_annotator)
  66. annotators_list = providers.get_obj_type_annotators(TestType())
  67. self.assertEqual(annotators_list[0], mock_annotator)
  68. def test_serializers(self):
  69. """its possible to register and get annotators"""
  70. def mock_serializer(*args):
  71. pass
  72. providers = PermissionProviders()
  73. providers.acl_serializer(TestType, mock_serializer)
  74. providers.load()
  75. # providers.acl_serializer() throws after loading providers
  76. with self.assertRaises(AssertionError):
  77. providers.acl_serializer(TestType, mock_serializer)
  78. serializers_list = providers.get_obj_type_serializers(TestType())
  79. self.assertEqual(serializers_list[0], mock_serializer)