"""Tests for pricing copy logic.""" from flexmock import flexmock from oto import response from pricing.logic import pricing_copy from pricing.logic import product_orchard_pricing_tier import pytest @pytest.fixture def fixture_product_orchard_pricing_tier_track(): """Fixture for orchard_pricing_tier album.""" return response.Response({ 'product_orchard_pricing_tier_id': 3646627, 'orchard_pricing_tier_id': 16, 'pricing_family_id': 2, 'product_id': 1}) @pytest.fixture def fixture_product_orchard_pricing_tier_album(): """Fixture for orchard_pricing_tier album.""" return response.Response({ 'product_orchard_pricing_tier_id': 3646628, 'orchard_pricing_tier_id': 16, 'pricing_family_id': 3, 'product_id': 1}) def test_copy_product_pricing_success( fixture_product_orchard_pricing_tier_track, fixture_product_orchard_pricing_tier_album): """Test copy_pricing_for_digital_product success.""" original_product_id = 1 destination_product_id = 2 track_family_id = 2 album_family_id = 3 tracks_tier_id = dict(orchard_pricing_tier_id=( fixture_product_orchard_pricing_tier_track.message.get( 'orchard_pricing_tier_id'))) album_tier_id = dict(orchard_pricing_tier_id=( fixture_product_orchard_pricing_tier_album.message.get( 'orchard_pricing_tier_id'))) (flexmock(product_orchard_pricing_tier) .should_receive('get_by_product_id_and_pricing_family_id') .with_args(original_product_id, track_family_id) .and_return(fixture_product_orchard_pricing_tier_track) .once()) (flexmock(product_orchard_pricing_tier) .should_receive('get_by_product_id_and_pricing_family_id') .with_args(original_product_id, album_family_id) .and_return(fixture_product_orchard_pricing_tier_album) .once()) (flexmock(product_orchard_pricing_tier) .should_receive('update_product_with_orchard_pricing_tier') .with_args( destination_product_id, track_family_id, tracks_tier_id) .and_return(response.Response()) .once()) (flexmock(product_orchard_pricing_tier) .should_receive('update_product_with_orchard_pricing_tier') .with_args( destination_product_id, album_family_id, album_tier_id) .and_return(response.Response()) .once()) result = pricing_copy.copy_pricing_for_digital_product( original_product_id, destination_product_id) assert result def test_copy_product_pricing_tracks_source_not_found( fixture_product_orchard_pricing_tier_track, fixture_product_orchard_pricing_tier_album): """Test copy_pricing_for_digital_product tracks source not found.""" original_product_id = 1 destination_product_id = 2 track_family_id = 2 album_family_id = 3 error_msg = 'No tracks pricing found for this product' (flexmock(product_orchard_pricing_tier) .should_receive('get_by_product_id_and_pricing_family_id') .with_args(original_product_id, track_family_id) .and_return(response.create_not_found_response(error_msg)) .once()) (flexmock(product_orchard_pricing_tier) .should_receive('get_by_product_id_and_pricing_family_id') .and_return(fixture_product_orchard_pricing_tier_album) .with_args(original_product_id, album_family_id) .never()) (flexmock(product_orchard_pricing_tier) .should_receive('update_product_with_orchard_pricing_tier') .and_return(response.Response()) .never()) (flexmock(product_orchard_pricing_tier) .should_receive('update_product_with_orchard_pricing_tier') .and_return(response.Response()) .never()) result = pricing_copy.copy_pricing_for_digital_product( original_product_id, destination_product_id) assert not result assert result.status == 404 assert result.errors.get('message') == error_msg def test_copy_product_pricing_album_source_not_found( fixture_product_orchard_pricing_tier_track): """Test copy_pricing_for_digital_product album source not found.""" original_product_id = 1 destination_product_id = 2 track_family_id = 2 album_family_id = 3 error_msg = 'No album pricing found for this product' (flexmock(product_orchard_pricing_tier) .should_receive('get_by_product_id_and_pricing_family_id') .with_args(original_product_id, track_family_id) .and_return(fixture_product_orchard_pricing_tier_track) .once()) (flexmock(product_orchard_pricing_tier) .should_receive('get_by_product_id_and_pricing_family_id') .with_args(original_product_id, album_family_id) .and_return(response.create_not_found_response(error_msg)) .once()) (flexmock(product_orchard_pricing_tier) .should_receive('update_product_with_orchard_pricing_tier') .and_return(response.Response()) .never()) (flexmock(product_orchard_pricing_tier) .should_receive('update_product_with_orchard_pricing_tier') .and_return(response.Response()) .never()) result = pricing_copy.copy_pricing_for_digital_product( original_product_id, destination_product_id) assert not result assert result.status == 404 assert result.errors.get('message') == error_msg def test_copy_product_pricing_tracks_pricing_copy_failed( fixture_product_orchard_pricing_tier_track, fixture_product_orchard_pricing_tier_album): """Test copy_pricing_for_digital_product tracks pricing copy failed.""" original_product_id = 1 destination_product_id = 2 track_family_id = 2 album_family_id = 3 error_msg = 'Tracks pricing copy failed' tracks_tier_id = dict(orchard_pricing_tier_id=( fixture_product_orchard_pricing_tier_track.message.get( 'orchard_pricing_tier_id'))) album_tier_id = dict(orchard_pricing_tier_id=( fixture_product_orchard_pricing_tier_album.message.get( 'orchard_pricing_tier_id'))) (flexmock(product_orchard_pricing_tier) .should_receive('get_by_product_id_and_pricing_family_id') .with_args(original_product_id, track_family_id) .and_return(fixture_product_orchard_pricing_tier_track) .once()) (flexmock(product_orchard_pricing_tier) .should_receive('get_by_product_id_and_pricing_family_id') .with_args(original_product_id, album_family_id) .and_return(fixture_product_orchard_pricing_tier_album) .once()) (flexmock(product_orchard_pricing_tier) .should_receive('update_product_with_orchard_pricing_tier') .with_args( destination_product_id, track_family_id, tracks_tier_id) .and_return(response.create_fatal_response(error_msg)) .once()) (flexmock(product_orchard_pricing_tier) .should_receive('update_product_with_orchard_pricing_tier') .with_args( destination_product_id, album_family_id, album_tier_id) .and_return(response.Response()) .never()) result = pricing_copy.copy_pricing_for_digital_product( original_product_id, destination_product_id) assert not result assert result.status == 500 assert result.errors.get('message') == error_msg def test_copy_product_pricing_album_pricing_copy_failed( fixture_product_orchard_pricing_tier_track, fixture_product_orchard_pricing_tier_album): """Test copy_pricing_for_digital_product album pricing copy failed.""" original_product_id = 1 destination_product_id = 2 track_family_id = 2 album_family_id = 3 error_msg = 'Album pricing copy failed' tracks_tier_id = dict(orchard_pricing_tier_id=( fixture_product_orchard_pricing_tier_track.message.get( 'orchard_pricing_tier_id'))) album_tier_id = dict(orchard_pricing_tier_id=( fixture_product_orchard_pricing_tier_album.message.get( 'orchard_pricing_tier_id'))) (flexmock(product_orchard_pricing_tier) .should_receive('get_by_product_id_and_pricing_family_id') .with_args(original_product_id, track_family_id) .and_return(fixture_product_orchard_pricing_tier_track) .once()) (flexmock(product_orchard_pricing_tier) .should_receive('get_by_product_id_and_pricing_family_id') .with_args(original_product_id, album_family_id) .and_return(fixture_product_orchard_pricing_tier_album) .once()) (flexmock(product_orchard_pricing_tier) .should_receive('update_product_with_orchard_pricing_tier') .with_args( destination_product_id, track_family_id, tracks_tier_id) .and_return(response.Response()) .once()) (flexmock(product_orchard_pricing_tier) .should_receive('update_product_with_orchard_pricing_tier') .with_args( destination_product_id, album_family_id, album_tier_id) .and_return(response.create_fatal_response(error_msg)) .once()) result = pricing_copy.copy_pricing_for_digital_product( original_product_id, destination_product_id) assert not result assert result.status == 500 assert result.errors.get('message') == error_msg