"""Tests for OWS Assets API Client.""" from unittest.mock import MagicMock from unittest.mock import patch import pytest from src.connectors import ows_assets @patch('src.connectors.ows_assets.datetime') @patch('src.connectors.ows_assets.client') def test_post_asset_status_success(mock_client, mock_datetime): """Test post_asset_status with a successful response.""" mock_datetime.now.return_value.strftime.return_value = '2026-03-04T12:00:00.000000Z' mock_response = MagicMock() mock_response.status_code = 200 mock_client.post.return_value = mock_response ows_assets.post_asset_status('file.ext', 'success', 'All good', {'key': 'value'}) mock_client.post.assert_called_once() call_kwargs = mock_client.post.call_args assert call_kwargs.kwargs['json']['filename'] == 'file.ext' assert call_kwargs.kwargs['json']['status'] == 'success' assert call_kwargs.kwargs['json']['description'] == 'All good' assert call_kwargs.kwargs['json']['message'] == {'key': 'value'} assert call_kwargs.kwargs['json']['timestamp'] == '2026-03-04T12:00:00.000000Z' @patch('src.connectors.ows_assets.datetime') @patch('src.connectors.ows_assets.client') def test_post_asset_status_404_ignored(mock_client, mock_datetime): """Test post_asset_status silently ignores 404 responses.""" mock_datetime.now.return_value.strftime.return_value = '2026-03-04T12:00:00.000000Z' mock_response = MagicMock() mock_response.status_code = 404 mock_client.post.return_value = mock_response # Should not raise ows_assets.post_asset_status('file.ext', 'success', 'desc', {'key': 'value'}) mock_client.post.assert_called_once() @patch('src.connectors.ows_assets.datetime') @patch('src.connectors.ows_assets.client') def test_post_asset_status_non_200_raises_exception(mock_client, mock_datetime): """Test post_asset_status raises Exception on non-200/non-404 status.""" mock_datetime.now.return_value.strftime.return_value = '2026-03-04T12:00:00.000000Z' mock_response = MagicMock() mock_response.status_code = 500 mock_response.text = 'Internal Server Error' mock_client.post.return_value = mock_response with pytest.raises(Exception, match='Failed to post to ows-assets'): ows_assets.post_asset_status('file.ext', 'error', 'desc', {'key': 'value'}) mock_client.post.assert_called_once() @patch('src.connectors.ows_assets.datetime') @patch('src.connectors.ows_assets.client') def test_post_asset_status_client_exception(mock_client, mock_datetime): """Test post_asset_status raises when client.post throws an exception.""" mock_datetime.now.return_value.strftime.return_value = '2026-03-04T12:00:00.000000Z' mock_client.post.side_effect = ConnectionError('Connection refused') with pytest.raises(ConnectionError, match='Connection refused'): ows_assets.post_asset_status('file.ext', 'error', 'desc', {'key': 'value'}) mock_client.post.assert_called_once()