from unittest import mock import pytest from slz_downloader.dsp.factory import NoImplementationFoundError from slz_clean_up.utils import get_generic_report_path, get_storage_client @mock.patch('slz_downloader.dsp.factory.get_client') @mock.patch('slz_config.DSPSpecificConfig') def test_get_storage_client_library_success(dsp_config_mock: mock.Mock, get_client_mock: mock.Mock): """Test get_storage_client function for case when client can be found in slz_downloader.""" expected_result = 'test_result' get_client_mock.return_value = 'test_result' payload = {'dsp': 'dsp'} logger_mock = mock.Mock() result = get_storage_client({'dsp_settings_path': 'path'}, payload, logger_mock) assert result == expected_result dsp_config_mock.assert_called_once_with(path='path') dsp_config_mock().read.assert_called_once() get_client_mock.assert_called_once_with( logger=logger_mock, use_dsp_wrapper=False, settings=dsp_config_mock().read().get(), uow=payload, ) @mock.patch('slz_clean_up.utils.storage_managers_map') @mock.patch('slz_clean_up.utils.ManagersMapKey') @mock.patch('slz_downloader.dsp.factory.get_client') @mock.patch('slz_config.DSPSpecificConfig') def test_get_storage_client_local_success( dsp_config_mock: mock.Mock, get_client_mock: mock.Mock, manager_map_key_mock: mock.Mock, storage_managers_map_mock: mock.Mock, ): """Test get_storage_client function for case when client can be found locally.""" get_client_mock.side_effect = NoImplementationFoundError(dsp_label='test') payload = {'dsp': 'dsp'} logger_mock = mock.Mock() result = get_storage_client({'dsp_settings_path': 'path'}, payload, logger_mock) dsp_config_mock.assert_called_once_with(path='path') get_client_mock.assert_called_once_with( logger=logger_mock, use_dsp_wrapper=False, settings=dsp_config_mock().read().get(), uow=payload, ) manager_map_key_mock.from_dict.assert_called_once_with(payload) storage_managers_map_mock.get.assert_called_once_with(manager_map_key_mock.from_dict().as_key()) assert result is storage_managers_map_mock.get() @mock.patch('slz_clean_up.utils.storage_managers_map') @mock.patch('slz_clean_up.utils.ManagersMapKey') @mock.patch('slz_downloader.dsp.factory.get_client') @mock.patch('slz_config.DSPSpecificConfig') def test_get_storage_client_fail( dsp_config_mock: mock.Mock, get_client_mock: mock.Mock, manager_map_key_mock: mock.Mock, storage_managers_map_mock: mock.Mock, ): """Test get_storage_client function for case when no client can be found.""" get_client_mock.side_effect = NoImplementationFoundError(dsp_label='test') payload = {'dsp': 'dsp'} logger_mock = mock.Mock() storage_managers_map_mock.get.return_value = None with pytest.raises(NoImplementationFoundError): get_storage_client({'dsp_settings_path': 'path'}, payload, logger_mock) dsp_config_mock.assert_called_once_with(path='path') get_client_mock.assert_called_once_with( logger=logger_mock, use_dsp_wrapper=False, settings=dsp_config_mock().read().get(), uow=payload, ) manager_map_key_mock.from_dict.assert_called_once_with(payload) storage_managers_map_mock.get.assert_called_once_with(manager_map_key_mock.from_dict().as_key()) @mock.patch('slz_clean_up.utils.Job') @mock.patch('slz_clean_up.utils.get_storage_client') def test_get_generic_report_path_success(get_storage_client_mock: mock.Mock, job_mock: mock.Mock): """Test get_client_generic_report_path, when path is generated by client.""" logger_mock = mock.Mock() payload = {} result = get_generic_report_path( logger=logger_mock, config={}, payload=payload, ) get_storage_client_mock.assert_called_once_with({}, payload, logger_mock) job_mock.from_dict.assert_called_once_with(payload) get_storage_client_mock().get_file_path.assert_called_once_with(job_mock.from_dict()) assert result is get_storage_client_mock().get_file_path() @mock.patch('slz_clean_up.utils.Job') @mock.patch('slz_clean_up.utils.get_storage_client') def test_get_generic_report_path_fail_safe(get_storage_client_mock: mock.Mock, job_mock: mock.Mock): """Test get_client_generic_report_path, when required attribute of Job is missing.""" logger_mock = mock.Mock() get_storage_client_mock.return_value.get_file_path.side_effect = AttributeError() expected_result = 'dsp/report_type/version/report_date=report_date/report_licensor=licensor/' payload = { 'dsp': 'dsp', 'report_type': 'report_type', 'version': 'version', 'report_date': 'report_date', 'licensor': 'licensor', } result = get_generic_report_path( logger=logger_mock, config={}, payload=payload, ) get_storage_client_mock.assert_called_once_with({}, payload, logger_mock) job_mock.from_dict.assert_called_once_with(payload) get_storage_client_mock().get_file_path.assert_called_once_with(job_mock.from_dict()) assert result == expected_result