test_profilefields.py 3.6 KB

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