from moto import mock_aws import pytest from unittest.mock import Mock from labelaudit.connectors import api_client from labelaudit.lib.vapi.api_client import ApiClient from labelaudit.logic import audit_persistence from labelaudit.logic import prepare_asset_search from labelaudit.logic import audit_release from labelaudit.logic.result import Result base_url = 'https://api.notreal.com' access_token = 'not-a-real-token-either' fake_api_client = ApiClient(base_url, access_token) fake_api_client_mock = Mock(return_value=fake_api_client) @pytest.fixture def releases_response(): fake_response = { 'youtubeAuditReleases': [ { 'youtubeAuditReleaseId': 1 } ], 'sort': { 'sortBy': None, 'sortOrder': None }, 'pagination': { 'limit': 100, 'offset': 0, 'totalRecords': 1 } } return fake_response def fake_result(message, errors, status): result = Result(message=message, errors=errors, status=status) result_mock = Mock(return_value=result) return result_mock @pytest.fixture @mock_aws def mock_connectors(monkeypatch): monkeypatch.setattr(api_client, 'get_client', fake_api_client_mock) @mock_aws def test_start_consumption_sucess(monkeypatch): mock_handle = Mock() monkeypatch.setattr(prepare_asset_search, 'handle_releases', mock_handle) prepare_asset_search.handle_releases(1) assert mock_handle.call_count == 1 @mock_aws def test_handle_releases_set_fail_exception(monkeypatch, mock_connectors): result_mock = fake_result(1, 'explosion', 200) monkeypatch.setattr( audit_release, 'set_audit_releases', result_mock) with pytest.raises(Exception) as excinfo: prepare_asset_search.handle_releases(1) assert 'explosion' in str(excinfo.value) @mock_aws def test_handle_releases_fetch_fail_exception( monkeypatch, releases_response, mock_connectors): set_releases_result = fake_result(1, None, 200) monkeypatch.setattr( audit_release, 'set_audit_releases', set_releases_result) fetch_releases_result = fake_result(releases_response, 'explosion', 200) monkeypatch.setattr( audit_release, 'fetch_audit_releases', fetch_releases_result) with pytest.raises(Exception) as excinfo: prepare_asset_search.handle_releases(1) assert 'explosion' in str(excinfo.value) @mock_aws def test_handle_releases_num_exception( monkeypatch, releases_response, mock_connectors): set_releases_result = fake_result(2, None, 200) monkeypatch.setattr( audit_release, 'set_audit_releases', set_releases_result) fetch_releases_result = fake_result(releases_response, None, 200) monkeypatch.setattr( audit_release, 'fetch_audit_releases', fetch_releases_result) monkeypatch.setattr( audit_persistence, 'update_report_status', Mock(return_value=None)) with pytest.raises(Exception) as excinfo: prepare_asset_search.handle_releases(1) assert 'Number of releases' in str(excinfo.value) @mock_aws def test_handle_releases_fetch_success( monkeypatch, releases_response, mock_connectors): set_releases_result = fake_result(1, None, 200) monkeypatch.setattr( audit_release, 'set_audit_releases', set_releases_result) fetch_releases_result = fake_result(releases_response, None, 200) monkeypatch.setattr( audit_release, 'fetch_audit_releases', fetch_releases_result) mock_add_releases = Mock() monkeypatch.setattr( prepare_asset_search, 'add_releases_to_queue', mock_add_releases) monkeypatch.setattr( audit_persistence, 'update_report_status', Mock(return_value=None)) prepare_asset_search.handle_releases(1) assert audit_persistence.update_report_status.called assert mock_add_releases.call_count == 1