"""Unit tests for adjustment.""" from unittest.mock import patch, MagicMock import pytest from adjustment.adjustment import Adjustment @patch('adjustment.adjustment.AbacusMysqlConnection') def test_validate_statement_period(mock_abacus_db_connection, mock_statement_period): """Test _validate_statement_period method.""" statement_period_id = 1 file = 'file/test.xlsx' mock_abacus_db_connection.execute_sql_query.return_value = mock_statement_period adjustment = Adjustment(statement_period_id, file) result = adjustment._validate_statement_period() assert result is True mock_abacus_db_connection.execute_sql_query.assert_called_once() @patch('adjustment.adjustment.AbacusMysqlConnection') def test_validate_statement_period_error(mock_abacus_db_connection): """Test _validate_statement_period method throws an error if statement period is closed.""" statement_period_id = '1' file = 'file/test.xlsx' mock_abacus_db_connection.execute_sql_query.return_value = None with pytest.raises(Exception) as excinfo: adjustment = Adjustment(statement_period_id, file) adjustment._validate_statement_period() assert 'Statement period 1 is closed. New adjustments cannot be created for it' == str(excinfo.value) @patch('adjustment.adjustment.path') def test_is_file_exists(mock_os_path_method): """Test is_file_exists method.""" statement_period_id = 1 file = 'file/test.xlsx' mock_os_path_method.exists.return_value = True adjustment = Adjustment(statement_period_id, file) result = adjustment._is_file_exists() assert result is True @patch('adjustment.adjustment.path') def test_is_file_exists_error(mock_os_path_method): """Test is_file_exists method throws an error if file path is invalid.""" statement_period_id = 1 file = 'file/test.xlsx' mock_os_path_method.exists.return_value = False with pytest.raises(Exception) as excinfo: adjustment = Adjustment(statement_period_id, file) adjustment._is_file_exists() assert 'File doesn\'t exist' == str(excinfo.value) @patch('adjustment.adjustment.pathlib') def test_is_excel_file(mock_pathlib_method): """Test is_excel_file method.""" statement_period_id = 1 file = 'file/test.xlsx' mock_pathlib_method.Path.return_value = MagicMock(suffix='.xlsx') adjustment = Adjustment(statement_period_id, file) result = adjustment._is_excel_file() assert result is True @patch('adjustment.adjustment.pathlib') def test_is_excel_file_error(mock_pathlib_method): """Test is_excel_file method throws an error if file is text file.""" statement_period_id = 1 file = 'file/test.txt' mock_pathlib_method.Path.return_value = MagicMock(suffix='.txt') with pytest.raises(Exception) as excinfo: adjustment = Adjustment(statement_period_id, file) adjustment._is_excel_file() assert 'Not a valid excel file' == str(excinfo.value) @patch('adjustment.adjustment.AdjustmentFile') @patch('adjustment.adjustment.get_adjustments') @patch('adjustment.adjustment.pathlib') @patch('adjustment.adjustment.path') def test_validate_adjustment_file( mock_os_path_method, mock_pathlib_method, mock_get_adjustments, mock_adjustmentfile, mock_adjustments_types ): """Test _validate_adjustment_file method.""" statement_period_id = 1 file = 'file/test.xlsx' mock_os_path_method.exists.return_value = True mock_pathlib_method.Path.return_value = MagicMock(suffix='.xlsx') mock_get_adjustments.return_value = mock_adjustments_types mock_adjustmentfile.return_value.read_and_validate_file.return_value = True adjustment = Adjustment(statement_period_id, file) adjustment._validate_adjustment_file() mock_adjustmentfile.return_value.read_and_validate_file.assert_called_once() @patch('adjustment.adjustment.AdjustmentFile') @patch('adjustment.adjustment.get_adjustments') @patch('adjustment.adjustment.pathlib') @patch('adjustment.adjustment.path') @patch('adjustment.adjustment.AbacusMysqlConnection') def test_proces( mock_abacus_db_connection, mock_os_path_method, mock_pathlib_method, mock_get_adjustments, mock_adjustmentfile, mock_statement_period, mock_adjustments_types ): """Test process method.""" statement_period_id = 1 file = 'file/test.xlsx' mock_abacus_db_connection.execute_sql_query.return_value = mock_statement_period mock_os_path_method.exists.return_value = True mock_pathlib_method.Path.return_value = MagicMock(suffix='.xlsx') mock_get_adjustments.return_value = mock_adjustments_types mock_adjustmentfile.return_value.read_and_validate_file.return_value = True adjustment = Adjustment(statement_period_id, file) adjustment.process() mock_adjustmentfile.return_value.read_and_validate_file.assert_called_once() mock_abacus_db_connection.execute_sql_query.assert_called_once()