Skip to content

Commit e281686

Browse files
committed
test: add comprehensive filter combination tests for list_services_paginated
1 parent c148615 commit e281686

File tree

1 file changed

+135
-8
lines changed

1 file changed

+135
-8
lines changed

services/catalog/tests/unit/with_dbs/test_api_rpc.py

Lines changed: 135 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,13 @@
1111
import pytest
1212
from faker import Faker
1313
from fastapi import FastAPI
14+
from models_library.api_schemas_catalog.services import (
15+
ServiceListFilters,
16+
ServiceUpdateV2,
17+
)
1418
from models_library.products import ProductName
1519
from models_library.rest_pagination import MAXIMUM_NUMBER_OF_ITEMS_PER_PAGE
20+
from models_library.services_enums import ServiceType
1621
from models_library.services_history import ServiceRelease
1722
from models_library.services_types import ServiceKey, ServiceVersion
1823
from models_library.users import UserID
@@ -145,11 +150,133 @@ async def test_rpc_list_services_paginated_with_filters(
145150
rpc_client,
146151
product_name=product_name,
147152
user_id=user_id,
148-
filters={"service_type": "dynamic"},
153+
filters=ServiceListFilters(service_type=ServiceType.DYNAMIC),
149154
)
150155
assert page.meta.total == 0
151156

152157

158+
async def test_rpc_list_services_paginated_with_filter_combinations(
159+
background_sync_task_mocked: None,
160+
mocked_director_rest_api: MockRouter,
161+
rpc_client: RabbitMQRPCClient,
162+
product_name: ProductName,
163+
user_id: UserID,
164+
app: FastAPI,
165+
create_fake_service_data: Callable,
166+
services_db_tables_injector: Callable,
167+
):
168+
"""Tests all combinations of filters for list_services_paginated"""
169+
# Setup: Create test services with different patterns and types
170+
test_services = [
171+
# Computational services
172+
create_fake_service_data(
173+
"simcore/services/comp/test-service1",
174+
"1.0.0",
175+
team_access=None,
176+
everyone_access=None,
177+
product=product_name,
178+
version_display="2023 Release",
179+
),
180+
create_fake_service_data(
181+
"simcore/services/comp/test-service2",
182+
"1.0.0",
183+
team_access=None,
184+
everyone_access=None,
185+
product=product_name,
186+
version_display=None,
187+
),
188+
# Dynamic services
189+
create_fake_service_data(
190+
"simcore/services/dynamic/jupyter-lab",
191+
"1.0.0",
192+
team_access=None,
193+
everyone_access=None,
194+
product=product_name,
195+
version_display="2024 Beta",
196+
),
197+
create_fake_service_data(
198+
"simcore/services/dynamic/jupyter-python",
199+
"1.0.0",
200+
team_access=None,
201+
everyone_access=None,
202+
product=product_name,
203+
version_display=None,
204+
),
205+
]
206+
await services_db_tables_injector(test_services)
207+
208+
# Test 1: Filter by service type only
209+
page = await catalog_rpc.list_services_paginated(
210+
rpc_client,
211+
product_name=product_name,
212+
user_id=user_id,
213+
filters=ServiceListFilters(service_type=ServiceType.COMPUTATIONAL),
214+
)
215+
assert page.meta.total == 2
216+
assert all("services/comp/" in item.key for item in page.data)
217+
218+
# Test 2: Filter by key pattern only
219+
page = await catalog_rpc.list_services_paginated(
220+
rpc_client,
221+
product_name=product_name,
222+
user_id=user_id,
223+
filters=ServiceListFilters(service_key_pattern="*/jupyter-*"),
224+
)
225+
assert page.meta.total == 2
226+
assert all("jupyter-" in item.key for item in page.data)
227+
228+
# Test 3: Filter by version display pattern only
229+
page = await catalog_rpc.list_services_paginated(
230+
rpc_client,
231+
product_name=product_name,
232+
user_id=user_id,
233+
filters=ServiceListFilters(version_display_pattern="*2023*"),
234+
)
235+
assert page.meta.total == 1
236+
assert page.data[0].version_display == "2023 Release"
237+
238+
# Test 4: Combined filters - type and key pattern
239+
page = await catalog_rpc.list_services_paginated(
240+
rpc_client,
241+
product_name=product_name,
242+
user_id=user_id,
243+
filters=ServiceListFilters(
244+
service_type=ServiceType.DYNAMIC, service_key_pattern="*/jupyter-*"
245+
),
246+
)
247+
assert page.meta.total == 2
248+
assert all(
249+
"services/dynamic/" in item.key and "jupyter-" in item.key for item in page.data
250+
)
251+
252+
# Test 5: Combined filters with version display pattern
253+
page = await catalog_rpc.list_services_paginated(
254+
rpc_client,
255+
product_name=product_name,
256+
user_id=user_id,
257+
filters=ServiceListFilters(
258+
service_type=ServiceType.DYNAMIC,
259+
service_key_pattern="*/jupyter-*",
260+
version_display_pattern="*2024*",
261+
),
262+
)
263+
assert page.meta.total == 1
264+
assert page.data[0].key == "simcore/services/dynamic/jupyter-lab"
265+
assert page.data[0].version_display == "2024 Beta"
266+
page = await catalog_rpc.list_services_paginated(
267+
rpc_client,
268+
product_name=product_name,
269+
user_id=user_id,
270+
filters=ServiceListFilters(
271+
service_type=ServiceType.DYNAMIC,
272+
service_key_pattern="*/jupyter-*",
273+
version_display_pattern="*2024*",
274+
),
275+
)
276+
assert page.meta.total == 1
277+
assert page.data[0].version_display == "2024 Beta"
278+
279+
153280
async def test_rpc_catalog_client_workflow(
154281
background_sync_task_mocked: None,
155282
mocked_director_rest_api: MockRouter,
@@ -199,13 +326,13 @@ async def test_rpc_catalog_client_workflow(
199326
user_id=user_id,
200327
service_key=service_key,
201328
service_version=service_version,
202-
update={
203-
"name": "foo",
204-
"description": "bar",
205-
"icon": random_icon_url(faker),
206-
"version_display": "this is a nice version",
207-
"description_ui": True, # owner activates wiki view
208-
}, # type: ignore
329+
update=ServiceUpdateV2(
330+
name="foo",
331+
description="bar",
332+
icon=random_icon_url(faker),
333+
version_display="this is a nice version",
334+
description_ui=True, # owner activates wiki view
335+
),
209336
)
210337

211338
assert updated.key == got.key

0 commit comments

Comments
 (0)