Skip to content

Commit 0ec31a5

Browse files
committed
Changes based on review changed tests using pytest parametrize, created more user friendly messages, added docstring
1 parent ff671d0 commit 0ec31a5

File tree

3 files changed

+29
-16
lines changed

3 files changed

+29
-16
lines changed

mergin/client.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1338,7 +1338,7 @@ def create_user(
13381338
self.check_collaborators_members_support()
13391339
role_enum = normalize_role(workspace_role, WorkspaceRole)
13401340
if role_enum is None:
1341-
raise ValueError("bad role")
1341+
raise ValueError(f'Invalid role: {workspace_role}')
13421342

13431343
params = {
13441344
"email": email,
@@ -1384,7 +1384,7 @@ def update_workspace_member(
13841384

13851385
role_enum = normalize_role(workspace_role, WorkspaceRole)
13861386
if role_enum is None:
1387-
raise ValueError("bad role")
1387+
raise ValueError(f'Invalid role: {workspace_role}')
13881388

13891389
params = {
13901390
"reset_projects_roles": reset_projects_roles,
@@ -1419,7 +1419,7 @@ def add_project_collaborator(self, project_id: str, user: str, project_role: Uni
14191419

14201420
role_enum = normalize_role(project_role, ProjectRole)
14211421
if role_enum is None:
1422-
raise ValueError("bad role")
1422+
raise ValueError(f'Invalid role: {project_role}')
14231423

14241424
params = {"role": project_role.value, "user": user}
14251425
project_collaborator = self.post(f"v2/projects/{project_id}/collaborators", params, json_headers)
@@ -1434,7 +1434,7 @@ def update_project_collaborator(self, project_id: str, user_id: int, project_rol
14341434

14351435
role_enum = normalize_role(project_role, ProjectRole)
14361436
if role_enum is None:
1437-
raise ValueError("bad role")
1437+
raise ValueError(f'Invalid role: {project_role}')
14381438
params = {"role": project_role.value}
14391439

14401440
project_collaborator = self.patch(f"v2/projects/{project_id}/collaborators/{user_id}", params, json_headers)
@@ -1522,7 +1522,7 @@ def create_invitation(self, workspace_id: int, email: str, workspace_role: Union
15221522

15231523
role_enum = normalize_role(workspace_role, WorkspaceRole)
15241524
if role_enum is None:
1525-
raise ValueError("bad role")
1525+
raise ValueError(f'Invalid role: {workspace_role}')
15261526

15271527
params = {"email": email, "role": role_enum.value}
15281528
ws_inv = self.post(f"v2/workspaces/{workspace_id}/invitations", params, json_headers)

mergin/test/test_client.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3029,14 +3029,23 @@ def test_server_type(mc):
30293029
mc.server_type()
30303030

30313031

3032-
def test_string_roles():
3033-
assert normalize_role("guest", WorkspaceRole) == WorkspaceRole.GUEST
3034-
assert normalize_role(" GuEsT ", WorkspaceRole) == WorkspaceRole.GUEST
3035-
assert normalize_role("writer", ProjectRole) == ProjectRole.WRITER
3036-
assert normalize_role(" WRITER ", ProjectRole) == ProjectRole.WRITER
3037-
3038-
assert normalize_role("guuuest", WorkspaceRole) is None
3039-
assert normalize_role("ownerr", ProjectRole) is None
3040-
assert normalize_role("", WorkspaceRole) is None
3041-
assert normalize_role(None, WorkspaceRole) is None
3042-
assert normalize_role(123, WorkspaceRole) is None
3032+
@pytest.mark.parametrize(
3033+
"value, role_enum, expected",
3034+
[
3035+
("guest", WorkspaceRole, WorkspaceRole.GUEST),
3036+
(" GuEsT ", WorkspaceRole, WorkspaceRole.GUEST),
3037+
("writer", ProjectRole, ProjectRole.WRITER),
3038+
(" WRITER ", ProjectRole, ProjectRole.WRITER),
3039+
("guuuest", WorkspaceRole, None),
3040+
("ownerr", ProjectRole, None),
3041+
("", WorkspaceRole, None),
3042+
(None, WorkspaceRole, None),
3043+
(123, WorkspaceRole, None),
3044+
],
3045+
)
3046+
def test_normalize_role_parametrized(value, role_enum, expected):
3047+
result = normalize_role(value, role_enum)
3048+
if expected is None:
3049+
assert result is None
3050+
else:
3051+
assert result == expected

mergin/utils.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,10 @@ def cleanup_tmp_dir(mp, tmp_dir: tempfile.TemporaryDirectory):
314314

315315

316316
def normalize_role(role: Union[str, Enum], enum_cls: Type[Enum]) -> Optional[Enum]:
317+
"""
318+
Takes a role as a string or an Enum member and returns the corresponding Enum member
319+
from the given enum class. Returns None if the input is invalid or no match is found.
320+
"""
317321
if isinstance(role, enum_cls):
318322
return role
319323

0 commit comments

Comments
 (0)