mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
77 lines
2.7 KiB
Python
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"
|