Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions mergin/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -1444,3 +1444,11 @@ def send_logs(
else:
request = urllib.request.Request(url, data=payload, headers=header)
return self._do_request(request)

def create_invitation(self, workspace_id: int, email: str, workspace_role: WorkspaceRole):
"""
Create invitation to workspace for specific role
"""
params = {"email": email, "role": workspace_role.value}
ws_inv = self.post(f"v2/workspaces/{workspace_id}/invitations", params, json_headers)
return json.load(ws_inv)
17 changes: 16 additions & 1 deletion mergin/test/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
decode_token_data,
TokenError,
ServerType,
WorkspaceRole,
)
from ..client_push import push_project_async, push_project_cancel
from ..client_pull import (
Expand Down Expand Up @@ -2911,3 +2910,19 @@ def test_do_request_error_handling(mc: MerginClient):

assert e.value.http_error == 400
assert "Passwords must be at least 8 characters long." in e.value.detail


def test_creat_invitation(mc: MerginClient):
"""Test client method to create workspace invitation"""
workspace_id = next((w["id"] for w in mc.workspaces_list() if w["name"] == mc.username()))
role = WorkspaceRole.WRITER
email = "[email protected]"
inv = mc.create_invitation(workspace_id, email, role)
assert inv["email"] == email
assert inv["role"] == role.value
mc.delete(f"v1/workspace/invitation/{inv['id']}") # resolves invitation to allow another invitation to the email
role = WorkspaceRole.GUEST
inv = mc.create_invitation(workspace_id, email, role)
assert inv["email"] == email
assert "projects" not in inv
mc.delete(f"v1/workspace/invitation/{inv['id']}")