Skip to content

Commit 200a4b1

Browse files
committed
✨ Refactor ProjectJobsRepository to streamline database column selection and enhance test coverage for job-marked projects
1 parent 953000c commit 200a4b1

File tree

2 files changed

+39
-12
lines changed

2 files changed

+39
-12
lines changed

services/web/server/src/simcore_service_webserver/projects/_jobs_repository.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,10 @@
2525
_logger = logging.getLogger(__name__)
2626

2727

28-
_PROJECT_JOB_DB_COLS = [
29-
*get_columns_from_db_model(
30-
projects,
31-
ProjectDBGet,
32-
),
33-
projects_to_jobs.c.job_parent_resource_name, # Add job_parent_resource_name
34-
]
28+
_PROJECT_DB_COLS = get_columns_from_db_model(
29+
projects,
30+
ProjectDBGet,
31+
)
3532

3633

3734
class ProjectJobsRepository(BaseRepository):
@@ -81,7 +78,7 @@ async def list_projects_marked_as_jobs(
8178

8279
# Step 2: Create access_query to filter projects based on product_name and read access
8380
access_query = (
84-
sa.select(projects_to_jobs.c.project_uuid)
81+
sa.select(projects_to_jobs)
8582
.select_from(
8683
projects_to_jobs.join(
8784
projects_to_products,
@@ -115,7 +112,10 @@ async def list_projects_marked_as_jobs(
115112

116113
# Step 4: Query to get the paginated list with full selection
117114
list_query = (
118-
sa.select(*_PROJECT_JOB_DB_COLS)
115+
sa.select(
116+
*_PROJECT_DB_COLS,
117+
base_query.c.job_parent_resource_name,
118+
)
119119
.select_from(
120120
base_query.join(
121121
projects,

services/web/server/tests/unit/with_dbs/02/test_projects__jobs_service.py

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
import pytest
12
from aiohttp.test_utils import TestClient
3+
from common_library.users_enums import UserRole
24
from models_library.products import ProductName
5+
from models_library.projects import ProjectID
36
from pytest_simcore.helpers.webserver_login import UserInfoDict
47
from simcore_service_webserver.projects._jobs_service import (
58
list_my_projects_marked_as_jobs,
@@ -8,6 +11,12 @@
811
from simcore_service_webserver.projects.models import ProjectDict
912

1013

14+
@pytest.fixture
15+
def user_role() -> UserRole:
16+
# for logged_user
17+
return UserRole.USER
18+
19+
1120
async def test_list_my_projects_marked_as_jobs_empty(
1221
client: TestClient,
1322
logged_user: UserInfoDict, # owns `user_project`
@@ -30,14 +39,19 @@ async def test_list_my_projects_marked_as_jobs_with_one_marked(
3039
client: TestClient,
3140
logged_user: UserInfoDict, # owns `user_project`
3241
user_project: ProjectDict,
42+
user: UserInfoDict,
3343
osparc_product_name: ProductName,
3444
):
3545
assert client.app
3646

3747
user_id = logged_user["id"]
38-
project_uuid = user_project["uuid"]
39-
job_parent_resource_name = "test/resource"
48+
project_uuid = ProjectID(user_project["uuid"])
49+
other_user_id = user["id"]
50+
51+
assert user_id != other_user_id
52+
assert user_project["prjOwner"] == logged_user["email"] # owns `user_project`
4053

54+
job_parent_resource_name = "test/resource"
4155
await set_project_as_job(
4256
app=client.app,
4357
product_name=osparc_product_name,
@@ -46,6 +60,7 @@ async def test_list_my_projects_marked_as_jobs_with_one_marked(
4660
job_parent_resource_name=job_parent_resource_name,
4761
)
4862

63+
# user can see the project
4964
total_count, result = await list_my_projects_marked_as_jobs(
5065
app=client.app,
5166
product_name=osparc_product_name,
@@ -58,6 +73,16 @@ async def test_list_my_projects_marked_as_jobs_with_one_marked(
5873
assert project.uuid == project_uuid
5974
assert project.job_parent_resource_name == job_parent_resource_name
6075

76+
# other-user cannot see the project even if it is marked as a job
77+
total_count, result = await list_my_projects_marked_as_jobs(
78+
app=client.app,
79+
product_name=osparc_product_name,
80+
user_id=other_user_id,
81+
)
82+
assert total_count == 0
83+
assert len(result) == 0
84+
85+
# user can see the project with a filter
6186
total_count, result = await list_my_projects_marked_as_jobs(
6287
app=client.app,
6388
product_name=osparc_product_name,
@@ -71,6 +96,7 @@ async def test_list_my_projects_marked_as_jobs_with_one_marked(
7196
assert project.uuid == project_uuid
7297
assert project.job_parent_resource_name == job_parent_resource_name
7398

99+
# user can see the project with a wildcard filter
74100
total_count, result = await list_my_projects_marked_as_jobs(
75101
app=client.app,
76102
product_name=osparc_product_name,
@@ -81,9 +107,10 @@ async def test_list_my_projects_marked_as_jobs_with_one_marked(
81107
assert len(result) == 1
82108

83109
project = result[0]
84-
assert project.project_uuid == project_uuid
110+
assert project.uuid == project_uuid
85111
assert project.job_parent_resource_name == job_parent_resource_name
86112

113+
# user cannot see the project with another wildcard filter
87114
total_count, result = await list_my_projects_marked_as_jobs(
88115
app=client.app,
89116
product_name=osparc_product_name,

0 commit comments

Comments
 (0)