Merge pull request #671 from taigaio/fix/project_owners_cannot_be_no_admin
Project owners can not be no adminremotes/origin/issue/4795/notification_even_they_are_disabled
commit
b1b339630b
|
@ -190,9 +190,13 @@ class MembershipSerializer(serializers.ModelSerializer):
|
||||||
if project is None:
|
if project is None:
|
||||||
project = self.object.project
|
project = self.object.project
|
||||||
|
|
||||||
if (self.object and
|
if (self.object):
|
||||||
not services.project_has_valid_admins(project, exclude_user=self.object.user)):
|
if self.object.user.id == project.owner_id and attrs[source] != True:
|
||||||
raise serializers.ValidationError(_("In this project at least one of the users must be an active admin."))
|
raise serializers.ValidationError(_("Project owner must be admin."))
|
||||||
|
|
||||||
|
if not services.project_has_valid_admins(project, exclude_user=self.object.user):
|
||||||
|
raise serializers.ValidationError(_("In this project at least one of the users "
|
||||||
|
"must be an active admin."))
|
||||||
|
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
|
|
@ -347,6 +347,20 @@ def test_api_edit_membership(client):
|
||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
def test_api_change_owner_membership_to_no_admin_return_error(client):
|
||||||
|
project = f.ProjectFactory()
|
||||||
|
membership_owner = f.MembershipFactory(project=project, user=project.owner, is_admin=True)
|
||||||
|
membership = f.MembershipFactory(project=project, is_admin=True)
|
||||||
|
|
||||||
|
url = reverse("memberships-detail", args=[membership_owner.id])
|
||||||
|
data = {"is_admin": False}
|
||||||
|
|
||||||
|
client.login(membership.user)
|
||||||
|
response = client.json.patch(url, json.dumps(data))
|
||||||
|
|
||||||
|
assert response.status_code == 400
|
||||||
|
assert 'is_admin' in response.data
|
||||||
|
|
||||||
|
|
||||||
def test_api_delete_membership(client):
|
def test_api_delete_membership(client):
|
||||||
membership = f.MembershipFactory(is_admin=True)
|
membership = f.MembershipFactory(is_admin=True)
|
||||||
|
|
Loading…
Reference in New Issue