Skip to content

Commit 2fadd8f

Browse files
committed
minor
1 parent d8b9af4 commit 2fadd8f

File tree

2 files changed

+90
-3
lines changed

2 files changed

+90
-3
lines changed

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -572,7 +572,10 @@ async def get_folders_recursively(
572572

573573

574574
def _select_trashed_by_primary_gid_query():
575-
return sa.select(users.c.primary_gid.label("trashed_by_primary_gid")).select_from(
575+
return sa.select(
576+
folders_v2.c.folder_id,
577+
users.c.primary_gid.label("trashed_by_primary_gid"),
578+
).select_from(
576579
folders_v2.outerjoin(users, folders_v2.c.trashed_by == users.c.id),
577580
)
578581

@@ -589,7 +592,7 @@ async def get_trashed_by_primary_gid(
589592

590593
async with pass_or_acquire_connection(get_asyncpg_engine(app), connection) as conn:
591594
result = await conn.execute(query)
592-
row = result.first()
595+
row = result.one_or_none()
593596
return row.trashed_by_primary_gid if row else None
594597

595598

@@ -617,4 +620,6 @@ async def batch_get_trashed_by_primary_gid(
617620

618621
async with pass_or_acquire_connection(get_asyncpg_engine(app), connection) as conn:
619622
result = await conn.stream(query)
620-
return [row.trashed_by_primary_gid async for row in result]
623+
rows = {row.folder_id: row.trashed_by_primary_gid async for row in result}
624+
625+
return [rows.get(folder_id) for folder_id in folders_ids]
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# pylint: disable=redefined-outer-name
2+
# pylint: disable=unused-argument
3+
# pylint: disable=unused-variable
4+
# pylint: disable=too-many-arguments
5+
6+
from typing import Any
7+
8+
import arrow
9+
import pytest
10+
from aiohttp.test_utils import TestClient
11+
from common_library.users_enums import UserRole
12+
from models_library.products import ProductName
13+
from simcore_service_webserver.folders import _folders_repository
14+
15+
16+
@pytest.fixture
17+
def user_role():
18+
return UserRole.USER
19+
20+
21+
@pytest.fixture
22+
def product_name():
23+
return "osparc"
24+
25+
26+
async def test_batch_get_trashed_by_primary_gid(
27+
client: TestClient,
28+
logged_user: dict[str, Any],
29+
product_name: ProductName,
30+
):
31+
assert client.app
32+
33+
# Create two folders
34+
folder_1 = await _folders_repository.create(
35+
client.app,
36+
created_by_gid=logged_user["primary_gid"],
37+
folder_name="Folder 1",
38+
product_name=product_name,
39+
parent_folder_id=None,
40+
user_id=logged_user["id"],
41+
workspace_id=None,
42+
)
43+
folder_2 = await _folders_repository.create(
44+
client.app,
45+
created_by_gid=logged_user["primary_gid"],
46+
folder_name="Folder 2",
47+
product_name=product_name,
48+
parent_folder_id=None,
49+
user_id=logged_user["id"],
50+
workspace_id=None,
51+
)
52+
53+
# Update the trashed flag for folder_1
54+
await _folders_repository.update(
55+
client.app,
56+
folders_id_or_ids=folder_1.folder_id,
57+
product_name=product_name,
58+
trashed=arrow.now().datetime,
59+
trashed_explicitly=True,
60+
trashed_by=logged_user["id"],
61+
)
62+
63+
# Test batch_get_trashed_by_primary_gid
64+
trashed_by_primary_gid = await _folders_repository.batch_get_trashed_by_primary_gid(
65+
client.app,
66+
folders_ids=[folder_1.folder_id, folder_2.folder_id],
67+
)
68+
assert trashed_by_primary_gid == [logged_user["primary_gid"], None]
69+
70+
# flipped
71+
trashed_by_primary_gid = await _folders_repository.batch_get_trashed_by_primary_gid(
72+
client.app,
73+
folders_ids=[folder_2.folder_id, folder_1.folder_id],
74+
)
75+
assert trashed_by_primary_gid == [None, logged_user["primary_gid"]]
76+
77+
# repeated
78+
trashed_by_primary_gid = await _folders_repository.batch_get_trashed_by_primary_gid(
79+
client.app,
80+
folders_ids=[folder_1.folder_id] * 3,
81+
)
82+
assert trashed_by_primary_gid == [logged_user["primary_gid"]] * 3

0 commit comments

Comments
 (0)