"""Unit tests for src/connectors/ows_assets.py.""" from unittest.mock import MagicMock, patch import httpx import pytest from src.connectors import ows_assets @patch("src.connectors.ows_assets.client") def test_get_presigned_url_success(mock_ows_client): """get_presigned_url returns the URL from a successful API response.""" asset_final_id = 12345 expected_url = "http://s3.example.com/asset.jpg" mock_response = MagicMock() mock_response.json.return_value = {"url": expected_url} mock_ows_client.get.return_value = mock_response url = ows_assets.get_presigned_url(asset_final_id) assert url == expected_url mock_ows_client.get.assert_called_once_with( "ows-assets", "/v2/asset/download_url", params={ "asset_final_id": asset_final_id, "expires_in": 300, }, ) mock_response.raise_for_status.assert_called_once() @patch("src.connectors.ows_assets.client") def test_get_presigned_url_raises_on_http_error(mock_ows_client): """get_presigned_url propagates HTTP errors raised by raise_for_status.""" asset_final_id = 12345 mock_response = MagicMock() mock_response.raise_for_status.side_effect = httpx.HTTPStatusError( "Not Found", request=MagicMock(), response=MagicMock() ) mock_ows_client.get.return_value = mock_response with pytest.raises(httpx.HTTPStatusError): ows_assets.get_presigned_url(asset_final_id) mock_ows_client.get.assert_called_once_with( "ows-assets", "/v2/asset/download_url", params={ "asset_final_id": asset_final_id, "expires_in": 300, }, ) @patch("src.connectors.ows_assets.client") def test_post_results_success(mock_ows_client): """post_results POSTs block_text and calls raise_for_status.""" asset_final_id = 12345 block_text = "Sample extracted text" mock_response = MagicMock() mock_ows_client.post.return_value = mock_response ows_assets.post_results(asset_final_id, block_text) mock_ows_client.post.assert_called_once_with( "ows-assets", "/hive-text-recognition", json={ "asset_final_id": asset_final_id, "block_text": block_text, }, ) mock_response.raise_for_status.assert_called_once() @patch("src.connectors.ows_assets.client") def test_post_results_raises_on_http_error(mock_ows_client): """post_results propagates HTTP errors raised by raise_for_status.""" asset_final_id = 12345 block_text = "Sample extracted text" mock_response = MagicMock() mock_response.raise_for_status.side_effect = httpx.HTTPStatusError( "Conflict", request=MagicMock(), response=MagicMock() ) mock_ows_client.post.return_value = mock_response with pytest.raises(httpx.HTTPStatusError): ows_assets.post_results(asset_final_id, block_text) mock_ows_client.post.assert_called_once_with( "ows-assets", "/hive-text-recognition", json={ "asset_final_id": asset_final_id, "block_text": block_text, }, )