Merge pull request #164 from taigaio/bug/1650/error-validating-email-and-role-in-memberships

Fixing validation of email and role in memberships
remotes/origin/enhancement/email-actions
David Barragán Merino 2014-11-19 23:36:33 +01:00
commit 9b8f4cfb48
2 changed files with 41 additions and 2 deletions

View File

@ -169,7 +169,10 @@ class MembershipSerializer(ModelSerializer):
return obj.project.slug if obj and obj.project else "" return obj.project.slug if obj and obj.project else ""
def validate_email(self, attrs, source): 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] email = attrs[source]
qs = models.Membership.objects.all() qs = models.Membership.objects.all()
@ -188,7 +191,10 @@ class MembershipSerializer(ModelSerializer):
return attrs return attrs
def validate_role(self, attrs, source): 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] role = attrs[source]
if project.roles.filter(id=role.id).count() == 0: if project.roles.filter(id=role.id).count() == 0:
@ -196,6 +202,7 @@ class MembershipSerializer(ModelSerializer):
return attrs return attrs
class ProjectMembershipSerializer(ModelSerializer): class ProjectMembershipSerializer(ModelSerializer):
role_name = serializers.CharField(source='role.name', required=False) role_name = serializers.CharField(source='role.name', required=False)
full_name = serializers.CharField(source='user.get_full_name', required=False) full_name = serializers.CharField(source='user.get_full_name', required=False)

View File

@ -123,6 +123,7 @@ def test_api_create_invalid_membership_email_failing(client):
assert response.status_code == 400, response.data assert response.status_code == 400, response.data
assert user.memberships.count() == 0 assert user.memberships.count() == 0
def test_api_create_invalid_membership_role_doesnt_exist_in_the_project(client): def test_api_create_invalid_membership_role_doesnt_exist_in_the_project(client):
"Should not create the invitation linked to that user" "Should not create the invitation linked to that user"
user = f.UserFactory.create() 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.status_code == 400, response.data
assert response.data["role"][0] == "Invalid role for the project" assert response.data["role"][0] == "Invalid role for the project"
assert user.memberships.count() == 0 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