From a4370d6c7356f6f74bcf451b03b57ba5e3c389e7 Mon Sep 17 00:00:00 2001 From: Kenneth Kehl <@kkehl@flexion.us> Date: Mon, 11 Aug 2025 10:52:10 -0700 Subject: [PATCH] add tests --- tests/app/celery/test_tasks.py | 65 ++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/tests/app/celery/test_tasks.py b/tests/app/celery/test_tasks.py index e7d35f57c..b4128ac17 100644 --- a/tests/app/celery/test_tasks.py +++ b/tests/app/celery/test_tasks.py @@ -1,3 +1,4 @@ +import io import json import uuid from datetime import datetime, timedelta @@ -16,6 +17,7 @@ from app import db, encryption from app.celery import provider_tasks, tasks from app.celery.tasks import ( __total_sending_limits_for_job_exceeded, + _generate_notifications_report, get_recipient_csv_and_template_and_sender_id, process_incomplete_job, process_incomplete_jobs, @@ -1792,3 +1794,66 @@ def test_save_api_email_or_sms_sqlalchemy_error_with_max_retries(): save_api_email_or_sms(mock_self, encrypted) mock_exception.assert_called_once() assert "Max retry failed" in mock_exception.call_args[0][0] + + +@pytest.fixture +def mock_notification(): + notif = MagicMock() + notif.job_id = "job-id" + notif.service_id = "service-id" + notif.job_row_number = 5 + notif.serialize_for_csv.return_value = { + "recipient": "1234567890", + "template_name": "Test Template", + "created_by_name": "Tester", + "carrier": "TestCarrier", + "status": "delivered", + "created_at": "2025-08-10T12:00:00", + "job_name": "Job A", + "provider_response": "Success", + } + + +@patch("app.notifications_dao.get_notifications_for_service") +@patch("app.s3.get_personalisation_from_s3") +@patch("app.s3.get_phone_number_from_s3") +@patch("app.get_csv_location") +@patch("app.s3.s3upload") +@patch("app.s3.delete_s3_object") +@patch("app.current_app") +def test_generate_notifications_report_normal_case( + mock_current_app, + mock_delete, + mock_upload, + mock_get_csv_location, + mock_get_phone_number, + mock_get_personalisation, + mock_get_notifications, + mock_notifications, +): + + mock_get_notifications.return_value.items = [mock_notification] + mock_get_phone_number.return_value = "1234567890" + mock_get_personalisation.return_value = {"name": "John"} + mock_get_csv_location.return_value = ( + "my-bucket", + "some/file/location.csv", + "access", + "sekret", + "region", + ) + + mock_current_app.config = { + "CSV_UPLOAD_BUCKET": {"bucket": "my-bucket", "region": "region"} + } + + _generate_notifications_report("service-id", "report-id", 7) + + mock_get_personalisation.assert_called_once() + mock_get_phone_number.assert_called_once() + + mock_upload.assert_called_once() + args, kwargs = mock_upload.call_args + assert kwargs["bucket_name" == "my-bucket"] + assert kwargs["file_location"] == "som/file/location.csv" + assert isinstance(kwargs["filedata"], io.BytesIO)