"""Tests for physical product logic.""" from unittest.mock import MagicMock from oto import response from ows_product_physical.logic import product_physical from ows_product_physical.models import ows_product from ows_product_physical.models import ows_product_configuration from ows_product_physical.models import product_physical_supply_chain_info def test_insert_supply_chain_defaults_success( monkeypatch, existing_product_response, distribution_format_response, supply_chain_default_response, supply_chain_response_after_insertion): """Assert product code is unique for subaccount id.""" product_id = 123 monkeypatch.setattr( product_physical_supply_chain_info, 'get_product_physical_supply_chain_info', value=MagicMock(return_value=[])) monkeypatch.setattr( ows_product, 'get_product', value=MagicMock( return_value=response.Response( message=existing_product_response))) monkeypatch.setattr( ows_product_configuration, 'get_distribution_format_by_id', value=MagicMock( return_value=response.Response( message=distribution_format_response))) monkeypatch.setattr( ows_product_configuration, 'get_supply_chain_defaults', value=MagicMock( return_value=response.Response( message=supply_chain_default_response))) monkeypatch.setattr( product_physical, '_insert_supply_chain_defaults', value=MagicMock( return_value=response.Response( message=supply_chain_response_after_insertion))) result = product_physical.product_physical_insert_defaults( product_id) assert result.status == 200 assert result.message.message == supply_chain_response_after_insertion def test_supply_chain_defaults_already_set( monkeypatch, valid_get_supply_chain_info_response): """Assert product code is unique for subaccount id.""" product_id = 123 monkeypatch.setattr( product_physical_supply_chain_info, 'get_product_physical_supply_chain_info', value=MagicMock( return_value=valid_get_supply_chain_info_response)) result = product_physical.product_physical_insert_defaults( product_id) assert result.status == 200 assert result.message == valid_get_supply_chain_info_response def test_with_unavailable_product( monkeypatch): """Assert product code is unique for subaccount id.""" product_id = 123 unavailable_product_response = { 'code': 'internal_error', 'message': 'error fetching product' } monkeypatch.setattr( product_physical_supply_chain_info, 'get_product_physical_supply_chain_info', value=MagicMock(return_value=[])) monkeypatch.setattr( ows_product, 'get_product', value=MagicMock( return_value=response.Response( message=unavailable_product_response, status=500))) result = product_physical.product_physical_insert_defaults( product_id) assert result.status == 500 assert result.message == unavailable_product_response def test_with_unavailable_distribution_format_record( monkeypatch, existing_product_response): """Assert product code is unique for subaccount id.""" product_id = 123 unavailable_distribution_format_record = { 'code': 'not_found_error', 'message': 'No data exists for distribution format ID.' } monkeypatch.setattr( product_physical_supply_chain_info, 'get_product_physical_supply_chain_info', value=MagicMock(return_value=[])) monkeypatch.setattr( ows_product, 'get_product', value=MagicMock( return_value=response.Response( message=existing_product_response))) monkeypatch.setattr( ows_product_configuration, 'get_distribution_format_by_id', value=MagicMock( return_value=response.Response( message=unavailable_distribution_format_record, status=500))) result = product_physical.product_physical_insert_defaults( product_id) assert result.status == 500 assert result.message == unavailable_distribution_format_record def test_for_insert_supply_chain_default_success( monkeypatch, existing_product_response, supply_chain_default_repsponse_with_message, supply_chain_response_single_insertion, supply_chain_response_insertion_array): """Assert product code is unique for subaccount id.""" product_id = 123 distribution_format_media_id = 7 monkeypatch.setattr( product_physical_supply_chain_info, 'create', value=MagicMock( return_value=response.Response( message=supply_chain_response_single_insertion))) result = product_physical._insert_supply_chain_defaults( distribution_format_media_id, supply_chain_default_repsponse_with_message, product_id) assert result == supply_chain_response_insertion_array