"""Tests for Persister.""" from unittest.mock import MagicMock from unittest.mock import Mock import sentry_sdk from sqlalchemy.exc import OperationalError from ows_product_physical.connector.mysql import db_session from ows_product_physical.models import persister from ows_product_physical.models.product_physical import ProductPhysical def test_persister_create_product_physical( db_with_data, valid_post_product_data, ): """Assert product_physical table was written to.""" with db_session() as session: # Remove pre-seeded product physical session.query(ProductPhysical).delete() resp = persister._create_product_physical( session, valid_post_product_data, 42) assert resp.status == 201 def test_persister_create_product_physical_fail( monkeypatch, db_fixture, valid_post_product_data, valid_create_response_error): """Assert product_physical fail exception was captured.""" monkeypatch.setattr( sentry_sdk, 'capture_exception', value=MagicMock()) session = Mock() session.flush = MagicMock(side_effect=OperationalError('test', None, None)) resp = persister._create_product_physical( session, valid_post_product_data, 42) assert resp.status == 500 assert sentry_sdk.capture_exception.called def test__map_physical_product_fields_to_dict( valid_post_product_data): """Test utility function properly maps fields to column names.""" mapped_data = persister._map_physical_product_fields_to_dict( valid_post_product_data, 42) assert mapped_data == { 'packaging_id': 2, 'exclusive_for': 'Taco Bell', 'initial_stock': 4500, 'units_per_set': 2, 'box_lot': 30, 'pricing': 9.99, 'end_date': '2016-12-12', 'discount': 'discount 15', 'explicit': 'Y', 'manufacturing_obligation': 'N', 'pline': '2001 Demo Publishing', 'individual': 'Y', 'release_id': 42, 'display_configuration': '2 x CD + Viking Ship', 'japan_distribution': 'yes_other', 'edition': 'normal_edition'} def test__map_physical_product_fields_to_dict_remapped_fields( valid_post_product_data): """Test utility function properly maps remapped fields to column names.""" del valid_post_product_data['artist_is_individual'] mapped_data = persister._map_physical_product_fields_to_dict( valid_post_product_data) assert mapped_data == { 'packaging_id': 2, 'exclusive_for': 'Taco Bell', 'initial_stock': 4500, 'units_per_set': 2, 'box_lot': 30, 'pricing': 9.99, 'end_date': '2016-12-12', 'discount': 'discount 15', 'explicit': 'Y', 'manufacturing_obligation': 'N', 'pline': '2001 Demo Publishing', 'display_configuration': '2 x CD + Viking Ship', 'japan_distribution': 'yes_other', 'edition': 'normal_edition'}