|
@@ -0,0 +1,124 @@
|
|
|
|
+from django.contrib.auth import get_user_model
|
|
|
|
+from django.test import TestCase
|
|
|
|
+from django.utils.six import text_type
|
|
|
|
+
|
|
|
|
+from misago.users.profilefields import ProfileFields
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+UserModel = get_user_model()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class ProfileFieldsLoadTests(TestCase):
|
|
|
|
+ def test_no_groups(self):
|
|
|
|
+ """profile fields util handles empty list"""
|
|
|
|
+ profilefields = ProfileFields([])
|
|
|
|
+ profilefields.load()
|
|
|
|
+
|
|
|
|
+ self.assertFalse(profilefields.fields_dict)
|
|
|
|
+
|
|
|
|
+ def test_empty_group(self):
|
|
|
|
+ """profile fields util handles empty group"""
|
|
|
|
+ profilefields = ProfileFields([
|
|
|
|
+ {
|
|
|
|
+ 'name': "Test",
|
|
|
|
+ 'fields': [],
|
|
|
|
+ },
|
|
|
|
+ ])
|
|
|
|
+
|
|
|
|
+ profilefields.load()
|
|
|
|
+
|
|
|
|
+ self.assertFalse(profilefields.fields_dict)
|
|
|
|
+
|
|
|
|
+ def test_field_defines_fieldname(self):
|
|
|
|
+ """fields need to define fieldname"""
|
|
|
|
+ profilefields = ProfileFields([
|
|
|
|
+ {
|
|
|
|
+ 'name': "Test",
|
|
|
|
+ 'fields': [
|
|
|
|
+ 'misago.users.tests.testfiles.profilefields.NofieldnameField',
|
|
|
|
+ ],
|
|
|
|
+ },
|
|
|
|
+ ])
|
|
|
|
+
|
|
|
|
+ with self.assertRaises(ValueError):
|
|
|
|
+ profilefields.load()
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ profilefields.load()
|
|
|
|
+ except ValueError as e:
|
|
|
|
+ error = text_type(e)
|
|
|
|
+
|
|
|
|
+ self.assertIn('misago.users.tests.testfiles.profilefields.NofieldnameField', error)
|
|
|
|
+ self.assertIn('profile field has to specify fieldname attribute', error)
|
|
|
|
+
|
|
|
|
+ def test_detect_repeated_imports(self):
|
|
|
|
+ """fields can't be specified multiple times"""
|
|
|
|
+ profilefields = ProfileFields([
|
|
|
|
+ {
|
|
|
|
+ 'name': "Test",
|
|
|
|
+ 'fields': [
|
|
|
|
+ 'misago.users.profilefields.default.TwitterHandleField',
|
|
|
|
+ ],
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ 'name': "Other test",
|
|
|
|
+ 'fields': [
|
|
|
|
+ 'misago.users.profilefields.default.TwitterHandleField',
|
|
|
|
+ ],
|
|
|
|
+ },
|
|
|
|
+ ])
|
|
|
|
+
|
|
|
|
+ with self.assertRaises(ValueError):
|
|
|
|
+ profilefields.load()
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ profilefields.load()
|
|
|
|
+ except ValueError as e:
|
|
|
|
+ error = text_type(e)
|
|
|
|
+
|
|
|
|
+ self.assertIn('misago.users.profilefields.default.TwitterHandleField', error)
|
|
|
|
+ self.assertIn('profile field has been specified twice', error)
|
|
|
|
+
|
|
|
|
+ def test_detect_repeated_fieldnames(self):
|
|
|
|
+ """fields can't reuse other field's fieldnames"""
|
|
|
|
+ profilefields = ProfileFields([
|
|
|
|
+ {
|
|
|
|
+ 'name': "Test",
|
|
|
|
+ 'fields': [
|
|
|
|
+ 'misago.users.tests.testfiles.profilefields.FieldnameField',
|
|
|
|
+ ],
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ 'name': "Other test",
|
|
|
|
+ 'fields': [
|
|
|
|
+ 'misago.users.tests.testfiles.profilefields.RepeatedFieldnameField',
|
|
|
|
+ ],
|
|
|
|
+ },
|
|
|
|
+ ])
|
|
|
|
+
|
|
|
|
+ with self.assertRaises(ValueError):
|
|
|
|
+ profilefields.load()
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ profilefields.load()
|
|
|
|
+ except ValueError as e:
|
|
|
|
+ error = text_type(e)
|
|
|
|
+
|
|
|
|
+ self.assertIn('misago.users.tests.testfiles.profilefields.FieldnameField', error)
|
|
|
|
+ self.assertIn('misago.users.tests.testfiles.profilefields.RepeatedFieldnameField', error)
|
|
|
|
+ self.assertIn('field defines fieldname "hello" that is already in use by the', error)
|
|
|
|
+
|
|
|
|
+ def test_field_correct_field(self):
|
|
|
|
+ """util loads correct field"""
|
|
|
|
+ field_path = 'misago.users.profilefields.default.FullNameField'
|
|
|
|
+
|
|
|
|
+ profilefields = ProfileFields([
|
|
|
|
+ {
|
|
|
|
+ 'name': "Test",
|
|
|
|
+ 'fields': [field_path],
|
|
|
|
+ },
|
|
|
|
+ ])
|
|
|
|
+
|
|
|
|
+ profilefields.load()
|
|
|
|
+
|
|
|
|
+ self.assertIn(field_path, profilefields.fields_dict)
|