diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/forms_common.py | 17 | ||||
| -rw-r--r-- | ishtar_common/models.py | 8 | ||||
| -rw-r--r-- | ishtar_common/tests.py | 71 | 
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 = [ | 
