Update workspace role in the DB, add tests

This commit is contained in:
Montana 2018-08-31 16:45:19 -04:00
parent b379972446
commit 8faed87e00
4 changed files with 72 additions and 0 deletions

View File

@ -30,6 +30,21 @@ class WorkspaceUsers(object):
return WorkspaceUser(user, workspace_role) return WorkspaceUser(user, workspace_role)
@classmethod
def _get_workspace_role(cls, user, workspace_id):
try:
existing_workspace_role = (
db.session.query(WorkspaceRole)
.filter(
WorkspaceRole.user == user,
WorkspaceRole.workspace_id == workspace_id,
)
.one()
)
return existing_workspace_role
except NoResultFound:
raise NotFoundError("workspace role")
@classmethod @classmethod
def add(cls, user, workspace_id, role_name): def add(cls, user, workspace_id, role_name):
role = Roles.get(role_name) role = Roles.get(role_name)
@ -57,6 +72,16 @@ class WorkspaceUsers(object):
return WorkspaceUser(user, new_workspace_role) return WorkspaceUser(user, new_workspace_role)
@classmethod
def update_role(cls, member, workspace_id, role_name):
new_role = Roles.get(role_name)
workspace_role = WorkspaceUsers._get_workspace_role(member.user, workspace_id)
workspace_role.role = new_role
db.session.add(workspace_role)
db.session.commit()
return WorkspaceUser(member.user, workspace_role)
@classmethod @classmethod
def add_many(cls, workspace_id, workspace_user_dicts): def add_many(cls, workspace_id, workspace_user_dicts):
workspace_users = [] workspace_users = []

View File

@ -81,6 +81,15 @@ class Workspaces(object):
) )
return workspace_user return workspace_user
@classmethod
def update_member(cls, user, workspace, member, role_name):
if not Authorization.has_workspace_permission(
user, workspace, Permissions.ASSIGN_AND_UNASSIGN_ATAT_ROLE
):
raise UnauthorizedError(user, "update workspace member")
return WorkspaceUsers.update_role(member, workspace.id, role_name)
@classmethod @classmethod
def _create_workspace_role(cls, user, workspace, role_name): def _create_workspace_role(cls, user, workspace, role_name):
role = Roles.get(role_name) role = Roles.get(role_name)

View File

@ -149,6 +149,9 @@ def update_member(workspace_id, member_id):
form = UpdateMemberForm(http_request.form) form = UpdateMemberForm(http_request.form)
if form.validate(): if form.validate():
Workspaces.update_member(
g.current_user, workspace, member, form.data["workspace_role"]
)
return redirect( return redirect(
url_for("workspaces.workspace_members", workspace_id=workspace.id) url_for("workspaces.workspace_members", workspace_id=workspace.id)
) )

View File

@ -119,3 +119,38 @@ def test_need_permission_to_create_workspace_user():
with pytest.raises(UnauthorizedError): with pytest.raises(UnauthorizedError):
Workspaces.create_member(random_user, workspace, user_data) Workspaces.create_member(random_user, workspace, user_data)
def test_can_update_workspace_user_role():
owner = UserFactory.create()
workspace = Workspaces.create(RequestFactory.create(creator=owner))
user_data = {
"first_name": "New",
"last_name": "User",
"email": "new.user@mail.com",
"workspace_role": "developer",
"dod_id": "1234567890",
}
member = Workspaces.create_member(owner, workspace, user_data)
role_name = "developer"
updated_member = Workspaces.update_member(owner, workspace, member, role_name)
assert updated_member.workspace == workspace
def test_need_permission_to_update_workspace_user_role():
owner = UserFactory.create()
workspace = Workspaces.create(RequestFactory.create(creator=owner))
random_user = UserFactory.create()
user_data = {
"first_name": "New",
"last_name": "User",
"email": "new.user@mail.com",
"workspace_role": "developer",
"dod_id": "1234567890",
}
member = Workspaces.create_member(owner, workspace, user_data)
role_name = "developer"
with pytest.raises(UnauthorizedError):
Workspaces.update_member(random_user, workspace, member, role_name)