From e2f02629188666fbdce377e5705cfd502fb86b13 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Wed, 19 Nov 2014 22:53:37 +0100 Subject: [PATCH] Fixing validation of email and role in memberships --- taiga/projects/serializers.py | 11 +++++++-- tests/integration/test_memberships.py | 32 +++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/taiga/projects/serializers.py b/taiga/projects/serializers.py index 8c628c29..cbd2f2b9 100644 --- a/taiga/projects/serializers.py +++ b/taiga/projects/serializers.py @@ -169,7 +169,10 @@ class MembershipSerializer(ModelSerializer): return obj.project.slug if obj and obj.project else "" def validate_email(self, attrs, source): - project = attrs["project"] + project = attrs.get("project", None) + if project is None: + project = self.object.project + email = attrs[source] qs = models.Membership.objects.all() @@ -188,7 +191,10 @@ class MembershipSerializer(ModelSerializer): return attrs def validate_role(self, attrs, source): - project = attrs["project"] + project = attrs.get("project", None) + if project is None: + project = self.object.project + role = attrs[source] if project.roles.filter(id=role.id).count() == 0: @@ -196,6 +202,7 @@ class MembershipSerializer(ModelSerializer): return attrs + class ProjectMembershipSerializer(ModelSerializer): role_name = serializers.CharField(source='role.name', required=False) full_name = serializers.CharField(source='user.get_full_name', required=False) diff --git a/tests/integration/test_memberships.py b/tests/integration/test_memberships.py index 01dcbd72..c77aff75 100644 --- a/tests/integration/test_memberships.py +++ b/tests/integration/test_memberships.py @@ -123,6 +123,7 @@ def test_api_create_invalid_membership_email_failing(client): assert response.status_code == 400, response.data assert user.memberships.count() == 0 + def test_api_create_invalid_membership_role_doesnt_exist_in_the_project(client): "Should not create the invitation linked to that user" user = f.UserFactory.create() @@ -139,3 +140,34 @@ def test_api_create_invalid_membership_role_doesnt_exist_in_the_project(client): assert response.status_code == 400, response.data assert response.data["role"][0] == "Invalid role for the project" assert user.memberships.count() == 0 + + +def test_api_create_membership(client): + user = f.UserFactory() + role = f.RoleFactory.create() + client.login(role.project.owner) + url = reverse("memberships-list") + data = {"role": role.pk, "project": role.project.pk, "email": user.email} + response = client.json.post(url, json.dumps(data)) + + assert response.status_code == 201 + assert response.data["user_email"] == user.email + + +def test_api_edit_membership(client): + membership = f.MembershipFactory() + client.login(membership.project.owner) + url = reverse("memberships-detail", args=[membership.id]) + data = {"email": "new@email.com"} + response = client.json.patch(url, json.dumps(data)) + + assert response.status_code == 200 + + +def test_api_delete_membership(client): + membership = f.MembershipFactory() + client.login(membership.project.owner) + url = reverse("memberships-detail", args=[membership.id]) + response = client.json.delete(url) + + assert response.status_code == 204