test_providers.py 3.7 KB

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