Skip to content

Commit e650d74

Browse files
committed
Address review
- fix docstrings - add workspace_id parameter, fix example of order params - equality for comparing WorkspaceRole.GUEST - mock config GLOBAL roles change in tests - add test for order params - make the tests more deterministic
1 parent 855b5fb commit e650d74

File tree

4 files changed

+34
-16
lines changed

4 files changed

+34
-16
lines changed

server/mergin/sync/public_api_v2.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -393,11 +393,11 @@ paths:
393393
example: 50
394394
- name: order_params
395395
in: query
396-
description: Sorting fields e.g. "name ASC,udpdated DESC"
396+
description: Sorting fields
397397
required: false
398398
schema:
399399
type: string
400-
example: name_asc,updated_desc
400+
example: name ASC, expire DESC
401401
- name: q
402402
in: query
403403
description: Filter by name with ilike pattern

server/mergin/sync/public_api_v2_controller.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,8 @@ def upload_chunk(id: str):
403403
def list_workspace_projects(workspace_id, page, per_page, order_params=None, q=None):
404404
"""Paginate over workspace projects with optional filtering.
405405
406+
:param workspace_id: ID of the workspace to list projects from
407+
:param workspace_id: int
406408
:param page: page number
407409
:type page: int
408410
:param per_page: Number of results per page
@@ -412,7 +414,7 @@ def list_workspace_projects(workspace_id, page, per_page, order_params=None, q=N
412414
:param q: Filter by name with ilike pattern
413415
:type q: str
414416
415-
:rtype: Dict[str: List[Project], str: Integer]
417+
:rtype: Dict[str: List[Project], str: Integer, str: String, str: String]
416418
"""
417419
ws = current_app.ws_handler.get(workspace_id)
418420
if not (ws and ws.is_active):

server/mergin/sync/workspace.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def user_has_permissions(self, user, permissions):
7878
return True
7979

8080
if permissions == "guest":
81-
return role >= WorkspaceRole.GUEST
81+
return role == WorkspaceRole.GUEST
8282
elif permissions == "read":
8383
return role >= WorkspaceRole.READER
8484
elif permissions == "edit":

server/mergin/tests/test_public_api_v2.py

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -628,24 +628,41 @@ def test_list_workspace_projects(client):
628628
# name search - more results
629629
page = 1
630630
per_page = 3
631-
response = client.get(url + f"?page={page}&per_page={per_page}&q=1")
631+
response = client.get(
632+
url + f"?page={page}&per_page={per_page}&q=1&order_params=updated ASC"
633+
)
632634
assert response.json["count"] == 2
633635
assert len(response.json["projects"]) == 2
634636
assert response.json["projects"][1]["name"] == "project_10"
635637
# name search - specific result
636638
project_name = "project_4"
637639
response = client.get(url + f"?page={page}&per_page={per_page}&q={project_name}")
638640
assert response.json["projects"][0]["name"] == project_name
641+
# sorting
642+
response = client.get(
643+
url + f"?page={page}&per_page={per_page}&q=1&order_params=created DESC"
644+
)
645+
assert response.json["projects"][0]["name"] == "project_10"
639646

640647
# no permissions to workspace
641648
user2 = add_user("user", "password")
642649
login(client, user2.username, "password")
643-
Configuration.GLOBAL_READ = 0
644-
Configuration.GLOBAL_WRITE = 0
645-
Configuration.GLOBAL_ADMIN = 0
646-
resp = client.get(url + "?page=1&per_page=10")
647-
assert resp.status_code == 200
648-
assert resp.json["count"] == 0
650+
with patch.object(
651+
Configuration,
652+
"GLOBAL_READ",
653+
0,
654+
), patch.object(
655+
Configuration,
656+
"GLOBAL_WRITE",
657+
0,
658+
), patch.object(
659+
Configuration,
660+
"GLOBAL_ADMIN",
661+
0,
662+
):
663+
resp = client.get(url + "?page=1&per_page=10")
664+
assert resp.status_code == 200
665+
assert resp.json["count"] == 0
649666

650667
# no existing workspace
651668
assert (
@@ -668,11 +685,10 @@ def test_list_workspace_projects(client):
668685
assert resp.json["count"] == 0
669686

670687
# add user as a reader
671-
Configuration.GLOBAL_READ = 1
672-
db.session.commit()
673-
resp = client.get(url + "?page=1&per_page=10")
674-
assert p.name not in [proj["name"] for proj in resp.json["projects"]]
675-
assert resp.json["count"] == 10
688+
with patch.object(Configuration, "GLOBAL_READ", 1):
689+
resp = client.get(url + "?page=1&per_page=10")
690+
assert p.name not in [proj["name"] for proj in resp.json["projects"]]
691+
assert resp.json["count"] == 10
676692

677693
# logout
678694
logout(client)

0 commit comments

Comments
 (0)