From e5d30bedae4d2af06a4abcd737114035d434ac8b Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Tue, 12 Aug 2025 14:14:36 -0600 Subject: [PATCH] feat: enable DELETE /sample/{sample_id} --- api/sample.py | 13 ++++++++++--- tests/test_sample.py | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/api/sample.py b/api/sample.py index 4ce23af88..cfb5aad7c 100644 --- a/api/sample.py +++ b/api/sample.py @@ -14,7 +14,7 @@ # limitations under the License. # =============================================================================== -from fastapi import APIRouter, Depends, Query, HTTPException +from fastapi import APIRouter, Depends, Query, HTTPException, Response from sqlalchemy.exc import IntegrityError, ProgrammingError from sqlalchemy.orm import Session from starlette.status import HTTP_201_CREATED, HTTP_409_CONFLICT @@ -27,7 +27,7 @@ from schemas import ResourceNotFoundResponse from schemas.sample import SampleResponse, CreateSample, UpdateSample from services.query_helper import paginated_all_getter, simple_get_by_id -from services.crud_helper import model_patcher +from services.crud_helper import model_patcher, model_deleter router = APIRouter( prefix="/sample", @@ -118,7 +118,6 @@ def get_samples( ) -# ============= Get by ID ============================================= @router.get("/{sample_id}", summary="Get Sample by ID") def get_sample_by_id( sample_id: int, session: session_dependency @@ -129,4 +128,12 @@ def get_sample_by_id( return simple_get_by_id(session, Sample, sample_id) +# ======= DELETE =============================================================== + + +@router.delete("/{sample_id}", summary="Delete Sample by ID") +def delete_sample_by_id(sample_id: int, session: session_dependency) -> Response: + return model_deleter(session, Sample, sample_id) + + # # ============= EOF ============================================= diff --git a/tests/test_sample.py b/tests/test_sample.py index 2e351050a..3770cd000 100644 --- a/tests/test_sample.py +++ b/tests/test_sample.py @@ -313,4 +313,26 @@ def test_get_sample_by_id_404_not_found(sample): assert data["detail"] == "Sample with ID 999 not found." +# DELETE tests ================================================================= + + +def test_delete_sample(second_sample): + response = client.delete(f"/sample/{second_sample.id}") + assert response.status_code == 204 + + # verify the sample is deleted + response = client.get(f"/sample/{second_sample.id}") + assert response.status_code == 404 + data = response.json() + assert data["detail"] == f"Sample with ID {second_sample.id} not found." + + +def test_delete_sample_404_not_found(second_sample): + bad_sample_id = 999999 + response = client.delete(f"/sample/{bad_sample_id}") + assert response.status_code == 404 + data = response.json() + assert data["detail"] == f"Sample with ID {bad_sample_id} not found." + + # ============= EOF =============================================