test_profilefields.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. from django.contrib.auth import get_user_model
  2. from django.test import TestCase
  3. from misago.users.profilefields import ProfileFields
  4. User = 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([{"name": "Test", "fields": []}])
  14. profilefields.load()
  15. self.assertFalse(profilefields.fields_dict)
  16. def test_field_defines_fieldname(self):
  17. """fields need to define fieldname"""
  18. profilefields = ProfileFields(
  19. [
  20. {
  21. "name": "Test",
  22. "fields": [
  23. "misago.users.tests.testfiles.profilefields.NofieldnameField"
  24. ],
  25. }
  26. ]
  27. )
  28. with self.assertRaises(ValueError):
  29. profilefields.load()
  30. try:
  31. profilefields.load()
  32. except ValueError as e:
  33. error = str(e)
  34. self.assertIn(
  35. "misago.users.tests.testfiles.profilefields.NofieldnameField", error
  36. )
  37. self.assertIn("profile field has to specify fieldname attribute", error)
  38. def test_detect_repeated_imports(self):
  39. """fields can't be specified multiple times"""
  40. profilefields = ProfileFields(
  41. [
  42. {
  43. "name": "Test",
  44. "fields": ["misago.users.profilefields.default.TwitterHandleField"],
  45. },
  46. {
  47. "name": "Other test",
  48. "fields": ["misago.users.profilefields.default.TwitterHandleField"],
  49. },
  50. ]
  51. )
  52. with self.assertRaises(ValueError):
  53. profilefields.load()
  54. try:
  55. profilefields.load()
  56. except ValueError as e:
  57. error = str(e)
  58. self.assertIn(
  59. "misago.users.profilefields.default.TwitterHandleField", error
  60. )
  61. self.assertIn("profile field has been specified twice", error)
  62. def test_detect_repeated_fieldnames(self):
  63. """fields can't reuse other field's fieldnames"""
  64. profilefields = ProfileFields(
  65. [
  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. )
  80. with self.assertRaises(ValueError):
  81. profilefields.load()
  82. try:
  83. profilefields.load()
  84. except ValueError as e:
  85. error = str(e)
  86. self.assertIn(
  87. "misago.users.tests.testfiles.profilefields.FieldnameField", error
  88. )
  89. self.assertIn(
  90. "misago.users.tests.testfiles.profilefields.RepeatedFieldnameField",
  91. error,
  92. )
  93. self.assertIn(
  94. 'field defines fieldname "hello" that is already in use by the', error
  95. )
  96. def test_field_correct_field(self):
  97. """util loads correct field"""
  98. field_path = "misago.users.profilefields.default.RealNameField"
  99. profilefields = ProfileFields([{"name": "Test", "fields": [field_path]}])
  100. profilefields.load()
  101. self.assertIn(field_path, profilefields.fields_dict)