Model/backend/tests/test_bulk_uploads.py
2026-04-20 13:06:31 +00:00

77 lines
2.7 KiB
Python

from unittest.mock import MagicMock, patch
import pytest
from fastapi.testclient import TestClient
@pytest.fixture
def client():
with patch("backend.app.config.get_settings") as mock_settings:
mock_settings.return_value = MagicMock(
ENVIRONMENT="local",
AWS_DEFAULT_REGION="eu-west-1",
POSTCODE_SPLITTER_SQS_URL="https://sqs.eu-west-1.amazonaws.com/123456789/postcode-splitter",
)
from backend.app.main import app
yield TestClient(app)
@patch("backend.app.bulk_uploads.router.boto3")
@patch("backend.app.bulk_uploads.router.TasksInterface")
def test_trigger_splitter_creates_task_and_enqueues(mock_tasks_cls, mock_boto3, client):
mock_tasks = MagicMock()
mock_tasks.create_task.return_value = ("task-123", "subtask-456")
mock_tasks_cls.return_value = mock_tasks
mock_sqs = MagicMock()
mock_sqs.send_message.return_value = {"MessageId": "msg-789"}
mock_boto3.client.return_value = mock_sqs
response = client.post(
"/v1/bulk-uploads/trigger-splitter",
json={
"upload_id": "upload-abc",
"s3_uri": "s3://bucket/file.csv",
"portfolio_id": "portfolio-xyz",
},
headers={"Authorization": "Bearer test-token"},
)
assert response.status_code == 202
body = response.json()
assert body["task_id"] == "task-123"
assert body["sub_task_id"] == "subtask-456"
assert body["sqs_message_id"] == "msg-789"
mock_sqs.send_message.assert_called_once()
call_kwargs = mock_sqs.send_message.call_args[1]
import json
payload = json.loads(call_kwargs["MessageBody"])
assert payload["task_id"] == "task-123"
assert payload["sub_task_id"] == "subtask-456"
assert payload["s3_uri"] == "s3://bucket/file.csv"
@patch("backend.app.bulk_uploads.router.boto3")
@patch("backend.app.bulk_uploads.router.TasksInterface")
def test_trigger_splitter_uses_provided_task_ids(mock_tasks_cls, mock_boto3, client):
mock_sqs = MagicMock()
mock_sqs.send_message.return_value = {"MessageId": "msg-999"}
mock_boto3.client.return_value = mock_sqs
response = client.post(
"/v1/bulk-uploads/trigger-splitter",
json={
"upload_id": "upload-abc",
"s3_uri": "s3://bucket/file.csv",
"portfolio_id": "portfolio-xyz",
"task_id": "existing-task",
"sub_task_id": "existing-subtask",
},
headers={"Authorization": "Bearer test-token"},
)
assert response.status_code == 202
mock_tasks_cls.assert_not_called()
body = response.json()
assert body["task_id"] == "existing-task"
assert body["sub_task_id"] == "existing-subtask"