# pylint: disable=unused-argument,protected-access,too-many-arguments import pytest from slz_spotify_charts_scraper.const import STATUS_FAILURE, STATUS_OK from slz_spotify_charts_scraper.entities import JobExecutionResult, Payload from slz_spotify_charts_scraper.utils import ( get_lambda_payload_from_event, get_lambda_response_from_results, ) @pytest.mark.parametrize( 'event, expected', [ ( { 'report_type': 'charts_weekly_viral', 'uow_id': 'some uow id', 'dsp': 'spotify', 'version': 'v1', 'report_date': '2021-01-02', 'licensor': 'sme', 'contexts': ['us', 'br', 'de'], 'info': { 'execution_name': 'job 1' }, }, Payload( uow_id='some uow id', dsp='spotify', report_type='charts_weekly_viral', application='charts', version='v1', licensor='sme', job_id='job 1', markets=['us', 'br', 'de'], report_date='2021-01-02', recurrence_type='weekly', chart_type='viral', ) ) ] ) def test_get_lambda_payload_from_event(event, expected): got = get_lambda_payload_from_event(event) assert got == expected @pytest.mark.parametrize( 'results, expected', [ # One True 'success', one True 'is_hash_updated' ( ( JobExecutionResult(success=True, is_hash_updated=False, market='us'), JobExecutionResult(success=False, is_hash_updated=True, market='gb'), JobExecutionResult(success=False, is_hash_updated=False, market='it'), ), { 'meta': { 'status': STATUS_OK, 'has_changed': True, }, 'context': { 'us': False, 'gb': True, 'it': False, } } ), # All False 'success', one True 'is_hash_updated' ( ( JobExecutionResult(success=False, is_hash_updated=False, market='us'), JobExecutionResult(success=False, is_hash_updated=True, market='gb'), JobExecutionResult(success=False, is_hash_updated=False, market='it'), ), { 'meta': { 'status': STATUS_FAILURE, 'has_changed': True, }, 'context': { 'us': False, 'gb': True, 'it': False, } } ), # One True success, all False is_hash_updated ( ( JobExecutionResult(success=False, is_hash_updated=False, market='us'), JobExecutionResult(success=True, is_hash_updated=False, market='gb'), JobExecutionResult(success=False, is_hash_updated=False, market='it'), ), { 'meta': { 'status': STATUS_OK, 'has_changed': False, }, 'context': { 'us': False, 'gb': False, 'it': False, } } ), # All False ( ( JobExecutionResult(success=False, is_hash_updated=False, market='us'), JobExecutionResult(success=False, is_hash_updated=False, market='gb'), JobExecutionResult(success=False, is_hash_updated=False, market='it'), ), { 'meta': { 'status': STATUS_FAILURE, 'has_changed': False, }, 'context': { 'us': False, 'gb': False, 'it': False, } } ), # Make sure "is_hash_updated" having None is treated as False value ( ( JobExecutionResult(success=False, is_hash_updated=False, market='us'), JobExecutionResult(success=False, is_hash_updated=None, market='gb'), JobExecutionResult(success=False, is_hash_updated=False, market='it'), ), { 'meta': { 'status': STATUS_FAILURE, 'has_changed': False, }, 'context': { 'us': False, 'gb': None, 'it': False, } } ), ] ) def test_get_lambda_response_from_results(results, expected): response = get_lambda_response_from_results(results) assert response == expected