summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar_common/forms_common.py17
-rw-r--r--ishtar_common/models.py8
-rw-r--r--ishtar_common/tests.py71
3 files changed, 96 insertions, 0 deletions
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index edea0cde2..92c4c5797 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -845,6 +845,23 @@ class ProfilePersonForm(forms.Form):
(current_profile.profile_type.pk, current_profile.profile_type.name)
]
+ def clean(self):
+ data = self.cleaned_data
+ q = models.UserProfile.objects.filter(
+ person__ishtaruser=self.user.ishtaruser,
+ pk=data['current_profile'])
+ if not q.count():
+ return data
+ profile = q.all()[0]
+
+ name = data.get('name', '')
+ if models.UserProfile.objects.filter(
+ person__ishtaruser=self.user.ishtaruser,
+ name=name).exclude(pk=profile.pk).count():
+ raise forms.ValidationError(
+ _(u"A profile with the same name exists."))
+ return data
+
def save(self, session):
q = models.UserProfile.objects.filter(
person__ishtaruser=self.user.ishtaruser,
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index b31338a2d..f3fda4e60 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -2830,8 +2830,16 @@ class UserProfile(models.Model):
areas = [area for area in self.areas.all()]
new_item = self
new_item.pk = None
+ name = self.name
for key in kwargs:
+ if key == 'name':
+ name = kwargs[key]
setattr(new_item, key, kwargs[key])
+ while UserProfile.objects.filter(
+ name=name, profile_type=self.profile_type,
+ person=self.person).count():
+ name += unicode(_(u" - duplicate"))
+ new_item.name = name
new_item.save()
for area in areas:
new_item.areas.add(area)
diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py
index fe88cea51..b28dde5ec 100644
--- a/ishtar_common/tests.py
+++ b/ishtar_common/tests.py
@@ -432,6 +432,77 @@ class AccessControlTest(TestCase):
self.assertNotIn(admin, ishtar_user.person.person_types.all())
+class UserProfileTest(TestCase):
+ fixtures = OPERATION_FIXTURES
+
+ def setUp(self):
+ self.password = 'mypassword'
+ self.username = "myuser"
+ self.user = User.objects.create_superuser(
+ self.username, 'myemail@test.com', self.password)
+ self.user.set_password(self.password)
+ self.user.save()
+ self.client = Client()
+ self.client.login(username=self.username, password=self.password)
+
+ def test_profile_edit(self):
+ base_url = '/profile/'
+ base_profile = self.user.ishtaruser.current_profile
+ response = self.client.get(base_url)
+ self.assertEqual(response.status_code, 200)
+ response = self.client.post(
+ base_url, {'name': "New name", "current_profile": base_profile.pk})
+ self.assertEqual(response.status_code, 302)
+ base_profile = models.UserProfile.objects.get(pk=base_profile.pk)
+ self.assertEqual(
+ base_profile.name,
+ u"New name"
+ )
+
+ self.client.post(
+ base_url, {'delete_profile': True, 'name': "New name",
+ "current_profile": base_profile.pk})
+ self.assertEqual(response.status_code, 302)
+ # cannot delete a profile it is the last of his kind
+ self.assertEqual(
+ self.user.ishtaruser.person.profiles.count(),
+ 1
+ )
+
+ self.client.post(
+ base_url, {'name': "New name", 'duplicate_profile': True,
+ "current_profile": base_profile.pk})
+ self.assertEqual(response.status_code, 302)
+ # duplicate
+ self.assertEqual(
+ self.user.ishtaruser.person.profiles.count(),
+ 2
+ )
+ # new current profile is the duplicated
+ new_profile = self.user.ishtaruser.current_profile
+ base_profile = models.UserProfile.objects.get(pk=base_profile.pk)
+ self.assertNotEqual(base_profile.pk,
+ new_profile.pk)
+ self.assertNotEqual(base_profile.name,
+ new_profile.name)
+
+ response = self.client.post(
+ base_url, {'name': "New name", "current_profile": new_profile.pk})
+ self.assertIn(
+ "errorlist nonfield", response.content,
+ msg="An error should be isplayed as this name is already taken"
+ )
+
+ # the deletion can now occurs
+ self.client.post(
+ base_url, {'delete_profile': True,
+ "current_profile": base_profile.pk})
+ self.assertEqual(
+ self.user.ishtaruser.person.profiles.count(),
+ 1
+ )
+
+
class AdminGenTypeTest(TestCase):
fixtures = OPERATION_FIXTURES
gen_models = [