"""Unit tests for UPC.""" from unittest.mock import MagicMock from unittest.mock import patch import sentry_sdk from sqlalchemy.exc import SQLAlchemyError from product.models import upc from tests.factories import upc as upc_factory from tests.testutils import db def test_to_dict(): """Test that the to dict function only returns the expected properties.""" test_upc = upc.Upc(upc=191773023478, status='unused') expected_dict = {'upc': test_upc.upc, 'status': 'unused'} assert test_upc.to_dict() == expected_dict @db.test_schema def test_get_upcs_by_values_success(): """Test that an existing upc can be fetched by upc value.""" upc_value = 191773023478 upc_model = upc_factory.UpcFactory.build(upc=upc_value) db.seed_models(upc_model) response = upc.get_upcs_by_values([upc_value]) assert response.message[0].get('upc') == upc_value @db.test_schema def test_get_upcs_by_values_not_found(): """Test that an existing upc can be fetched by upc value.""" upc_value = 191773023478 response = upc.get_upcs_by_values([upc_value]) assert response.status == 404 assert response.message == [] @patch('product.connectors.mysql._db_session') def test_get_upcs_by_values_db_failure(db_session, mocker): """Test get_upcs_by_values db failure.""" mocker.patch.object( sentry_sdk, 'capture_exception', return_value='', autospec=True) session = MagicMock() session.query = MagicMock(side_effect=SQLAlchemyError()) db_session.return_value = session result = upc.get_upcs_by_values([123]) assert result.status == 500 assert sentry_sdk.capture_exception.called