"""Test Releases Model.""" from unittest.mock import MagicMock from unittest.mock import Mock from unittest.mock import patch import sentry_sdk from sqlalchemy.exc import SQLAlchemyError from ows_product_physical.models \ import product_physical_supply_chain_info as \ product_physical_supply_chain_info_model from tests.utils import db def test_insert_product_phsical_supply_chain( db_fixture, valid_physical_releases, valid_default_data): """Test successful insertion of defalts of supply chain.""" release = product_physical_supply_chain_info_model.create( valid_default_data) assert release.message['id'] == 1 @patch('ows_product_physical.connector.mysql._db_session') def test_insert_supply_chain_defaults( db_session, db_with_data, db_fixture, monkeypatch, mocker, valid_default_data, valid_create_response_error): """Test create defaults of supply chain.""" monkeypatch.setattr( sentry_sdk, 'capture_exception', value=MagicMock()) session = Mock() session.flush = MagicMock(side_effect=SQLAlchemyError()) db_session.return_value = session result = product_physical_supply_chain_info_model.create( valid_default_data) assert result.status == 500 assert sentry_sdk.capture_exception.called @patch('ows_product_physical.connector.mysql._db_session') def test_get_product_physical_supply_chain_info( db_session, db_fixture, db_with_data, valid_get_supply_chain_info_response): """Test query for retrieving information if defaults already set.""" session = Mock() session.query = MagicMock() session.query.filter = MagicMock( return_value=valid_get_supply_chain_info_response) db_session.return_value = session product_id = 2189079 product_physical_supply_chain_info_model. \ get_product_physical_supply_chain_info(product_id) assert session.query.called @patch('ows_product_physical.connector.mysql._db_session') def test_get_product_physical_supply_chain_info_failure( db_session, db_with_data, db_fixture, monkeypatch, mocker, valid_default_data, valid_create_response_error): """Test get_product_physical_supply_chain_info db failure.""" monkeypatch.setattr( sentry_sdk, 'capture_exception', value=MagicMock()) session = Mock() session.flush = MagicMock(side_effect=SQLAlchemyError()) product_id = 2189079 db_session.return_value = session result = product_physical_supply_chain_info_model. \ get_product_physical_supply_chain_info(product_id) assert result.status == 500 def test_get_product_supply_chain_info_by_product_store_id_success( db_fixture): """Test successful retrieval of supply chain info.""" product_id = 123 store_id = 738 db.insert_product_physcial_supply_chain_info() result = product_physical_supply_chain_info_model. \ get_product_supply_chain_info_by_product_store_id( product_id, store_id) assert result.message['product_id'] == product_id def test_get_product_supply_chain_info_by_product_store_id_failure( db_fixture): """Test successful retrieval of supply chain info.""" product_id = 'abc' store_id = 738 db.insert_product_physcial_supply_chain_info() result = product_physical_supply_chain_info_model. \ get_product_supply_chain_info_by_product_store_id( product_id, store_id) assert result.status == 404 def test_update_product_supply_chain_info_by_product_store_id( db_fixture, product_physical_supply_chain_record, mocker, product_physical_supply_chain_record_for_insert): """Test successful insertion or update of metadata.""" product_id = 123 db.insert_product_physcial_supply_chain_info() mocker.patch.object( product_physical_supply_chain_info_model, 'get_product_supply_chain_info_by_product_store_id', return_value=product_physical_supply_chain_record) result = product_physical_supply_chain_info_model. \ update_product_supply_chain_info_by_product_store_id( product_id, product_physical_supply_chain_record_for_insert) assert result.message[0]['product_id'] == product_id def test_update_product_supply_chain_info_by_product_store_id_failure( db_fixture, product_physical_supply_chain_record, mocker, product_physical_supply_chain_record_for_insert): """Test successful insertion or update of metadata.""" product_id = 'abc' db.insert_product_physcial_supply_chain_info() result = product_physical_supply_chain_info_model. \ update_product_supply_chain_info_by_product_store_id( product_id, product_physical_supply_chain_record_for_insert) assert result.status == 404 def test_set_supply_chain_info_by_product_id( db_fixture, product_physical_supply_chain_record_for_insert): """Test successful insertion of defalts of supply chain.""" product_id = 456 result = product_physical_supply_chain_info_model.\ set_supply_chain_info_by_product_id( product_id, product_physical_supply_chain_record_for_insert) assert result.message[0]['product_id'] == product_id