import pytest from unittest.mock import Mock from requests.models import Response from labelaudit.connectors import api_client as api_connector from labelaudit.lib.vapi.api_client import ApiClient from labelaudit.logic import release release_id = 'fake-release-id' @pytest.fixture def ioda_release_mappings_json(): return { 'iodaReleaseMappings': [ { 'id': '23', 'orchardReleaseId': '612691', 'orchardUpc': '887845932334', 'orchardUpcText': '887845932334', 'iodaUpc': '702767000124', 'iodaDisplayArtist': 'J-Live', 'iodaReleaseId': '100913', 'iodaReleaseName': 'All Of The Above', 'iodaVendorReleaseId': '533', 'createdBy': 'Michael Luckenbill', 'createdDate': '2013-03-14 23:40:15', 'updatedBy': None, 'updatedDate': '2013-03-14 23:40:15', 'orchardReleaseType': 'audio', 'orchardArtistInfoArtistId': '394447', 'iodaPrimaryArtistId': '1218', 'migrationType': 'duplicate', 'iodaTrackCount': '21' } ] } @pytest.fixture def ioda_release_mappings_empty_json(): return { 'iodaReleaseMappings': [] } @pytest.fixture def release_json(): return { 'release': { 'release_id': 6, 'upc': '100987181126', 'display_upc': '100987181126', 'release_name': 'Pain Killer', 'label': 'Beast Entertainment', 'description': None, 'release_date': '2008-11-18', 'listprice': None, 'sellprice': None, 'display': 'Y', 'deletions': 'Y', 'distribution': 'digital', 'applfees': None, 'referral_id': None, 'dateAddedRemove': { 'date': '2009-06-19 17:42:16', 'timezone_type': 3, 'timezone': 'America/New_York' } } } @pytest.fixture def vapi_fault(): return {'fault': {'foo': 'is invalid', 'bar': 'is invalid too'}} @pytest.fixture def vapi_client(monkeypatch): base_url = 'https://api.notreal.com' access_token = 'not-a-real-token-either' api_client = ApiClient(base_url, access_token) monkeypatch.setattr( api_connector, 'get_client', Mock(return_value=api_client)) return api_client def fake_result(monkeypatch, vapi_status, vapi_json=None): vapi_response = Response() vapi_response.status_code = vapi_status monkeypatch.setattr(vapi_response, 'json', Mock(return_value=vapi_json)) return vapi_response def test_fetch_orchard_upc_success(monkeypatch, vapi_client, release_json): success_result = fake_result(monkeypatch, 200, release_json) monkeypatch.setattr(vapi_client, 'get', Mock(return_value=success_result)) result = release.fetch_orchard_upc(release_id) assert result.message == '100987181126' def test_fetch_orchard_upc_failure(monkeypatch, vapi_client, vapi_fault): failure_result = fake_result(monkeypatch, 500, vapi_fault) monkeypatch.setattr(vapi_client, 'get', Mock(return_value=failure_result)) result = release.fetch_orchard_upc(release_id) assert result.message is None assert result.errors == vapi_fault['fault'] def test_fetch_ioda_upc_success(monkeypatch, vapi_client, ioda_release_mappings_json): success_result = fake_result( monkeypatch, 200, ioda_release_mappings_json) monkeypatch.setattr(vapi_client, 'get', Mock(return_value=success_result)) result = release.fetch_ioda_upc(release_id) assert result.message == '702767000124' def test_fetch_ioda_upc_not_found(monkeypatch, vapi_client, ioda_release_mappings_empty_json): success_result = fake_result( monkeypatch, 200, ioda_release_mappings_empty_json) monkeypatch.setattr(vapi_client, 'get', Mock(return_value=success_result)) result = release.fetch_ioda_upc(release_id) assert result.message is None def test_fetch_ioda_upc_failure(monkeypatch, vapi_client, vapi_fault): failure_result = fake_result(monkeypatch, 500, vapi_fault) monkeypatch.setattr(vapi_client, 'get', Mock(return_value=failure_result)) result = release.fetch_orchard_upc(release_id) assert result.message is None assert result.errors == vapi_fault['fault']