|
30 | 30 | from pytest_simcore.helpers.typing_env import EnvVarsDict |
31 | 31 | from pytest_simcore.helpers.webserver_login import UserInfoDict |
32 | 32 | from servicelib.aiohttp import status |
33 | | -from simcore_service_webserver.catalog._models import ServiceInputGet |
| 33 | +from simcore_service_webserver.catalog._models import ServiceInputGet, ServiceOutputGet |
34 | 34 | from simcore_service_webserver.db.models import UserRole |
35 | 35 |
|
36 | 36 |
|
@@ -188,6 +188,65 @@ async def test_list_inputs( |
188 | 188 | TypeAdapter(list[ServiceInputGet]).validate_python(data) |
189 | 189 |
|
190 | 190 |
|
| 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 | + |
191 | 250 | @pytest.mark.parametrize( |
192 | 251 | "user_role", |
193 | 252 | [UserRole.USER], |
@@ -253,6 +312,43 @@ async def test_get_compatible_inputs_given_source_outputs( |
253 | 312 | _, _ = await assert_status(response, status.HTTP_200_OK) |
254 | 313 |
|
255 | 314 |
|
| 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 | + |
256 | 352 | @pytest.mark.parametrize( |
257 | 353 | "user_role", |
258 | 354 | [UserRole.USER], |
|
0 commit comments