"""Tests for execute-content-transfer PM client.""" import pytest from pytest_mock import MockerFixture from src import config from src.client import execute_content_transfer def test_execute_content_transfer_calls_correct_service_and_path(mocker: MockerFixture) -> None: mock_post = mocker.patch.object(config.ows_client, "post") mock_post.return_value.status_code = 200 mock_post.return_value.json.return_value = { "project_updated": 1, "releases_updated": 2, "video_rows_updated": 3, } result = execute_content_transfer(42) assert result == { "project_updated": 1, "releases_updated": 2, "video_rows_updated": 3, } mock_post.assert_called_once_with( "ows-project-manager", path="/transfer/job/42/execute-content-transfer", ) def test_execute_content_transfer_raises_on_error_status(mocker: MockerFixture) -> None: mock_post = mocker.patch.object(config.ows_client, "post") mock_post.return_value.status_code = 422 mock_post.return_value.text = "unprocessable" with pytest.raises(RuntimeError, match="status=422"): execute_content_transfer(42) def test_execute_content_transfer_raises_on_non_json_response(mocker: MockerFixture) -> None: mock_post = mocker.patch.object(config.ows_client, "post") mock_post.return_value.status_code = 200 mock_post.return_value.json.side_effect = ValueError("not json") with pytest.raises(RuntimeError, match="non-JSON"): execute_content_transfer(42) def test_execute_content_transfer_raises_on_invalid_payload(mocker: MockerFixture) -> None: mock_post = mocker.patch.object(config.ows_client, "post") mock_post.return_value.status_code = 200 mock_post.return_value.json.return_value = { "project_updated": 1, "releases_updated": "2", "video_rows_updated": 3, } with pytest.raises(RuntimeError, match="invalid 'releases_updated'"): execute_content_transfer(42)