Skip to content

Commit 3b6eaa1

Browse files
committed
add version_display parameter to CreateFakeServiceDataCallable and update related tests for filtering
1 parent 3d2fe5c commit 3b6eaa1

File tree

3 files changed

+99
-1
lines changed

3 files changed

+99
-1
lines changed

packages/pytest-simcore/src/pytest_simcore/helpers/catalog_services.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ def __call__(
2020
team_access: str | None = None,
2121
everyone_access: str | None = None,
2222
product: ProductName = "osparc",
23+
# DB overrides
2324
deprecated: datetime | None = None, # DB column
25+
version_display: str | None = None, # DB column
2426
) -> tuple[dict[str, Any], ...]: # type: ignore
2527
"""
2628
Returns a fake factory that creates catalog DATA that can be used to fill

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,8 +420,14 @@ def _fake_factory(
420420
everyone_access: str | None = None,
421421
product: ProductName = products_names[0],
422422
deprecated: datetime | None = None,
423+
version_display: str | None = None,
423424
) -> tuple[dict[str, Any], ...]:
424-
service = _random_service(key=key, version=version, deprecated=deprecated)
425+
service = _random_service(
426+
key=key,
427+
version=version,
428+
deprecated=deprecated,
429+
version_display=version_display,
430+
)
425431

426432
# owner always has full-access
427433
owner_access = _random_access(

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

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from models_library.users import UserID
2323
from packaging import version
2424
from pydantic import EmailStr, HttpUrl, TypeAdapter
25+
from pytest_simcore.helpers.catalog_services import CreateFakeServiceDataCallable
2526
from pytest_simcore.helpers.faker_factories import random_project
2627
from pytest_simcore.helpers.postgres_tools import insert_and_get_row_lifespan
2728
from simcore_postgres_database.models.projects import ProjectType, projects
@@ -465,6 +466,95 @@ async def test_list_latest_services_with_filters(
465466
)
466467

467468

469+
async def test_list_latest_services_with_pattern_filters(
470+
target_product: ProductName,
471+
create_fake_service_data: CreateFakeServiceDataCallable,
472+
services_db_tables_injector: Callable,
473+
services_repo: ServicesRepository,
474+
user_id: UserID,
475+
):
476+
# Setup: Inject services with different patterns
477+
await services_db_tables_injector(
478+
[
479+
create_fake_service_data(
480+
"simcore/services/dynamic/jupyter-lab",
481+
"1.0.0",
482+
team_access=None,
483+
everyone_access=None,
484+
product=target_product,
485+
version_display="2023 Release",
486+
),
487+
create_fake_service_data(
488+
"simcore/services/dynamic/jupyter-r",
489+
"1.0.0",
490+
team_access=None,
491+
everyone_access=None,
492+
product=target_product,
493+
version_display="2024 Beta",
494+
),
495+
create_fake_service_data(
496+
"simcore/services/dynamic/jupyter-python",
497+
"1.0.0",
498+
team_access=None,
499+
everyone_access=None,
500+
product=target_product,
501+
),
502+
]
503+
)
504+
505+
# Test: Filter by service key pattern
506+
filters = ServiceFiltersDB(service_key_pattern="*/jupyter-*")
507+
total_count, services_items = await services_repo.list_latest_services(
508+
product_name=target_product, user_id=user_id, filters=filters
509+
)
510+
assert total_count == 3
511+
assert len(services_items) == 3
512+
assert all(
513+
service.key.endswith("jupyter-lab")
514+
or service.key.endswith("jupyter-r")
515+
or service.key.endswith("jupyter-python")
516+
for service in services_items
517+
)
518+
519+
# Test: More specific pattern
520+
filters = ServiceFiltersDB(service_key_pattern="*/jupyter-l*")
521+
total_count, services_items = await services_repo.list_latest_services(
522+
product_name=target_product, user_id=user_id, filters=filters
523+
)
524+
assert total_count == 1
525+
assert len(services_items) == 1
526+
assert services_items[0].key.endswith("jupyter-lab")
527+
528+
# Test: Filter by version display pattern
529+
filters = ServiceFiltersDB(version_display_pattern="*2023*")
530+
total_count, services_items = await services_repo.list_latest_services(
531+
product_name=target_product, user_id=user_id, filters=filters
532+
)
533+
assert total_count == 1
534+
assert len(services_items) == 1
535+
assert services_items[0].version_display == "2023 Release"
536+
537+
# Test: Filter by version display pattern with NULL handling
538+
filters = ServiceFiltersDB(version_display_pattern="*")
539+
total_count, services_items = await services_repo.list_latest_services(
540+
product_name=target_product, user_id=user_id, filters=filters
541+
)
542+
assert total_count == 3 # Should match all, including NULL version_display
543+
assert len(services_items) == 3
544+
545+
# Test: Combined filters
546+
filters = ServiceFiltersDB(
547+
service_key_pattern="*/jupyter-*", version_display_pattern="*2024*"
548+
)
549+
total_count, services_items = await services_repo.list_latest_services(
550+
product_name=target_product, user_id=user_id, filters=filters
551+
)
552+
assert total_count == 1
553+
assert len(services_items) == 1
554+
assert services_items[0].version_display == "2024 Beta"
555+
assert services_items[0].key.endswith("jupyter-r")
556+
557+
468558
async def test_get_and_update_service_meta_data(
469559
target_product: ProductName,
470560
create_fake_service_data: Callable,

0 commit comments

Comments
 (0)