"""Tests for processing module.""" import json from unittest.mock import MagicMock from unittest.mock import patch import pytest from sales.constants.exceptions import WorkerFailureError @pytest.fixture def valid_message(valid_message_body): """Return a valid message dict.""" message = MagicMock() message.body = json.dumps(valid_message_body) return message @pytest.fixture def mock_credentials(): """Return a dict in the same structure as fetch_credentials.""" return { 'user': '', 'password': '', 'host': '', 'database': '', 'port': 1 } @patch('sales.logic.worker.dump_table_to_outfile') @patch('sales.logic.worker.upload_file_to_s3') @patch('sales.logic.worker.fetch_credentials') @patch('sales.logic.worker.os.remove') @patch('sales.logic.worker.os.path.isfile') @patch('sales.logic.worker.os.access') def test_worker_valid_message( mock_access, mock_isfile, mock_remove, mock_fetch_credentials, mock_upload, mock_outfile, valid_message, mock_credentials): """Test processing a valid message.""" from sales.logic.worker import process_message mock_access.return_value = True mock_isfile.return_value = True mock_remove.return_value = None mock_fetch_credentials.return_value = mock_credentials mock_upload.return_value = None mock_outfile.return_value = None mock_log = MagicMock() process_message(valid_message, mock_log) assert mock_access.call_count == 1 assert mock_isfile.call_count == 1 assert mock_remove.call_count == 2 assert mock_fetch_credentials.call_count == 1 assert mock_upload.call_count == 1 assert mock_outfile.call_count == 1 @patch('sales.logic.worker.fetch_credentials') @patch('sales.logic.worker.dump_table_to_outfile') def test_file_missing(mock_dump_table, mock_fetch): """Test file not found.""" from sales.logic.worker import process_message export_request = MagicMock() def mock_log(text): pass with pytest.raises(WorkerFailureError): process_message(export_request, mock_log) @patch('sales.logic.worker.os.path.isfile') @patch('sales.logic.worker.fetch_credentials') @patch('sales.logic.worker.dump_table_to_outfile') def test_file_not_readable(mock_dump_table, mock_fetch, mock_isfile): """Test file not readable.""" mock_isfile.return_value = True from sales.logic.worker import process_message export_request = MagicMock() def mock_log(text): pass with pytest.raises(WorkerFailureError): process_message(export_request, mock_log)