|
17 | 17 | from unittest.mock import MagicMock |
18 | 18 | from unittest.mock import patch |
19 | 19 |
|
| 20 | +from google.adk.artifacts.base_artifact_service import ArtifactVersion |
20 | 21 | from google.adk.cli.adk_web_server import RunAgentRequest |
21 | 22 | from google.adk.cli.conformance.adk_web_server_client import AdkWebServerClient |
22 | 23 | from google.adk.events.event import Event |
@@ -262,6 +263,84 @@ def mock_stream(*_args, **_kwargs): |
262 | 263 | pass |
263 | 264 |
|
264 | 265 |
|
| 266 | +@pytest.mark.asyncio |
| 267 | +async def test_get_artifact_version_metadata(): |
| 268 | + client = AdkWebServerClient() |
| 269 | + mock_response = MagicMock() |
| 270 | + mock_response.json.return_value = { |
| 271 | + "version": 2, |
| 272 | + "canonicalUri": ( |
| 273 | + "artifact://apps/app/users/user/sessions/session/" |
| 274 | + "artifacts/report/versions/2" |
| 275 | + ), |
| 276 | + "customMetadata": {"foo": "bar"}, |
| 277 | + "createTime": 123.4, |
| 278 | + "mimeType": "text/plain", |
| 279 | + } |
| 280 | + |
| 281 | + with patch("httpx.AsyncClient") as mock_client_class: |
| 282 | + mock_client = AsyncMock() |
| 283 | + mock_client.get.return_value = mock_response |
| 284 | + mock_client_class.return_value = mock_client |
| 285 | + |
| 286 | + metadata = await client.get_artifact_version_metadata( |
| 287 | + app_name="app", |
| 288 | + user_id="user", |
| 289 | + session_id="session", |
| 290 | + artifact_name="report", |
| 291 | + version=2, |
| 292 | + ) |
| 293 | + |
| 294 | + assert isinstance(metadata, ArtifactVersion) |
| 295 | + assert metadata.version == 2 |
| 296 | + assert metadata.custom_metadata == {"foo": "bar"} |
| 297 | + mock_client.get.assert_called_once_with( |
| 298 | + "/apps/app/users/user/sessions/session/artifacts/report/versions/2/metadata" |
| 299 | + ) |
| 300 | + mock_response.raise_for_status.assert_called_once() |
| 301 | + |
| 302 | + |
| 303 | +@pytest.mark.asyncio |
| 304 | +async def test_list_artifact_versions_metadata(): |
| 305 | + client = AdkWebServerClient() |
| 306 | + mock_response = MagicMock() |
| 307 | + mock_response.json.return_value = [ |
| 308 | + { |
| 309 | + "version": 0, |
| 310 | + "canonicalUri": "artifact://.../versions/0", |
| 311 | + "customMetadata": {}, |
| 312 | + "createTime": 100.0, |
| 313 | + }, |
| 314 | + { |
| 315 | + "version": 1, |
| 316 | + "canonicalUri": "artifact://.../versions/1", |
| 317 | + "customMetadata": {"foo": "bar"}, |
| 318 | + "createTime": 200.0, |
| 319 | + "mimeType": "application/json", |
| 320 | + }, |
| 321 | + ] |
| 322 | + |
| 323 | + with patch("httpx.AsyncClient") as mock_client_class: |
| 324 | + mock_client = AsyncMock() |
| 325 | + mock_client.get.return_value = mock_response |
| 326 | + mock_client_class.return_value = mock_client |
| 327 | + |
| 328 | + metadata_list = await client.list_artifact_versions_metadata( |
| 329 | + app_name="app", |
| 330 | + user_id="user", |
| 331 | + session_id="session", |
| 332 | + artifact_name="report", |
| 333 | + ) |
| 334 | + |
| 335 | + assert len(metadata_list) == 2 |
| 336 | + assert all(isinstance(item, ArtifactVersion) for item in metadata_list) |
| 337 | + assert metadata_list[1].custom_metadata == {"foo": "bar"} |
| 338 | + mock_client.get.assert_called_once_with( |
| 339 | + "/apps/app/users/user/sessions/session/artifacts/report/versions/metadata" |
| 340 | + ) |
| 341 | + mock_response.raise_for_status.assert_called_once() |
| 342 | + |
| 343 | + |
265 | 344 | @pytest.mark.asyncio |
266 | 345 | async def test_close(): |
267 | 346 | client = AdkWebServerClient() |
|
0 commit comments