Disabling membership creation if the role isn't valid for the project
parent
3d6863d6c1
commit
d246808b54
|
@ -187,6 +187,14 @@ class MembershipSerializer(ModelSerializer):
|
||||||
|
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
def validate_role(self, attrs, source):
|
||||||
|
project = attrs["project"]
|
||||||
|
role = attrs[source]
|
||||||
|
|
||||||
|
if project.roles.filter(id=role.id).count() == 0:
|
||||||
|
raise serializers.ValidationError(_("Invalid role for the project"))
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
|
@ -108,17 +108,34 @@ def test_api_invite_existing_user(client, outbox):
|
||||||
assert message.to == [user.email]
|
assert message.to == [user.email]
|
||||||
assert "Added to the project" in message.subject
|
assert "Added to the project" in message.subject
|
||||||
|
|
||||||
def test_api_create_invalid_membership(client):
|
|
||||||
"Should create the invitation linked to that user"
|
def test_api_create_invalid_membership_email_failing(client):
|
||||||
|
"Should not create the invitation linked to that user"
|
||||||
user = f.UserFactory.create()
|
user = f.UserFactory.create()
|
||||||
role = f.RoleFactory.create()
|
role = f.RoleFactory.create()
|
||||||
|
|
||||||
client.login(role.project.owner)
|
client.login(role.project.owner)
|
||||||
|
|
||||||
url = reverse("memberships-list")
|
url = reverse("memberships-list")
|
||||||
data = {"role": role.pk, "project": role.project.pk}
|
data = {"role": role.pk, "project": role.project.pk}
|
||||||
|
|
||||||
response = client.json.post(url, data)
|
response = client.json.post(url, json.dumps(data))
|
||||||
|
|
||||||
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):
|
||||||
|
"Should not create the invitation linked to that user"
|
||||||
|
user = f.UserFactory.create()
|
||||||
|
role = f.RoleFactory.create()
|
||||||
|
project = f.ProjectFactory.create()
|
||||||
|
|
||||||
|
client.login(project.owner)
|
||||||
|
|
||||||
|
url = reverse("memberships-list")
|
||||||
|
data = {"role": role.pk, "project": project.pk, "email": user.email}
|
||||||
|
|
||||||
|
response = client.json.post(url, json.dumps(data))
|
||||||
|
|
||||||
|
assert response.status_code == 400, response.data
|
||||||
|
assert response.data["role"][0] == "Invalid role for the project"
|
||||||
|
assert user.memberships.count() == 0
|
||||||
|
|
Loading…
Reference in New Issue