1111from faker import Faker
1212from httpx import AsyncClient
1313from pydantic import ValidationError
14+ from pytest_simcore .helpers .monkeypatch_envs import setenvs_from_dict
15+ from pytest_simcore .helpers .typing_env import EnvVarsDict
1416from servicelib .aiohttp import status
17+ from simcore_service_webserver .licenses import _itis_vip_service
1518from simcore_service_webserver .licenses ._itis_vip_service import ResponseData
19+ from simcore_service_webserver .licenses .settings import ItisVipSettings
20+
21+
22+ @pytest .fixture (scope = "session" )
23+ def fake_api_base_url () -> str :
24+ return "https://testserver"
1625
1726
1827@pytest .fixture
19- def mock_itis_vip_downloadables_api (faker : Faker ) -> Iterator [respx .MockRouter ]:
20- api_url = "http://testserver"
28+ def app_environment (
29+ monkeypatch : pytest .MonkeyPatch ,
30+ app_environment : EnvVarsDict ,
31+ fake_api_base_url : str ,
32+ ):
33+ return app_environment | setenvs_from_dict (
34+ monkeypatch ,
35+ {
36+ "ITIS_VIP_API_URL" : f"{ fake_api_base_url } /PD_DirectDownload/getDownloadableItems/{{category}}" ,
37+ "ITIS_VIP_CATEGORIES" : "ComputationalPantom,Foo,Bar" ,
38+ },
39+ )
40+
41+
42+ @pytest .fixture
43+ def mock_itis_vip_downloadables_api (
44+ faker : Faker , fake_api_base_url : str
45+ ) -> Iterator [respx .MockRouter ]:
2146 response_data = {
2247 "msg" : 0 ,
2348 "availableDownloads" : [
@@ -37,17 +62,17 @@ def mock_itis_vip_downloadables_api(faker: Faker) -> Iterator[respx.MockRouter]:
3762 ],
3863 }
3964
40- with respx .mock (base_url = api_url ) as mock :
41- mock .post (" getDownloadableItems/ComputationalPantom " ).respond (
65+ with respx .mock (base_url = fake_api_base_url ) as mock :
66+ mock .post (path__regex = r"/ getDownloadableItems/(?P<category>\d+) " ).respond (
4267 status_code = 200 , json = response_data
4368 )
4469 yield mock
4570
4671
47- async def test_fetch_itis_vip_api (
48- mock_itis_vip_downloadables_api : respx .MockRouter ,
72+ async def test_fetch_and_validate_itis_vip_api (
73+ mock_itis_vip_downloadables_api : respx .MockRouter , fake_api_base_url : str
4974):
50- async with AsyncClient (base_url = "http://testserver" ) as client :
75+ async with AsyncClient (base_url = fake_api_base_url ) as client :
5176 response = await client .post ("getDownloadableItems/ComputationalPantom" )
5277 assert response .status_code == status .HTTP_200_OK
5378 response_json = response .json ()
@@ -65,3 +90,21 @@ async def test_fetch_itis_vip_api(
6590 )
6691
6792 print (validated_data .model_dump_json (indent = 1 ))
93+
94+
95+ async def test_get_category_items (
96+ mock_itis_vip_downloadables_api : respx .MockRouter ,
97+ app_environment : EnvVarsDict ,
98+ ):
99+ settings = ItisVipSettings .create_from_envs ()
100+ assert settings .ITIS_VIP_CATEGORIES
101+
102+ async with AsyncClient () as client :
103+ for url , category in zip (
104+ settings .get_urls (), settings .ITIS_VIP_CATEGORIES , strict = True
105+ ):
106+ assert f"{ url } " .endswith (category )
107+
108+ items = await _itis_vip_service .get_category_items (client , url )
109+
110+ assert items [0 ].features ["functionality" ] == "Posable"
0 commit comments