|
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 |
@@ -224,6 +225,84 @@ def mock_stream(*_args, **_kwargs): |
224 | 225 | assert events[1].invocation_id == "test_invocation_2" |
225 | 226 |
|
226 | 227 |
|
| 228 | +@pytest.mark.asyncio |
| 229 | +async def test_get_artifact_version_metadata(): |
| 230 | + client = AdkWebServerClient() |
| 231 | + mock_response = MagicMock() |
| 232 | + mock_response.json.return_value = { |
| 233 | + "version": 2, |
| 234 | + "canonicalUri": ( |
| 235 | + "artifact://apps/app/users/user/sessions/session/" |
| 236 | + "artifacts/report/versions/2" |
| 237 | + ), |
| 238 | + "customMetadata": {"foo": "bar"}, |
| 239 | + "createTime": 123.4, |
| 240 | + "mimeType": "text/plain", |
| 241 | + } |
| 242 | + |
| 243 | + with patch("httpx.AsyncClient") as mock_client_class: |
| 244 | + mock_client = AsyncMock() |
| 245 | + mock_client.get.return_value = mock_response |
| 246 | + mock_client_class.return_value = mock_client |
| 247 | + |
| 248 | + metadata = await client.get_artifact_version_metadata( |
| 249 | + app_name="app", |
| 250 | + user_id="user", |
| 251 | + session_id="session", |
| 252 | + artifact_name="report", |
| 253 | + version=2, |
| 254 | + ) |
| 255 | + |
| 256 | + assert isinstance(metadata, ArtifactVersion) |
| 257 | + assert metadata.version == 2 |
| 258 | + assert metadata.custom_metadata == {"foo": "bar"} |
| 259 | + mock_client.get.assert_called_once_with( |
| 260 | + "/apps/app/users/user/sessions/session/artifacts/report/versions/2/metadata" |
| 261 | + ) |
| 262 | + mock_response.raise_for_status.assert_called_once() |
| 263 | + |
| 264 | + |
| 265 | +@pytest.mark.asyncio |
| 266 | +async def test_list_artifact_versions_metadata(): |
| 267 | + client = AdkWebServerClient() |
| 268 | + mock_response = MagicMock() |
| 269 | + mock_response.json.return_value = [ |
| 270 | + { |
| 271 | + "version": 0, |
| 272 | + "canonicalUri": "artifact://.../versions/0", |
| 273 | + "customMetadata": {}, |
| 274 | + "createTime": 100.0, |
| 275 | + }, |
| 276 | + { |
| 277 | + "version": 1, |
| 278 | + "canonicalUri": "artifact://.../versions/1", |
| 279 | + "customMetadata": {"foo": "bar"}, |
| 280 | + "createTime": 200.0, |
| 281 | + "mimeType": "application/json", |
| 282 | + }, |
| 283 | + ] |
| 284 | + |
| 285 | + with patch("httpx.AsyncClient") as mock_client_class: |
| 286 | + mock_client = AsyncMock() |
| 287 | + mock_client.get.return_value = mock_response |
| 288 | + mock_client_class.return_value = mock_client |
| 289 | + |
| 290 | + metadata_list = await client.list_artifact_versions_metadata( |
| 291 | + app_name="app", |
| 292 | + user_id="user", |
| 293 | + session_id="session", |
| 294 | + artifact_name="report", |
| 295 | + ) |
| 296 | + |
| 297 | + assert len(metadata_list) == 2 |
| 298 | + assert all(isinstance(item, ArtifactVersion) for item in metadata_list) |
| 299 | + assert metadata_list[1].custom_metadata == {"foo": "bar"} |
| 300 | + mock_client.get.assert_called_once_with( |
| 301 | + "/apps/app/users/user/sessions/session/artifacts/report/versions/metadata" |
| 302 | + ) |
| 303 | + mock_response.raise_for_status.assert_called_once() |
| 304 | + |
| 305 | + |
227 | 306 | @pytest.mark.asyncio |
228 | 307 | async def test_close(): |
229 | 308 | client = AdkWebServerClient() |
|
0 commit comments