import pytest from masters_registry.constant import db_const from masters_registry.constant import error from masters_registry.validation import upc_validation TEST_UPC = '123456789120' def success_response(): return { 123456789120: [ { 'track_name': 'Track 1', 'isrc': 'USA560319122', 'tuid': 140030, 'deletions': 'N', 'product_type_id': db_const.MUSIC_PRODUCT_TYPE_ID, 'upc': 123456789120, 'release_status': 'in_content', 'not_for_distribution': 'N', 'track_type': 'music', 'distribution_context_type': ( db_const.DIGITAL_DISTRIBUTION_FORMAT), }] } def upc_invalid_status(): return { 123456789120: [ { 'track_name': 'Track 1', 'isrc': 'USA560319122', 'tuid': 140030, 'deletions': 'N', 'product_type_id': db_const.MUSIC_PRODUCT_TYPE_ID, 'upc': 123456789120, 'release_status': 'invalid_status', 'not_for_distribution': 'N', 'track_type': 'music', 'distribution_context_type': ( db_const.DIGITAL_DISTRIBUTION_FORMAT), }] } def upc_invalid_product_type(): """UPC with invalid product type.""" return { 123456789120: [ { 'track_name': 'Track 1', 'isrc': 'USA560319122', 'tuid': 140030, 'deletions': 'N', 'product_type_id': 2, 'upc': 123456789120, 'release_status': 'in_content', 'not_for_distribution': 'N', 'track_type': 'music', 'distribution_context_type': ( db_const.DIGITAL_DISTRIBUTION_FORMAT), }] } def upc_invalid_distribution_format(): """UPC with invalid product type.""" return { 123456789120: [ { 'track_name': 'Track 1', 'isrc': 'USA560319122', 'tuid': 140030, 'deletions': 'N', 'product_type_id': db_const.MUSIC_PRODUCT_TYPE_ID, 'upc': 123456789120, 'release_status': 'in_content', 'not_for_distribution': 'N', 'track_type': 'music', 'distribution_context_type': 'physical', }] } def upc_not_for_distr_status(): return { 123456789120: [ { 'track_name': 'Track 1', 'isrc': 'USA560319122', 'tuid': 140030, 'deletions': 'N', 'product_type_id': db_const.MUSIC_PRODUCT_TYPE_ID, 'upc': 123456789120, 'release_status': 'in_content', 'not_for_distribution': 'Not for distribution UPC', 'track_type': 'music', 'distribution_context_type': ( db_const.DIGITAL_DISTRIBUTION_FORMAT), }] } def upc_bundled_status(): return { 123456789120: [ { 'track_name': 'Track 1', 'isrc': 'USA560319122', 'tuid': 140030, 'deletions': 'N', 'product_type_id': db_const.MUSIC_PRODUCT_TYPE_ID, 'upc': 123456789120, 'release_status': 'in_content', 'not_for_distribution': 'N', 'track_type': 'music', 'distribution_context_type': ( db_const.DIGITAL_DISTRIBUTION_FORMAT), }, { 'track_name': 'Track 1', 'isrc': 'USA560319122', 'tuid': 140030, 'deletions': 'N', 'product_type_id': db_const.MUSIC_PRODUCT_TYPE_ID, 'upc': 123456789120, 'release_status': 'in_content', 'not_for_distribution': 'N', 'track_type': 'music_video', 'distribution_context_type': ( db_const.DIGITAL_DISTRIBUTION_FORMAT), } ] } @pytest.mark.parametrize('success_response', [success_response()]) def test_upc_validation_success(success_response): result = upc_validation.compare( origin_upcs=['123456789120'], from_db_upcs=success_response) assert result.status == 200 @pytest.mark.parametrize('origin_upc, expected_response, message', [ (['123456789121'], success_response(), error.UPC_NOT_FOUND), (['123456789120'], upc_invalid_status(), error.UPC_INVALID_STATUS), (['123456789120'], upc_not_for_distr_status(), error.UPC_NOT_FOR_DISTRIBUTION), (['123456789120'], upc_bundled_status(), error.UPC_BUNDLED), (['123456789120'], upc_invalid_product_type(), error.INVALID_UPC_TYPE.format('123456789120')), (['123456789120'], upc_invalid_distribution_format(), error.INVALID_UPC_TYPE.format('123456789120')), ]) def test_upc_validation_fails(origin_upc, expected_response, message): result = upc_validation.compare( origin_upcs=origin_upc, from_db_upcs=expected_response) assert result.status == 400 assert result.message[0]['error_message'] == message @pytest.mark.parametrize('origin_upc, upcs_from_db, expected_error', [ (123456789120, success_response(), ''), (123456789121, success_response(), error.UPC_NOT_FOUND), (123456789120, upc_invalid_status(), error.UPC_INVALID_STATUS), (123456789120, upc_not_for_distr_status(), error.UPC_NOT_FOR_DISTRIBUTION), (123456789120, upc_bundled_status(), error.UPC_BUNDLED) ]) def test_compare_single_upc_not_found( origin_upc, upcs_from_db, expected_error): """Should return error message based on parameters.""" result = upc_validation.compare_single_upc(origin_upc, upcs_from_db) assert result == expected_error