Fixing validation of email and role in memberships
parent
bf4b813286
commit
e2f0262918
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue