"""Test logic.""" from owsclient import OwsClient import pytest from pytest_mock import MockerFixture from src.exceptions import ProductNotSubmittedException from src.logic import complete_product def test_call_endpoint(mocker: MockerFixture): """Test call_endpoint.""" mock_client = mocker.MagicMock(spec=OwsClient) mock_client.put.return_value.status_code = 200 mocker.patch.object(complete_product, 'get_ows_client', return_value=mock_client) complete_product.call_endpoint('approve', 1) mock_client.put.assert_called_once_with( 'ows-product-digital', '/product/audio/1/approve', ) def test_call_endpoint_will_not_deliver(mocker: MockerFixture): """Test call_endpoint_will_not_deliver.""" mock_client = mocker.MagicMock(spec=OwsClient) mock_client.put.return_value.status_code = 200 mocker.patch.object(complete_product, 'get_ows_client', return_value=mock_client) complete_product.call_endpoint_will_not_deliver(1) mock_client.put.assert_called_once_with( 'ows-product-digital', '/product/1/not_for_distribution', json={ 'not_for_distribution': 'ReviewedWontDeliver', 'release_status': 'label_processing', }, ) def test_result_handler_success(mocker: MockerFixture): """Test result_handler with successful response.""" mock_response = mocker.MagicMock() mock_response.status_code = 200 actual = complete_product.result_handler(mock_response) assert actual is None def test_result_handler_not_submitted(mocker: MockerFixture): """Test result_handler with an unsubmitted product.""" mock_response = mocker.MagicMock() mock_response.status_code = 400 mock_response.json.return_value = {'message': 'product not in submitted state'} with pytest.raises(ProductNotSubmittedException) as e: complete_product.result_handler(mock_response) assert e.value.args[0] == 'Product not in submitted state' def test_result_handler_error(mocker: MockerFixture): """Test result_handler with an error response.""" mock_response = mocker.MagicMock() mock_response.status_code = 500 mock_response.text = '{"foo": "bar"}' with pytest.raises(Exception) as e: complete_product.result_handler(mock_response) assert e.value.args[0] == '{"foo": "bar"}' def test_complete_product_digital_approve(mocker: MockerFixture): """Test approval logic.""" mock_client = mocker.MagicMock(spec=OwsClient) mock_client.put.return_value.status_code = 200 mocker.patch.object(complete_product, 'get_ows_client', return_value=mock_client) actual = complete_product.complete_product_digital('approve', 1, None) assert actual is None mock_client.put.assert_called_once_with( 'ows-product-digital', '/product/audio/1/approve', ) def test_complete_product_digital_reject(mocker: MockerFixture): """Test rejection logic.""" mock_client = mocker.MagicMock(spec=OwsClient) mock_client.put.return_value.status_code = 200 mocker.patch.object(complete_product, 'get_ows_client', return_value=mock_client) actual = complete_product.complete_product_digital('reject', 1, None) assert actual is None mock_client.put.assert_called_once_with( 'ows-product-digital', '/product/audio/1/reject', ) def test_complete_product_digital_will_not_deliver(mocker: MockerFixture): """Test will not deliver logic.""" mock_client = mocker.MagicMock(spec=OwsClient) mock_client.put.return_value.status_code = 200 mocker.patch.object(complete_product, 'get_ows_client', return_value=mock_client) actual = complete_product.complete_product_digital('reject', 1, True) assert actual is None mock_client.put.assert_called_once_with( 'ows-product-digital', '/product/1/not_for_distribution', json={ 'not_for_distribution': 'ReviewedWontDeliver', 'release_status': 'label_processing', }, ) def test_complete_product_digital_invalid_op(): """Test invalid resolution.""" with pytest.raises(AssertionError): complete_product.complete_product_digital('foo', 1, None)