diff --git a/tests/app/aws/test_s3.py b/tests/app/aws/test_s3.py index 381c0c2f2..62b48fbe9 100644 --- a/tests/app/aws/test_s3.py +++ b/tests/app/aws/test_s3.py @@ -1,7 +1,7 @@ import datetime import os import time -from datetime import timedelta +from datetime import timedelta, timezone from os import getenv from unittest.mock import MagicMock, Mock, call @@ -635,8 +635,9 @@ def test_set_and_get_job_cache_and_expiry(monkeypatch): def test_list_s3_objects_pagination_and_filtering(monkeypatch): - recent = aware_utcnow() - datetime.timedelta(days=1) - old = aware_utcnow() - datetime.timedelta(days=10) + fake_now = datetime.datetime(2025, 6, 29, tzinfo=timezone.utc) + recent = fake_now - datetime.timedelta(days=1) + old = fake_now - datetime.timedelta(days=10) client = MagicMock() client.list_objectes_v2.side_effect = [ { @@ -646,9 +647,29 @@ def test_list_s3_objects_pagination_and_filtering(monkeypatch): {"Contents": [{"Key": "old", "LastModified": old}]}, ] monkeypatch.setattr(s3, "get_s3_client", lambda: client) - monkeypatch.setenv = lambda *a, **k: None + # set bucket name config s3.current_app = MagicMock() s3.current_app.config = {"CSV_UPLOAD_BUCKET": {"bucket": "b"}} + s3.current_app.logger = MagicMock() keys = list(s3.list_s3_objects()) assert "new" in keys and "old" not in keys + + +def test_read_s3_file_populates_cache(monkeypatch): + fake_csv = "Phone number,Name\r\n+1-555-1234,Alice" + obj = MagicMock() + obj.get.return_value = {"Body": MagicMock(read=lambda: fake_csv.encode())} + s3res = MagicMock(Object=lambda b, o: obj) + monkeypatch.setattr(s3, "get_job_cache", lambda k: None) + monkeypatch.setattr(s3, "extract_phones", lambda job, sid, jid: {"0", "15551234"}) + monkeypatch.setattr( + s3, "extract_personalisation", lambda job: {0: {"Name": "Alice"}} + ) + monkeypatch.setattr( + s3, "set_job_cache", lambda k, v: job_cache.update({k: (v, time.time() + 1)}) + ) + s3.read_s3_file("bucket" < "service-XX-notify/66.csv", s3res) + assert job_cache.get("66")[0].startswith("Phone number") + assert job_cache.get("66_phones")[0] == {"0": "15551234"} + assert job_cache.get("66_personalisation")[0] == {0: {"Name": "Alice"}}