"""Lambda test module.""" import pytest from pandas.testing import assert_frame_equal from src import app from src.constants import common, request_file CURRENT_DATE = '20250101' HFA_ORCHARD_TRACK_LICENSES_JSON = 'hfa_orchard_track_licenses.json' HFA_ORCHARD_TRACK_LICENSES_JSON_WITH_TMP = f'tmp/{HFA_ORCHARD_TRACK_LICENSES_JSON}' PENDING_REQ_TRACK_IDS_DATA_JSON = 'pending_req_track_ids_data.json' PENDING_REQ_TRACK_IDS_DATA_JSON_WITH_TMP = f'tmp/{PENDING_REQ_TRACK_IDS_DATA_JSON}' SSA_REQUEST_TEST_FILE = f'Orchard_M16106_SSA_{CURRENT_DATE}_AAAAA.txt' SSA_REQUEST_TEST_FILE_PATH = f'tmp/{SSA_REQUEST_TEST_FILE}' RGT_REQUEST_TEST_FILE = f'Orchard_M16106_RGT_{CURRENT_DATE}_AAAAA.txt' RGT_REQUEST_TEST_FILE_PATH = f'tmp/{RGT_REQUEST_TEST_FILE}' def test_handler_success( mock_hfa_orchard_track_licenses_df, mock_track_info_df, mock_transform_df, mock_ssa_df, mock_rgt_df, mock_resubmit_orchard_track_licenses_df, mock_dependencies ): """Test handler function.""" mock_ssa_return = { 'file_name': SSA_REQUEST_TEST_FILE, 's3_file_path': SSA_REQUEST_TEST_FILE_PATH } mock_rgt_return = { 'file_name': RGT_REQUEST_TEST_FILE, 's3_file_path': RGT_REQUEST_TEST_FILE_PATH } mock_dependencies['datetime'].datetime.today.return_value.strftime.return_value = CURRENT_DATE mock_dependencies['load_generate_hfa_tmp_files'].return_value = ( mock_hfa_orchard_track_licenses_df, mock_track_info_df ) mock_dependencies['transform'].return_value = mock_transform_df mock_dependencies['generate_and_upload_file'].side_effect = [mock_ssa_return, mock_rgt_return] test_event = { common.STATUS: common.OK, common.GENERATE_HFA_TMP_FILES: { common.PENDING_REQUEST_TRACK_IDS_DATA_FILE: PENDING_REQ_TRACK_IDS_DATA_JSON, common.HFA_ORCHARD_TRACK_LICENSES_FILE: HFA_ORCHARD_TRACK_LICENSES_JSON }, common.GENERATE_HFA_TMP_FILES_LENGTH: 2, common.FILES_TO_CLEANUP: [ PENDING_REQ_TRACK_IDS_DATA_JSON_WITH_TMP, HFA_ORCHARD_TRACK_LICENSES_JSON_WITH_TMP ] } expected = { common.STATUS: common.OK, common.GENERATE_HFA_TMP_FILES: { common.PENDING_REQUEST_TRACK_IDS_DATA_FILE: PENDING_REQ_TRACK_IDS_DATA_JSON, common.HFA_ORCHARD_TRACK_LICENSES_FILE: HFA_ORCHARD_TRACK_LICENSES_JSON }, common.GENERATE_HFA_TMP_FILES_LENGTH: 2, common.CREATE_HFA_REQUEST_FILES: { common.SSA_REQUEST_FILE: SSA_REQUEST_TEST_FILE, common.RGT_REQUEST_FILE: RGT_REQUEST_TEST_FILE }, common.CREATE_HFA_REQUEST_FILES_LENGTH: 2, common.FILES_TO_CLEANUP: [ PENDING_REQ_TRACK_IDS_DATA_JSON_WITH_TMP, HFA_ORCHARD_TRACK_LICENSES_JSON_WITH_TMP, SSA_REQUEST_TEST_FILE_PATH, RGT_REQUEST_TEST_FILE_PATH ] } result = app.handler(test_event, None) assert expected == result mock_dependencies['load_generate_hfa_tmp_files'].assert_called_once_with(test_event[common.GENERATE_HFA_TMP_FILES]) mock_dependencies['transform'].assert_called_once() args, _ = mock_dependencies['transform'].call_args assert_frame_equal(args[0], mock_hfa_orchard_track_licenses_df) assert_frame_equal(args[1], mock_track_info_df) assert_frame_equal(args[2], mock_resubmit_orchard_track_licenses_df) assert args[3] == CURRENT_DATE calls = mock_dependencies['generate_and_upload_file'].call_args_list # assert for the first call (SSA) args, _ = calls[0] assert args[0] == request_file.SSA assert_frame_equal(args[1], mock_ssa_df) assert args[2] == CURRENT_DATE # assert for the second call (RGT) args, _ = calls[1] assert args[0] == request_file.RGT assert_frame_equal(args[1], mock_rgt_df) assert args[2] == CURRENT_DATE def test_handler_no_generate_hfa_tmp_file(): """Test handler function in case of empty event.""" test_event = { common.STATUS: common.OK, common.GENERATE_HFA_TMP_FILES: {}, common.GENERATE_HFA_TMP_FILES_LENGTH: 0, common.FILES_TO_CLEANUP: [] } expected = { common.STATUS: common.OK, common.GENERATE_HFA_TMP_FILES: {}, common.GENERATE_HFA_TMP_FILES_LENGTH: 0, common.CREATE_HFA_REQUEST_FILES: {}, common.CREATE_HFA_REQUEST_FILES_LENGTH: 0, common.FILES_TO_CLEANUP: [] } result = app.handler(test_event, None) assert expected == result def test_handler_exception(mock_dependencies): """Test handler function in exception.""" test_event = { common.STATUS: common.OK, common.GENERATE_HFA_TMP_FILES: { common.PENDING_REQUEST_TRACK_IDS_DATA_FILE: PENDING_REQ_TRACK_IDS_DATA_JSON, common.HFA_ORCHARD_TRACK_LICENSES_FILE: HFA_ORCHARD_TRACK_LICENSES_JSON }, common.FILES_TO_CLEANUP: [ PENDING_REQ_TRACK_IDS_DATA_JSON_WITH_TMP, HFA_ORCHARD_TRACK_LICENSES_JSON_WITH_TMP ] } mock_dependencies['datetime'].datetime.today.return_value.strftime.return_value = CURRENT_DATE mock_dependencies['load_generate_hfa_tmp_files'].side_effect = Exception('S3 object does not exists') with pytest.raises(Exception, match='S3 object does not exists'): app.handler(test_event, {}) mock_dependencies['capture_exception'].assert_called_once()