"""Tests for physical product logic.""" from unittest.mock import MagicMock from oto import response from ows_product_physical.constant import error from ows_product_physical.constant import field from ows_product_physical.logic import product_physical_supply_chain_metadata from ows_product_physical.models import persister from ows_product_physical.models \ import product_physical_supply_chain_metadata \ as product_physical_supply_chain_metadata_model def test_get_product_supply_chain_metadata(monkeypatch): """Test get product supply chain metadata success.""" monkeypatch.setattr(persister, 'get_product_by_id', value=MagicMock( return_value=response.Response(message={ 'project_id': 47, field.PRODUCT_ID: 1999}))) monkeypatch.setattr( product_physical_supply_chain_metadata_model, 'get_product_supply_chain_metadata', value=MagicMock(return_value=response.Response(message={ 'items': 'Test'}, status=200))) result = product_physical_supply_chain_metadata. \ get_product_supply_chain_metadata(product_id=1999) assert result.message['items'] == 'Test' assert persister.get_product_by_id.called is True def test_set_physical_supply_chain_metadata(monkeypatch, data_to_be_inserted): """Test get product supply chain metadata success.""" monkeypatch.setattr(persister, 'get_product_by_id', value=MagicMock( return_value=response.Response(message={ 'project_id': 47, field.PRODUCT_ID: 1999}))) monkeypatch.setattr( product_physical_supply_chain_metadata_model, 'set_physical_supply_chain_metadata', value=MagicMock(return_value=response.Response(message={ 'metadata': 'Test'}, status=200))) result = product_physical_supply_chain_metadata. \ set_physical_supply_chain_metadata( 1999, data_to_be_inserted, None, None) assert result.message['metadata'] == 'Test' def test_set_physical_supply_chain_metadata_fail( monkeypatch, valid_get_header, data_to_be_inserted): """Test get inventory fails when get inventory mysql error.""" monkeypatch.setattr(persister, 'get_product_by_id', value=MagicMock( return_value=response.Response(message={ 'project_id': 47, field.PRODUCT_ID: 1999}))) monkeypatch.setattr( product_physical_supply_chain_metadata_model, 'set_physical_supply_chain_metadata', value=MagicMock(return_value=response.create_error_response( code=error.INTERNAL_ERROR, message='mysql error', status=500))) result = product_physical_supply_chain_metadata. \ set_physical_supply_chain_metadata(1999, data_to_be_inserted) assert result.status == 500 assert product_physical_supply_chain_metadata_model. \ set_physical_supply_chain_metadata.called def test_delete_supply_chain_metadata_success( monkeypatch, fixture_response_ok): """Test delete product supply chain metadata success.""" monkeypatch.setattr(persister, 'get_product_by_id', value=MagicMock( return_value=response.Response(message={ 'project_id': 47, field.PRODUCT_ID: 1999}))) monkeypatch.setattr( product_physical_supply_chain_metadata_model, 'delete_supply_chain_metadata', value=MagicMock(return_value=response.Response( message={'status': 'ok'}, status=200))) result = product_physical_supply_chain_metadata. \ delete_supply_chain_metadata(123, 1, None, None) assert result.message['status'] == fixture_response_ok.message['status'] def test_delete_supply_chain_metadata_by_product_and_store( monkeypatch, fixture_response_ok, valid_oa_orchard_user_id): """Test delete supply chain metadata success by product_id and store_id.""" orchard_user_id = valid_oa_orchard_user_id monkeypatch.setattr(persister, 'get_product_by_id', value=MagicMock( return_value=response.Response(message={ 'project_id': 47, field.PRODUCT_ID: 1999}))) monkeypatch.setattr( product_physical_supply_chain_metadata_model, 'delete_supply_chain_metadata_by_product_and_store', value=MagicMock(return_value=response.Response( message={'status': 'ok'}, status=200))) result = product_physical_supply_chain_metadata. \ delete_supply_chain_metadata_by_product_and_store( 123, 6, None, None, orchard_user_id) assert result.message['status'] == fixture_response_ok.message['status'] def test_delete_supply_chain_metadata_failure( monkeypatch, valid_delete_header, valid_alw_orchard_user_id): """Test delete product supply chain metadata with failure.""" account_type = valid_delete_header['Grass-Account-Type'] account_id = valid_delete_header['Grass-Account-Id'] monkeypatch.setattr( product_physical_supply_chain_metadata_model, 'delete_supply_chain_metadata_by_product_and_store', value=MagicMock(return_value=response.create_fatal_response( message='some error occurred'))) monkeypatch.setattr(persister, 'get_product_by_id', value=MagicMock( return_value=response.Response(message={ 'project_id': 47, field.PRODUCT_ID: 1999}))) result = product_physical_supply_chain_metadata.\ delete_supply_chain_metadata_by_product_and_store( 'dummy_data', 'dummy_store_id', account_type, account_id, valid_alw_orchard_user_id) assert result.status == 403