Skip to content

Commit 456c638

Browse files
committed
add test for matching output endpoints
1 parent 73edc8c commit 456c638

File tree

1 file changed

+97
-1
lines changed

1 file changed

+97
-1
lines changed

services/web/server/tests/unit/with_dbs/01/test_catalog_handlers__services.py

Lines changed: 97 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
from pytest_simcore.helpers.typing_env import EnvVarsDict
3131
from pytest_simcore.helpers.webserver_login import UserInfoDict
3232
from servicelib.aiohttp import status
33-
from simcore_service_webserver.catalog._models import ServiceInputGet
33+
from simcore_service_webserver.catalog._models import ServiceInputGet, ServiceOutputGet
3434
from simcore_service_webserver.db.models import UserRole
3535

3636

@@ -188,6 +188,65 @@ async def test_list_inputs(
188188
TypeAdapter(list[ServiceInputGet]).validate_python(data)
189189

190190

191+
@pytest.mark.parametrize(
192+
"user_role",
193+
[UserRole.USER],
194+
)
195+
async def test_list_outputs(
196+
client: TestClient, logged_user: UserInfoDict, aioresponses_mocker: AioResponsesMock
197+
):
198+
199+
url_pattern = re.compile(r"http://catalog:8000/v0/services/.*")
200+
service_payload = ServiceGetV2.model_json_schema()["examples"][0]
201+
aioresponses_mocker.get(
202+
url_pattern,
203+
status=status.HTTP_200_OK,
204+
payload=service_payload,
205+
)
206+
207+
service_key = "simcore/services/comp/itis/sleeper"
208+
service_version = "0.1.0"
209+
assert client.app and client.app.router
210+
url = client.app.router["list_service_outputs"].url_for(
211+
service_key=urllib.parse.quote(service_key, safe=""),
212+
service_version=service_version,
213+
)
214+
215+
response = await client.get(f"{url}")
216+
data, _ = await assert_status(response, status.HTTP_200_OK)
217+
TypeAdapter(list[ServiceOutputGet]).validate_python(data)
218+
219+
220+
@pytest.mark.parametrize(
221+
"user_role",
222+
[UserRole.USER],
223+
)
224+
async def test_get_outputs(
225+
client: TestClient, logged_user: UserInfoDict, aioresponses_mocker: AioResponsesMock
226+
):
227+
228+
url_pattern = re.compile(r"http://catalog:8000/v0/services/.*")
229+
service_payload = ServiceGetV2.model_json_schema()["examples"][0]
230+
aioresponses_mocker.get(
231+
url_pattern,
232+
status=status.HTTP_200_OK,
233+
payload=service_payload,
234+
)
235+
236+
service_key = "simcore/services/comp/itis/sleeper"
237+
service_version = "0.1.0"
238+
assert client.app and client.app.router
239+
url = client.app.router["get_service_output"].url_for(
240+
service_key=urllib.parse.quote(service_key, safe=""),
241+
service_version=service_version,
242+
output_key=next(iter(service_payload["outputs"].keys())),
243+
)
244+
245+
response = await client.get(f"{url}")
246+
data, _ = await assert_status(response, status.HTTP_200_OK)
247+
ServiceOutputGet.model_validate(data)
248+
249+
191250
@pytest.mark.parametrize(
192251
"user_role",
193252
[UserRole.USER],
@@ -253,6 +312,43 @@ async def test_get_compatible_inputs_given_source_outputs(
253312
_, _ = await assert_status(response, status.HTTP_200_OK)
254313

255314

315+
@pytest.mark.parametrize(
316+
"user_role",
317+
[UserRole.USER],
318+
)
319+
async def test_get_compatible_outputs_given_target_inptuts(
320+
client: TestClient, logged_user: UserInfoDict, aioresponses_mocker: AioResponsesMock
321+
):
322+
url_pattern = re.compile(r"http://catalog:8000/v0/services/.*")
323+
service_payload = ServiceGetV2.model_json_schema()["examples"][0]
324+
for _ in range(2):
325+
aioresponses_mocker.get(
326+
url_pattern,
327+
status=status.HTTP_200_OK,
328+
payload=service_payload,
329+
)
330+
331+
service_key = "simcore/services/comp/itis/sleeper"
332+
service_version = "0.1.0"
333+
assert client.app and client.app.router
334+
url = (
335+
client.app.router["get_compatible_outputs_given_target_input"]
336+
.url_for(
337+
service_key=urllib.parse.quote(service_key, safe=""),
338+
service_version=service_version,
339+
)
340+
.with_query(
341+
{
342+
"toService": "simcore/services/comp/itis/sleeper",
343+
"toVersion": "0.1.0",
344+
"toInput": "input_1",
345+
}
346+
)
347+
)
348+
response = await client.get(f"{url}")
349+
_, _ = await assert_status(response, status.HTTP_200_OK)
350+
351+
256352
@pytest.mark.parametrize(
257353
"user_role",
258354
[UserRole.USER],

0 commit comments

Comments
 (0)