test_profilefields.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. from django.contrib.auth import get_user_model
  2. from django.test import TestCase
  3. from django.utils.six import text_type
  4. from misago.users.profilefields import ProfileFields
  5. UserModel = get_user_model()
  6. class ProfileFieldsLoadTests(TestCase):
  7. def test_no_groups(self):
  8. """profile fields util handles empty list"""
  9. profilefields = ProfileFields([])
  10. profilefields.load()
  11. self.assertFalse(profilefields.fields_dict)
  12. def test_empty_group(self):
  13. """profile fields util handles empty group"""
  14. profilefields = ProfileFields([
  15. {
  16. 'name': "Test",
  17. 'fields': [],
  18. },
  19. ])
  20. profilefields.load()
  21. self.assertFalse(profilefields.fields_dict)
  22. def test_field_defines_fieldname(self):
  23. """fields need to define fieldname"""
  24. profilefields = ProfileFields([
  25. {
  26. 'name': "Test",
  27. 'fields': [
  28. 'misago.users.tests.testfiles.profilefields.NofieldnameField',
  29. ],
  30. },
  31. ])
  32. with self.assertRaises(ValueError):
  33. profilefields.load()
  34. try:
  35. profilefields.load()
  36. except ValueError as e:
  37. error = text_type(e)
  38. self.assertIn('misago.users.tests.testfiles.profilefields.NofieldnameField', error)
  39. self.assertIn('profile field has to specify fieldname attribute', error)
  40. def test_detect_repeated_imports(self):
  41. """fields can't be specified multiple times"""
  42. profilefields = ProfileFields([
  43. {
  44. 'name': "Test",
  45. 'fields': [
  46. 'misago.users.profilefields.default.TwitterHandleField',
  47. ],
  48. },
  49. {
  50. 'name': "Other test",
  51. 'fields': [
  52. 'misago.users.profilefields.default.TwitterHandleField',
  53. ],
  54. },
  55. ])
  56. with self.assertRaises(ValueError):
  57. profilefields.load()
  58. try:
  59. profilefields.load()
  60. except ValueError as e:
  61. error = text_type(e)
  62. self.assertIn('misago.users.profilefields.default.TwitterHandleField', error)
  63. self.assertIn('profile field has been specified twice', error)
  64. def test_detect_repeated_fieldnames(self):
  65. """fields can't reuse other field's fieldnames"""
  66. profilefields = ProfileFields([
  67. {
  68. 'name': "Test",
  69. 'fields': [
  70. 'misago.users.tests.testfiles.profilefields.FieldnameField',
  71. ],
  72. },
  73. {
  74. 'name': "Other test",
  75. 'fields': [
  76. 'misago.users.tests.testfiles.profilefields.RepeatedFieldnameField',
  77. ],
  78. },
  79. ])
  80. with self.assertRaises(ValueError):
  81. profilefields.load()
  82. try:
  83. profilefields.load()
  84. except ValueError as e:
  85. error = text_type(e)
  86. self.assertIn('misago.users.tests.testfiles.profilefields.FieldnameField', error)
  87. self.assertIn('misago.users.tests.testfiles.profilefields.RepeatedFieldnameField', error)
  88. self.assertIn('field defines fieldname "hello" that is already in use by the', error)
  89. def test_field_correct_field(self):
  90. """util loads correct field"""
  91. field_path = 'misago.users.profilefields.default.RealNameField'
  92. profilefields = ProfileFields([
  93. {
  94. 'name': "Test",
  95. 'fields': [field_path],
  96. },
  97. ])
  98. profilefields.load()
  99. self.assertIn(field_path, profilefields.fields_dict)