Skip to content

Commit 4b87ce3

Browse files
review @pcrespov
1 parent e2d205e commit 4b87ce3

File tree

9 files changed

+32
-33
lines changed

9 files changed

+32
-33
lines changed

api/specs/web-server/_folders.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,6 @@ async def delete_folder(
102102
...
103103

104104

105-
### Move Folder to Workspace
106-
107-
108105
@router.put(
109106
"/folders/{folder_id}/workspaces/{workspace_id}",
110107
status_code=status.HTTP_204_NO_CONTENT,

services/web/server/src/simcore_service_webserver/folders/_folders_db.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ async def get_projects_recursively_only_if_user_is_owner(
463463
return [ProjectID(row[0]) async for row in result]
464464

465465

466-
async def get_all_folders_and_projects_recursively(
466+
async def get_all_folders_and_projects_ids_recursively(
467467
app: web.Application,
468468
connection: AsyncConnection | None = None,
469469
*,
@@ -504,15 +504,15 @@ async def get_all_folders_and_projects_recursively(
504504
final_query = select(folder_hierarchy_cte)
505505
result = await conn.stream(final_query)
506506
# list of tuples [(folder_id, parent_folder_id), ...] ex. [(1, None), (2, 1)]
507-
folder_ids = [item[0] async for item in result]
507+
folder_ids = [item.folder_id async for item in result]
508508

509509
query = select(projects_to_folders.c.project_uuid).where(
510510
(projects_to_folders.c.folder_id.in_(folder_ids))
511511
& (projects_to_folders.c.user_id == private_workspace_user_id_or_none)
512512
)
513513

514514
result = await conn.stream(query)
515-
project_ids = [ProjectID(row[0]) async for row in result]
515+
project_ids = [ProjectID(row.project_uuid) async for row in result]
516516

517517
return folder_ids, project_ids
518518

services/web/server/src/simcore_service_webserver/folders/_workspaces_api.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
from simcore_postgres_database.utils_repos import transaction_context
99

1010
from ..db.plugin import get_asyncpg_engine
11-
from ..projects import _db_v2 as projects_db
1211
from ..projects import _folders_db as project_to_folders_db
1312
from ..projects import _groups_db as project_groups_db
13+
from ..projects import _projects_db as projects_db
1414
from ..projects._access_rights_api import check_user_project_permission
1515
from ..users.api import get_user
1616
from ..workspaces.api import check_user_workspace_access
@@ -56,7 +56,7 @@ async def move_folder_into_workspace(
5656
(
5757
folder_ids,
5858
project_ids,
59-
) = await _folders_db.get_all_folders_and_projects_recursively(
59+
) = await _folders_db.get_all_folders_and_projects_ids_recursively(
6060
app,
6161
connection=None,
6262
folder_id=folder_id,

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,6 @@ async def delete_all_project_to_folder_by_project_ids_not_in_folder_ids(
156156
connection: AsyncConnection | None = None,
157157
*,
158158
project_id_or_ids: ProjectID | set[ProjectID],
159-
# Optional filter
160159
not_in_folder_ids: set[FolderID],
161160
) -> None:
162161
query = projects_to_folders.delete()

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
from ..projects._access_rights_api import get_user_project_access_rights
1212
from ..users.api import get_user
1313
from ..workspaces.api import check_user_workspace_access
14-
from . import _db_v2 as project_db_v2
1514
from . import _folders_db as project_to_folders_db
1615
from . import _groups_db as project_groups_db
16+
from . import _projects_db as project_db_v2
1717
from .exceptions import ProjectInvalidRightsError
1818

1919
_logger = logging.getLogger(__name__)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
patch_workbench,
8686
update_workbench,
8787
)
88-
from ._db_v2 import _SELECTION_PROJECT_DB_ARGS
88+
from ._projects_db import _SELECTION_PROJECT_DB_ARGS
8989
from .exceptions import (
9090
ProjectDeleteError,
9191
ProjectInvalidRightsError,

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,8 @@
120120
from ..wallets import api as wallets_api
121121
from ..wallets.errors import WalletNotEnoughCreditsError
122122
from ..workspaces import _workspaces_db as workspaces_db
123-
from . import _crud_api_delete
124-
from . import _db_v2 as project_db_v2
125-
from . import _nodes_api
123+
from . import _crud_api_delete, _nodes_api
124+
from . import _projects_db as project_db_v2
126125
from ._access_rights_api import (
127126
check_user_project_permission,
128127
has_user_project_access_rights,

services/web/server/tests/unit/with_dbs/04/workspaces/test_workspaces__moving_folders_between_workspaces.py

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77

88
from copy import deepcopy
9-
from http import HTTPStatus
109
from http.client import NO_CONTENT
1110

1211
import pytest
@@ -21,6 +20,11 @@
2120
from simcore_service_webserver.projects.models import ProjectDict
2221

2322

23+
@pytest.fixture
24+
def user_role() -> UserRole:
25+
return UserRole.USER
26+
27+
2428
@pytest.fixture
2529
def mock_catalog_api_get_services_for_user_in_product(mocker: MockerFixture):
2630
mocker.patch(
@@ -40,26 +44,28 @@ def mock_catalog_api_get_services_for_user_in_product(mocker: MockerFixture):
4044
)
4145

4246

43-
async def _setup_test(
47+
@pytest.fixture
48+
async def moving_folder_id(
4449
client: TestClient,
4550
logged_user: UserInfoDict,
4651
fake_project: ProjectDict,
4752
) -> str:
4853
assert client.app
54+
setup_db(client.app)
4955

5056
### Project creation
5157

5258
# Create 2 projects
5359
project_data = deepcopy(fake_project)
5460
first_project = await create_project(
5561
client.app,
56-
project_data,
62+
params_override=project_data,
5763
user_id=logged_user["id"],
5864
product_name="osparc",
5965
)
6066
second_project = await create_project(
6167
client.app,
62-
project_data,
68+
params_override=project_data,
6369
user_id=logged_user["id"],
6470
product_name="osparc",
6571
)
@@ -159,11 +165,11 @@ async def _move_folder_to_workspace_and_assert(
159165
assert client.app
160166

161167
# MOVE
162-
base_url = client.app.router["replace_folder_workspace"].url_for(
168+
url = client.app.router["replace_folder_workspace"].url_for(
163169
folder_id=folder_id,
164170
workspace_id=workspace_id,
165171
)
166-
resp = await client.put(f"{base_url}")
172+
resp = await client.put(f"{url}")
167173
await assert_status(resp, NO_CONTENT)
168174

169175
# ASSERT
@@ -196,19 +202,17 @@ async def _move_folder_to_workspace_and_assert(
196202
assert len(data) == 1
197203

198204

199-
@pytest.mark.parametrize("user_role,expected", [(UserRole.USER, status.HTTP_200_OK)])
205+
# @pytest.mark.parametrize("user_role,expected", [(UserRole.USER, status.HTTP_200_OK)])
200206
async def test_moving_between_private_and_shared_workspaces(
201207
client: TestClient,
202208
logged_user: UserInfoDict,
203-
expected: HTTPStatus,
209+
expected,
204210
mock_catalog_api_get_services_for_user_in_product: MockerFixture,
205211
fake_project: ProjectDict,
212+
moving_folder_id: str,
206213
workspaces_clean_db: None,
207214
):
208215
assert client.app
209-
setup_db(client.app)
210-
211-
moving_folder_id = await _setup_test(client, logged_user, fake_project)
212216

213217
# We will test these scenarios of moving folders:
214218
# 1. Private workspace -> Shared workspace
@@ -220,45 +224,45 @@ async def test_moving_between_private_and_shared_workspaces(
220224
# create a new workspace
221225
url = client.app.router["create_workspace"].url_for()
222226
resp = await client.post(
223-
url.path,
227+
f"{url}",
224228
json={
225229
"name": "A",
226230
"description": "A",
227231
"thumbnail": None,
228232
},
229233
)
230-
added_workspace, _ = await assert_status(resp, status.HTTP_201_CREATED)
234+
shared_workspace_A, _ = await assert_status(resp, status.HTTP_201_CREATED)
231235

232236
# 1. Private workspace -> Shared workspace A
233237
await _move_folder_to_workspace_and_assert(
234238
client,
235239
folder_id=moving_folder_id,
236-
workspace_id=f"{added_workspace['workspaceId']}",
240+
workspace_id=f"{shared_workspace_A['workspaceId']}",
237241
)
238242

239243
# create a new workspace
240244
url = client.app.router["create_workspace"].url_for()
241245
resp = await client.post(
242-
url.path,
246+
f"{url}",
243247
json={
244248
"name": "B",
245249
"description": "B",
246250
"thumbnail": None,
247251
},
248252
)
249-
second_workspace, _ = await assert_status(resp, status.HTTP_201_CREATED)
253+
shared_workspace_B, _ = await assert_status(resp, status.HTTP_201_CREATED)
250254
# 2. Shared workspace A -> Shared workspace B
251255
await _move_folder_to_workspace_and_assert(
252256
client,
253257
folder_id=moving_folder_id,
254-
workspace_id=f"{second_workspace['workspaceId']}",
258+
workspace_id=f"{shared_workspace_B['workspaceId']}",
255259
)
256260

257-
# 3. (Corner case) Shared workspace A -> Shared workspace A
261+
# 3. (Corner case) Shared workspace B -> Shared workspace B
258262
await _move_folder_to_workspace_and_assert(
259263
client,
260264
folder_id=moving_folder_id,
261-
workspace_id=f"{second_workspace['workspaceId']}",
265+
workspace_id=f"{shared_workspace_B['workspaceId']}",
262266
)
263267

264268
# 4. Shared workspace -> Private workspace

0 commit comments

Comments
 (0)