Skip to content

Commit 0a84d24

Browse files
committed
expanding test
1 parent 5832f9f commit 0a84d24

File tree

4 files changed

+72
-37
lines changed

4 files changed

+72
-37
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# pylint: disable=not-context-manager
2+
# pylint: disable=protected-access
3+
# pylint: disable=redefined-outer-name
4+
# pylint: disable=unused-argument
5+
# pylint: disable=unused-variable
6+
7+
from datetime import datetime
8+
from typing import Protocol
9+
10+
from models_library.products import ProductName
11+
12+
13+
class CreateFakeServiceDataCallable(Protocol):
14+
"""Signature for services/catalog/tests/unit/with_dbs/conftest.py::create_fake_service_data"""
15+
16+
def __call__(
17+
self,
18+
key,
19+
version,
20+
team_access: str | None = None,
21+
everyone_access: str | None = None,
22+
product: ProductName = "osparc",
23+
deprecated: datetime | None = None, # DB column
24+
):
25+
...

services/catalog/tests/unit/conftest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
pytest_plugins = [
3535
"pytest_simcore.cli_runner",
3636
"pytest_simcore.docker_compose",
37+
"pytest_simcore.simcore_catalog_service",
3738
"pytest_simcore.docker_registry",
3839
"pytest_simcore.docker_swarm",
3940
"pytest_simcore.environment_configs",

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

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from collections.abc import AsyncIterator, Awaitable, Callable
99
from copy import deepcopy
1010
from datetime import datetime
11-
from typing import Any, Protocol
11+
from typing import Any
1212

1313
import pytest
1414
import sqlalchemy as sa
@@ -18,6 +18,7 @@
1818
from models_library.services import ServiceMetaDataPublished
1919
from models_library.users import UserID
2020
from pydantic import ConfigDict, TypeAdapter
21+
from pytest_simcore.helpers.catalog_services import CreateFakeServiceDataCallable
2122
from pytest_simcore.helpers.faker_factories import (
2223
random_service_access_rights,
2324
random_service_meta_data,
@@ -354,25 +355,12 @@ def _fake_factory(**overrides):
354355
return _fake_factory
355356

356357

357-
class CreateFakeServiceData(Protocol):
358-
def __call__(
359-
self,
360-
key,
361-
version,
362-
team_access: str | None = None,
363-
everyone_access: str | None = None,
364-
product: ProductName = "osparc",
365-
deprecated: datetime | None = None,
366-
):
367-
...
368-
369-
370-
@pytest.fixture()
358+
@pytest.fixture
371359
async def create_fake_service_data(
372360
user_groups_ids: list[int],
373361
products_names: list[str],
374362
faker: Faker,
375-
) -> Callable:
363+
) -> CreateFakeServiceDataCallable:
376364
"""Returns a fake factory that creates catalog DATA that can be used to fill
377365
both services_meta_data and services_access_rights tables
378366

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

Lines changed: 42 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,17 @@
33
# pylint: disable=unused-variable
44

55
from collections.abc import Callable
6+
from datetime import timedelta
67
from typing import Any
78

9+
import arrow
810
import pytest
911
from fastapi import FastAPI
12+
from models_library.api_schemas_catalog.services import MyServiceGet
1013
from models_library.products import ProductName
11-
from models_library.services_access import ServiceGroupAccessRightsV2
12-
from models_library.services_history import CompatibleService
1314
from models_library.users import UserID
15+
from pydantic import TypeAdapter
16+
from pytest_simcore.helpers.catalog_services import CreateFakeServiceDataCallable
1417
from respx.router import MockRouter
1518
from simcore_service_catalog.api.dependencies.director import get_director_api
1619
from simcore_service_catalog.db.repositories.groups import GroupsRepository
@@ -162,7 +165,7 @@ async def test_batch_get_my_services(
162165
groups_repo: GroupsRepository,
163166
user_id: UserID,
164167
user: dict[str, Any],
165-
create_fake_service_data: Callable,
168+
create_fake_service_data: CreateFakeServiceDataCallable,
166169
services_db_tables_injector: Callable,
167170
):
168171
# catalog
@@ -173,12 +176,15 @@ async def test_batch_get_my_services(
173176
other_service_key = "simcore/services/comp/other-service"
174177
other_service_version = "2.0.0"
175178

179+
expected_retirement = arrow.now().datetime + timedelta(days=1)
180+
176181
fake_service_1 = create_fake_service_data(
177182
service_key,
178183
service_version_1,
179184
team_access=None,
180185
everyone_access=None,
181186
product=target_product,
187+
deprecated=expected_retirement,
182188
)
183189
fake_service_2 = create_fake_service_data(
184190
service_key,
@@ -215,23 +221,38 @@ async def test_batch_get_my_services(
215221
# assert returned order and length as ids
216222
assert services_ids == [(sc.key, sc.release.version) for sc in my_services]
217223

218-
# assert access: owns them
219-
assert my_services[0].my_access_rights == ServiceGroupAccessRightsV2(
220-
execute=True, write=True
221-
)
222-
assert my_services[0].owner == user["primary_gid"]
223-
224-
assert my_services[1].my_access_rights == ServiceGroupAccessRightsV2(
225-
execute=True, write=True
226-
)
227-
assert my_services[1].owner == user["primary_gid"]
228-
229-
# assert status: first can be updated but not second
230-
assert my_services[0].release.retired is None
231-
assert my_services[0].release.compatibility
232-
assert my_services[0].release.compatibility.can_update_to == CompatibleService(
233-
version=service_version_2
234-
) # can be updated
235-
236224
assert my_services[1].release.retired is None
237225
assert my_services[2].release.compatibility is None # nothing to update
226+
227+
released = my_services[1].release
228+
229+
assert my_services == TypeAdapter(list[MyServiceGet]).validate_python(
230+
[
231+
{
232+
"key": "simcore/services/comp/some-service",
233+
"release": {
234+
"version": "1.0.0",
235+
"version_display": None,
236+
"released": released,
237+
"retired": expected_retirement,
238+
"compatibility": {
239+
"can_update_to": {"version": "1.0.1"}
240+
}, # can be updated
241+
},
242+
"owner": user["primary_gid"],
243+
"my_access_rights": {"execute": True, "write": True}, # full access
244+
},
245+
{
246+
"key": "simcore/services/comp/other-service",
247+
"release": {
248+
"version": "2.0.0",
249+
"version_display": None,
250+
"released": released,
251+
"retired": None,
252+
"compatibility": None, # cannot be updated
253+
},
254+
"owner": user["primary_gid"],
255+
"my_access_rights": {"execute": True, "write": True}, # full acces
256+
},
257+
]
258+
)

0 commit comments

Comments
 (0)