from unittest.mock import Mock from requests.models import Response import pytest from labelaudit.connectors import api_client as api_connector from labelaudit.lib.vapi.api_client import ApiClient from labelaudit.logic import audit_prep_report @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 @pytest.fixture def ok_multi_results(): return { 'pagination': {'limit': 100, 'offset': 0, 'totalRecords': 48}, 'sort': {'sortOrder': 'DESC', 'sortBy': 'upc'}, 'youtubeAuditPrepReport': [ { 'artistName': 'Gabriel Pérez', 'cmsAccount': None, 'dateAddedToOA': '2005-07-14', 'youtubeCarveout': 'NO' }, { 'artistName': 'René Pretschner Band', 'cmsAccount': None, 'dateAddedToOA': '2005-07-14', 'youtubeCarveout': 'NO' }]} @pytest.fixture def vapi_fault(): return {'fault': {'foo': 'is invalid', 'bar': 'is invalid too'}} def test_success_response_format_on_fetch( monkeypatch, vapi_client, ok_multi_results): response = Response() response.status_code = 200 monkeypatch.setattr(vapi_client, 'request', Mock(return_value=response)) monkeypatch.setattr(Response, 'json', Mock(return_value=ok_multi_results)) fake_params = {'a': 'a', 'b': 'b'} results = audit_prep_report.fetch(**fake_params) assert results.message['total_records'] == 48 assert results.message['report_rows'] == ok_multi_results[ 'youtubeAuditPrepReport'] def test_error_response_format_on_fetch( monkeypatch, vapi_client, vapi_fault): response = Response() response.status_code = 400 monkeypatch.setattr(vapi_client, 'request', Mock(return_value=response)) monkeypatch.setattr(Response, 'json', Mock(return_value=vapi_fault)) fake_params = {'a': 'a', 'b': 'b'} results = audit_prep_report.fetch(**fake_params) assert results.message is None assert results.errors == vapi_fault['fault']