From 414bdc6431bbe9681d2c498a77edd0106153ee60 Mon Sep 17 00:00:00 2001 From: Jun-te Kim Date: Mon, 20 Apr 2026 13:17:35 +0000 Subject: [PATCH] keep it minimal first --- backend/app/bulk_uploads/router.py | 5 +- backend/app/bulk_uploads/schema.py | 13 ----- backend/tests/test_bulk_uploads.py | 77 ------------------------------ 3 files changed, 1 insertion(+), 94 deletions(-) delete mode 100644 backend/tests/test_bulk_uploads.py diff --git a/backend/app/bulk_uploads/router.py b/backend/app/bulk_uploads/router.py index b79fe6d3..470ef36e 100644 --- a/backend/app/bulk_uploads/router.py +++ b/backend/app/bulk_uploads/router.py @@ -1,17 +1,14 @@ import boto3 import json from uuid import UUID -from datetime import datetime, timezone from fastapi import APIRouter, Depends, HTTPException, Query from sqlmodel import select -from sqlalchemy.dialects.postgresql import insert from backend.app.dependencies import validate_token from backend.app.config import get_settings from backend.app.db.connection import get_db_session from backend.app.db.models.bulk_address_uploads import BulkAddressUpload -from backend.app.db.models.portfolio import PropertyModel, PropertyCreationStatus, PortfolioStatus -from backend.app.bulk_uploads.schema import TriggerSplitterRequest, ConfirmMatchesRequest +from backend.app.bulk_uploads.schema import TriggerSplitterRequest from utils.s3 import parse_s3_uri, read_csv_from_s3 diff --git a/backend/app/bulk_uploads/schema.py b/backend/app/bulk_uploads/schema.py index 070bdd2d..1efd02a3 100644 --- a/backend/app/bulk_uploads/schema.py +++ b/backend/app/bulk_uploads/schema.py @@ -1,20 +1,7 @@ from pydantic import BaseModel -from typing import Optional class TriggerSplitterRequest(BaseModel): task_id: str sub_task_id: str s3_uri: str - - -class AcceptedRow(BaseModel): - uprn: int - address_line_1: str - address_line_2: Optional[str] = None - postcode: str - internal_reference: Optional[str] = None - - -class ConfirmMatchesRequest(BaseModel): - accepted_rows: list[AcceptedRow] diff --git a/backend/tests/test_bulk_uploads.py b/backend/tests/test_bulk_uploads.py deleted file mode 100644 index 18bd8ed5..00000000 --- a/backend/tests/test_bulk_uploads.py +++ /dev/null @@ -1,77 +0,0 @@ -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"