"""Module with tests for validate_upc_for_product.""" import flexmock from oto import response import pytest from assets.constants import error from assets.logic import validate_upc_for_product from assets.models import ows_product from assets.models import ows_track CORRECT_UPC = 10001 INCORRECT_UPC = 10002 @pytest.fixture def correct_validate_track_ownership_data(): """Correct data for validate_product_track_ownership call.""" return { 'product_id': 100, 'track_unique_id': 99, } @pytest.fixture def validate_track_ownership_mocks(): """Success mocks for validate_product_track_ownership.""" product_tracks_response_body = { 'items': [ { 'tuid': 99, 'product_id': 100, 'meta_language_code': 'EN', 'track_name': 'Example Track', 'track_number': 1, 'volume_number': 1, 'version': '1', 'isrc': 'US23123123001', 'upc': '12321231231', 'p_info': '???', 'explicit': 'Y', 'ownership_rights': 'owner', 'recording_country_id': 1, 'first_producer_nationality_id': 1, 'artists': [], 'writers': [], 'localizations': [], 'status': 'TBD', 'error_msg': 'Validation failed', 'errors': [] } ], 'pagination': { 'type': 'none', 'total_records': 2 } } return { 'get_tracks_by_product_id_response': response.Response( product_tracks_response_body) } def test_validate_upc_for_product_success(): """Test for success of validate_upc_for_product.""" (flexmock(ows_product) .should_receive( 'get_product_by_id') .with_args( product_id=123) .and_return(response.Response({'upc': CORRECT_UPC})) ) result = validate_upc_for_product.validate_upc_for_product( product_id=123, upc=CORRECT_UPC) assert result assert result.status == 200 def test_validate_upc_for_product_failure(): """Test for failure of validate_upc_for_product with wrong upc.""" (flexmock(ows_product) .should_receive( 'get_product_by_id') .with_args( product_id=123) .and_return(response.Response({'upc': INCORRECT_UPC})) ) result = validate_upc_for_product.validate_upc_for_product( product_id=123, upc=CORRECT_UPC) assert not result assert result.status == 403 assert result.errors['code'] == error.ERROR_CODE_PRODUCT_ID_UPC_MISMATCH def test_validate_upc_for_product_failure_ows_product(): """Test for failure of validate_upc_for_product with wrong upc.""" (flexmock(ows_product) .should_receive( 'get_product_by_id') .with_args( product_id=123) .and_return(response.create_fatal_response('ows_failure_message')) ) result = validate_upc_for_product.validate_upc_for_product( product_id=123, upc=CORRECT_UPC) assert not result assert result.status == 500 assert result.errors['message'] == 'ows_failure_message' def test_validate_product_track_ownership_success( correct_validate_track_ownership_data, validate_track_ownership_mocks): """Test for success of validate_product_track_ownership.""" (flexmock(ows_track) .should_receive('get_tracks_by_product_id') .with_args( product_id=correct_validate_track_ownership_data['product_id']) .and_return( validate_track_ownership_mocks['get_tracks_by_product_id_response']) ) result = validate_upc_for_product.validate_product_track_ownership( **correct_validate_track_ownership_data ) assert result assert result.status == 200 def test_validate_product_track_ownership_failure( correct_validate_track_ownership_data): """Test for failure of validate_product_track_ownership.""" (flexmock(ows_track) .should_receive('get_tracks_by_product_id') .with_args(product_id=correct_validate_track_ownership_data['product_id']) .and_return(response.create_fatal_response('ows_failure_message'))) result = validate_upc_for_product.validate_product_track_ownership( **correct_validate_track_ownership_data ) assert not result assert result.status == 500 assert result.errors['message'] == 'ows_failure_message' def test_validate_product_track_ownership_with_not_belonging_track( correct_validate_track_ownership_data, validate_track_ownership_mocks): """Test for failure of validate_product_track_ownership.""" (flexmock(ows_track) .should_receive('get_tracks_by_product_id') .with_args( product_id=correct_validate_track_ownership_data['product_id']) .and_return( validate_track_ownership_mocks['get_tracks_by_product_id_response']) ) not_belonging_track_id = 2 result = validate_upc_for_product.validate_product_track_ownership( correct_validate_track_ownership_data['product_id'], not_belonging_track_id ) assert not result assert result.status == 403 assert result.errors['code'] == error.ERROR_CODE_PRODUCT_TRACK_OWNERSHIP