import unittest from unittest.mock import Mock import pytest from requests import Response from slz_downloader.dsp.spotify import SpotifyClient from slz_downloader.entities import Job @pytest.mark.parametrize( 'ok, headers, status_code, expected', [ (True, { 'Content-Length': 123 }, 200, ('en', 123)), (True, { 'Content-Length': 0 }, 200, None), (False, {}, 400, None), (False, {}, 404, None), (False, {}, 500, None), ] ) @unittest.mock.patch('slz_downloader.dsp.spotify.SpotifyClient._get_response_obj') def test_availability_check_check_source_is_available( response_mock, ok, headers, status_code, expected, ): uow = { 'uow_id': 'spotify-20191117-sme-users-v1', 'dsp': 'spotify', 'report_type': 'users', 'version': 'v1', 'report_date': '2019-11-17', 'licensor': 'sme', 'extension': 'gz', 'context': 'en', } job = Job.from_dict(uow) logger = Mock() client = SpotifyClient(logger) resp_mock_base = unittest.mock.MagicMock(spec=Response) resp_mock_base.ok = ok resp_mock_base.headers = headers resp_mock_base.url = '' resp_mock_base.status_code = status_code resp_mock_base.reason = 'Some text' response_mock.return_value.__enter__.return_value = resp_mock_base result = client._check_source_is_available(job) assert result == expected @pytest.mark.parametrize( 'ok, headers, status_code, expected', [ (True, { 'Content-Length': 123 }, 200, [('en', 123)]), (True, { 'Content-Length': 0 }, 200, []), (False, {}, 400, []), (False, {}, 404, []), (False, {}, 500, []), ] ) @unittest.mock.patch('slz_downloader.dsp.spotify.SpotifyClient._get_response_obj') def test_availability_check_check_contexts_availability( response_mock, ok, headers, status_code, expected, ): uow = { 'uow_id': 'spotify-20191117-sme-users-v1', 'dsp': 'spotify', 'report_type': 'users', 'version': 'v1', 'report_date': '2019-11-17', 'licensor': 'sme', 'extension': 'gz', 'context': 'en', } job = Job.from_dict(uow) logger = Mock() client = SpotifyClient(logger) resp_mock_base = unittest.mock.MagicMock(spec=Response) resp_mock_base.ok = ok resp_mock_base.headers = headers resp_mock_base.url = '' resp_mock_base.status_code = status_code resp_mock_base.reason = 'Some text' response_mock.return_value.__enter__.return_value = resp_mock_base result = client.check_contexts_availability([job]) assert result == expected