"""Tests for Product Distribution Model.""" from unittest.mock import MagicMock from unittest.mock import patch import sentry_sdk from sqlalchemy.exc import SQLAlchemyError from ows_product_physical.constant import header from ows_product_physical.models import product_distribution @patch('ows_product_physical.connector.mysql._db_session') def test_get_product_distribution_sucesss(db_session): """Assert get product distribution was called properly in success case.""" session = MagicMock() session.query = MagicMock() session.query.all = MagicMock() db_session.return_value = session response = product_distribution.get_product_distribution(1234) assert session.query.called assert session.query.call_args[0][0] == \ product_distribution.ProductDistribution assert response.status == 200 @patch('ows_product_physical.connector.mysql._db_session') def test_get_product_distribution_fail( db_session, monkeypatch): """Assert the get product distribution was called properly in fail case.""" monkeypatch.setattr( sentry_sdk, 'capture_exception', value=MagicMock()) session = MagicMock() session.query = MagicMock(side_effect=SQLAlchemyError()) db_session.return_value = session response = product_distribution.get_product_distribution(1234) assert response.status == 500 assert sentry_sdk.capture_exception.called @patch('ows_product_physical.connector.mysql._db_session') def test_delete_product_distribution_sucesss(db_session): """Test delete product distribution was called properly in success case.""" session = MagicMock() session.query = MagicMock() session.query.delete = MagicMock() db_session.return_value = session response = product_distribution.delete_product_distribution(1234) assert session.query.called assert session.query.call_args[0][0] == \ product_distribution.ProductDistribution assert response.status == 200 @patch('ows_product_physical.connector.mysql._db_session') def test_delete_product_distribution_fail( db_session, monkeypatch): """Test delete product distribution was called properly in fail case.""" monkeypatch.setattr( sentry_sdk, 'capture_exception', value=MagicMock()) session = MagicMock() session.query = MagicMock(side_effect=SQLAlchemyError()) db_session.return_value = session response = product_distribution.delete_product_distribution(1234) assert response.status == 500 assert sentry_sdk.capture_exception.called @patch('ows_product_physical.connector.mysql._db_session') def test_set_product_distribution_sucesss( db_session, product_distribution_data, db_release_id, valid_post_header): """Assert save product distribution is called properly in success case.""" user_type, user_id = valid_post_header[header.ORCHARD_USER_ID].split(':') response = product_distribution.set_product_distribution( db_release_id, product_distribution_data, user_type, user_id) assert response.status == 200 assert response.message == {'status': 'success'} @patch('ows_product_physical.connector.mysql._db_session') def test_set_product_distribution_fail( db_session, monkeypatch, product_distribution_data, db_release_id, valid_post_header): """Test set_product_distribution method if it fails.""" user_type, user_id = valid_post_header[header.ORCHARD_USER_ID].split(':') monkeypatch.setattr( sentry_sdk, 'capture_exception', value=MagicMock()) session = MagicMock() session.query = MagicMock(side_effect=SQLAlchemyError) db_session.return_value = session response = product_distribution.set_product_distribution( db_release_id, product_distribution_data, user_type, user_id) assert response.status == 500 assert sentry_sdk.capture_exception.called