"""Snapshot adjustments processor unit tests.""" from unittest.mock import MagicMock, patch import pandas from snapshot_adjustments import constants from snapshot_adjustments.processor import SnapshotAdjustmentsProcessor @patch('snapshot_adjustments.processor.app_logger') @patch('snapshot_adjustments.processor.get_adjustments_by_acc_run_id') def test_get_adjustments( mock_get_adjustments_by_run_id, mock_logger, mock_adjustments, mock_event ): """Test to get adjustments by accounting run id.""" acct_run_id = mock_event.get('target_id') mock_get_adjustments_by_run_id.return_value = mock_adjustments processor = SnapshotAdjustmentsProcessor(mock_event) res = processor._get_adjustments() assert res == mock_adjustments mock_get_adjustments_by_run_id.assert_called_once_with(acct_run_id) assert mock_logger.info.call_count == 2 @patch('snapshot_adjustments.processor.app_logger') def test_log_init(mock_logger, mock_event): """Test log init is called when processor is initialized.""" SnapshotAdjustmentsProcessor(mock_event) target_id = mock_event['target_id'] mock_logger.info.assert_called_once_with(constants.PROCESSOR_MSG.format(target_id)) @patch('snapshot_adjustments.processor.app_logger') def test_log_success(mock_logger, mock_event): """Test processor logs a success message.""" processor = SnapshotAdjustmentsProcessor(mock_event) processor._log_success() assert mock_logger.info.call_count == 2 mock_logger.info.assert_called_with(constants.SUCCESS_MSG) @patch('snapshot_adjustments.processor.get_accounting_run') @patch('snapshot_adjustments.processor.build_snapshot_path') def test_set_s3_path(mock_build_path, mock_get_run, mock_event): """Test setting s3 path based on event's accounting_run.""" acct_run_id = mock_event.get('target_id') mock_acct_run = { 'accounting_period_id': 12, 'accounting_period_name': 'Acct Period Name', 'accounting_run_id': acct_run_id, 'run_controller_name': 'RC Name' } s3_path = f's3://test-bucket/12-acct-period-name/{acct_run_id}-rc-name/snapshots' mock_get_run.return_value = mock_acct_run mock_build_path.return_value = s3_path processor = SnapshotAdjustmentsProcessor(mock_event) processor._set_s3_path() assert processor.s3_path == s3_path mock_get_run.assert_called_once_with(acct_run_id) mock_build_path.assert_called_once_with(mock_acct_run) @patch('snapshot_adjustments.processor.app_logger') def test__map_adjustments( mock_logger, mock_mapped_adjustments, mock_adjustments, mock_event ): """Test processor's _map_adjustments method.""" processor = SnapshotAdjustmentsProcessor(mock_event) mapped_adjustments = processor._map_adjustments(mock_adjustments) assert mapped_adjustments == mock_mapped_adjustments @patch('snapshot_adjustments.processor.app_logger') @patch('snapshot_adjustments.processor.awswrangler') def test_write_to_s3(mock_awswrangler, mock_logger, mock_event, mock_adjustments): # noqa E501 """Test processor writes adjustments data to s3 as parquet file.""" mock_awswrangler.s3.to_parquet.return_value = {'paths': ['s3_path']} processor = SnapshotAdjustmentsProcessor(mock_event) processor._write_to_s3(mock_adjustments) assert mock_logger.info.call_count == 2 mock_awswrangler.s3.to_parquet.assert_called_once() def test_process(mock_adjustments, mock_mapped_adjustments, mock_event,): """Test SnapshotAdjustmentsProcessor's main processor method.""" adjustments_mapped_df = pandas.DataFrame([mock_mapped_adjustments]) SnapshotAdjustmentsProcessor._get_adjustments = \ MagicMock(return_value=mock_adjustments) SnapshotAdjustmentsProcessor._map_adjustments = \ MagicMock(return_value=adjustments_mapped_df) SnapshotAdjustmentsProcessor._log_init = MagicMock() SnapshotAdjustmentsProcessor._log_success = MagicMock() SnapshotAdjustmentsProcessor._set_s3_path = MagicMock() SnapshotAdjustmentsProcessor._write_to_s3 = MagicMock() processor = SnapshotAdjustmentsProcessor(mock_event) processor.process() assert processor.event == mock_event SnapshotAdjustmentsProcessor._log_init.assert_called_once() SnapshotAdjustmentsProcessor._set_s3_path.assert_called_once() SnapshotAdjustmentsProcessor._get_adjustments.assert_called_once() SnapshotAdjustmentsProcessor._map_adjustments.assert_called_once_with( mock_adjustments ) SnapshotAdjustmentsProcessor._write_to_s3.assert_called_once_with( adjustments_mapped_df ) SnapshotAdjustmentsProcessor._log_success.assert_called_once()