From 4cf616edfb1c3c5336079129e2f2b1a17d205d32 Mon Sep 17 00:00:00 2001 From: Jerome White Date: Sat, 10 May 2025 11:36:25 +0530 Subject: [PATCH 1/5] Rename document endpoints to be more descriptive --- backend/app/api/routes/documents.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/app/api/routes/documents.py b/backend/app/api/routes/documents.py index 399dfa5b..e75fd25b 100644 --- a/backend/app/api/routes/documents.py +++ b/backend/app/api/routes/documents.py @@ -17,7 +17,7 @@ router = APIRouter(prefix="/documents", tags=["documents"]) -@router.get("/ls", response_model=APIResponse[List[Document]]) +@router.get("/list", response_model=APIResponse[List[Document]]) def list_docs( session: SessionDep, current_user: CurrentUser, @@ -35,7 +35,7 @@ def list_docs( return APIResponse.success_response(data) -@router.post("/cp", response_model=APIResponse[Document]) +@router.post("/upload", response_model=APIResponse[Document]) def upload_doc( session: SessionDep, current_user: CurrentUser, @@ -68,10 +68,10 @@ def upload_doc( @router.get( - "/rm/{doc_id}", + "/remove/{doc_id}", response_model=APIResponse[Document], ) -def delete_doc( +def remove_doc( session: SessionDep, current_user: CurrentUser, doc_id: UUID, @@ -91,7 +91,7 @@ def delete_doc( return APIResponse.success_response(data) -@router.get("/stat/{doc_id}", response_model=APIResponse[Document]) +@router.get("/info/{doc_id}", response_model=APIResponse[Document]) def doc_info( session: SessionDep, current_user: CurrentUser, From 53d21f637bfc94e392e63ec47b3b84242bfd8362 Mon Sep 17 00:00:00 2001 From: Jerome White Date: Sat, 10 May 2025 17:54:52 +0530 Subject: [PATCH 2/5] Update tests and test names with new route names --- ...{test_route_stat.py => test_route_document_info.py} | 8 ++++---- .../{test_route_ls.py => test_route_document_list.py} | 2 +- ...t_route_delete.py => test_route_document_remove.py} | 10 +++++----- ...t_route_upload.py => test_route_document_upload.py} | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) rename backend/app/tests/api/routes/documents/{test_route_stat.py => test_route_document_info.py} (88%) rename backend/app/tests/api/routes/documents/{test_route_ls.py => test_route_document_list.py} (98%) rename backend/app/tests/api/routes/documents/{test_route_delete.py => test_route_document_remove.py} (85%) rename backend/app/tests/api/routes/documents/{test_route_upload.py => test_route_document_upload.py} (98%) diff --git a/backend/app/tests/api/routes/documents/test_route_stat.py b/backend/app/tests/api/routes/documents/test_route_document_info.py similarity index 88% rename from backend/app/tests/api/routes/documents/test_route_stat.py rename to backend/app/tests/api/routes/documents/test_route_document_info.py index 28dc75dd..3f077935 100644 --- a/backend/app/tests/api/routes/documents/test_route_stat.py +++ b/backend/app/tests/api/routes/documents/test_route_document_info.py @@ -14,10 +14,10 @@ @pytest.fixture def route(): - return Route("stat") + return Route("info") -class TestDocumentRouteStat: +class TestDocumentRouteInfo: def test_response_is_success( self, db: Session, @@ -29,7 +29,7 @@ def test_response_is_success( assert response.is_success - def test_stat_reflects_database( + def test_info_reflects_database( self, db: Session, route: Route, @@ -43,7 +43,7 @@ def test_stat_reflects_database( assert source == target.data - def test_cannot_stat_unknown_document( + def test_cannot_info_unknown_document( self, db: Session, route: Route, diff --git a/backend/app/tests/api/routes/documents/test_route_ls.py b/backend/app/tests/api/routes/documents/test_route_document_list.py similarity index 98% rename from backend/app/tests/api/routes/documents/test_route_ls.py rename to backend/app/tests/api/routes/documents/test_route_document_list.py index 45c93521..b488b9ae 100644 --- a/backend/app/tests/api/routes/documents/test_route_ls.py +++ b/backend/app/tests/api/routes/documents/test_route_document_list.py @@ -21,7 +21,7 @@ def pushq(self, key, value): @pytest.fixture def route(): - return QueryRoute("ls") + return QueryRoute("list") class TestDocumentRouteList: diff --git a/backend/app/tests/api/routes/documents/test_route_delete.py b/backend/app/tests/api/routes/documents/test_route_document_remove.py similarity index 85% rename from backend/app/tests/api/routes/documents/test_route_delete.py rename to backend/app/tests/api/routes/documents/test_route_document_remove.py index 93b0d2df..62433876 100644 --- a/backend/app/tests/api/routes/documents/test_route_delete.py +++ b/backend/app/tests/api/routes/documents/test_route_document_remove.py @@ -13,10 +13,10 @@ @pytest.fixture def route(): - return Route("rm") + return Route("remove") -class TestDocumentRouteDelete: +class TestDocumentRouteRemove: def test_response_is_success( self, db: Session, @@ -28,7 +28,7 @@ def test_response_is_success( assert response.is_success - def test_item_is_soft_deleted( + def test_item_is_soft_removed( self, db: Session, route: Route, @@ -42,9 +42,9 @@ def test_item_is_soft_deleted( statement = select(Document).where(Document.id == document.id) result = db.exec(statement).one() - assert result.deleted_at is not None + assert result.removed_at is not None - def test_cannot_delete_unknown_document( + def test_cannot_remove_unknown_document( self, db: Session, route: Route, diff --git a/backend/app/tests/api/routes/documents/test_route_upload.py b/backend/app/tests/api/routes/documents/test_route_document_upload.py similarity index 98% rename from backend/app/tests/api/routes/documents/test_route_upload.py rename to backend/app/tests/api/routes/documents/test_route_document_upload.py index d9654d05..aa28d23f 100644 --- a/backend/app/tests/api/routes/documents/test_route_upload.py +++ b/backend/app/tests/api/routes/documents/test_route_document_upload.py @@ -41,7 +41,7 @@ def scratch(): @pytest.fixture def route(): - return Route("cp") + return Route("upload") @pytest.fixture From b88a8a05e7d6b556b1bcfbe923421e6ce121e727 Mon Sep 17 00:00:00 2001 From: Jerome White Date: Sat, 10 May 2025 18:17:26 +0530 Subject: [PATCH 3/5] Lift OpenAI mock ficture to global library --- .../tests/crud/collections/test_crud_collection_create.py | 3 ++- .../tests/crud/collections/test_crud_collection_delete.py | 7 ++----- .../crud/collections/test_crud_collection_read_all.py | 3 ++- .../crud/collections/test_crud_collection_read_one.py | 7 ++----- backend/app/tests/utils/collection.py | 7 ------- backend/app/tests/utils/utils.py | 6 ++++++ 6 files changed, 14 insertions(+), 19 deletions(-) diff --git a/backend/app/tests/crud/collections/test_crud_collection_create.py b/backend/app/tests/crud/collections/test_crud_collection_create.py index 89302fe8..564230b3 100644 --- a/backend/app/tests/crud/collections/test_crud_collection_create.py +++ b/backend/app/tests/crud/collections/test_crud_collection_create.py @@ -5,7 +5,8 @@ from app.crud import CollectionCrud from app.models import DocumentCollection from app.tests.utils.document import DocumentStore -from app.tests.utils.collection import get_collection, openai_credentials +from app.tests.utils.collection import get_collection +from app.tests.utils.utils import openai_credentials @pytest.mark.usefixtures("openai_credentials") diff --git a/backend/app/tests/crud/collections/test_crud_collection_delete.py b/backend/app/tests/crud/collections/test_crud_collection_delete.py index 655fec46..58d552d1 100644 --- a/backend/app/tests/crud/collections/test_crud_collection_delete.py +++ b/backend/app/tests/crud/collections/test_crud_collection_delete.py @@ -7,11 +7,8 @@ from app.crud import CollectionCrud from app.crud.rag import OpenAIAssistantCrud from app.tests.utils.document import DocumentStore -from app.tests.utils.collection import ( - get_collection, - openai_credentials, - uuid_increment, -) +from app.tests.utils.collection import get_collection, uuid_increment +from app.tests.utils.utils import openai_credentials @pytest.mark.usefixtures("openai_credentials") diff --git a/backend/app/tests/crud/collections/test_crud_collection_read_all.py b/backend/app/tests/crud/collections/test_crud_collection_read_all.py index c735e730..39eb36e9 100644 --- a/backend/app/tests/crud/collections/test_crud_collection_read_all.py +++ b/backend/app/tests/crud/collections/test_crud_collection_read_all.py @@ -7,7 +7,8 @@ from app.core.config import settings from app.models import Collection from app.tests.utils.document import DocumentStore -from app.tests.utils.collection import get_collection, openai_credentials +from app.tests.utils.collection import get_collection +from app.tests.utils.utils import openai_credentials def create_collections(db: Session, n: int): diff --git a/backend/app/tests/crud/collections/test_crud_collection_read_one.py b/backend/app/tests/crud/collections/test_crud_collection_read_one.py index 801f6be7..6c28f31b 100644 --- a/backend/app/tests/crud/collections/test_crud_collection_read_one.py +++ b/backend/app/tests/crud/collections/test_crud_collection_read_one.py @@ -7,11 +7,8 @@ from app.core.config import settings from app.crud import CollectionCrud from app.tests.utils.document import DocumentStore -from app.tests.utils.collection import ( - get_collection, - openai_credentials, - uuid_increment, -) +from app.tests.utils.collection import get_collection, uuid_increment +from app.tests.utils.utils import openai_credentials def mk_collection(db: Session): diff --git a/backend/app/tests/utils/collection.py b/backend/app/tests/utils/collection.py index 36c2642e..c4b4804d 100644 --- a/backend/app/tests/utils/collection.py +++ b/backend/app/tests/utils/collection.py @@ -1,6 +1,5 @@ from uuid import UUID -import pytest from openai import OpenAI from sqlmodel import Session @@ -11,7 +10,6 @@ class constants: openai_model = "gpt-4o" - openai_mock_key = "sk-fake123" llm_service_name = "test-service-name" @@ -47,8 +45,3 @@ def get_collection(db: Session, client=None): llm_service_id=assistant.id, llm_service_name=constants.llm_service_name, ) - - -@pytest.fixture(scope="class") -def openai_credentials(): - settings.OPENAI_API_KEY = constants.openai_mock_key diff --git a/backend/app/tests/utils/utils.py b/backend/app/tests/utils/utils.py index 2b329b31..271b338e 100644 --- a/backend/app/tests/utils/utils.py +++ b/backend/app/tests/utils/utils.py @@ -2,6 +2,7 @@ import string from uuid import UUID +import pytest from fastapi.testclient import TestClient from sqlmodel import Session @@ -9,6 +10,11 @@ from app.crud.user import get_user_by_email +@pytest.fixture(scope="class") +def openai_credentials(): + settings.OPENAI_API_KEY = "sk-fake123" + + def random_lower_string() -> str: return "".join(random.choices(string.ascii_lowercase, k=32)) From 0f31ff7ac75119d66af6f2cd847067f3e277c59e Mon Sep 17 00:00:00 2001 From: Jerome White Date: Sat, 10 May 2025 18:18:15 +0530 Subject: [PATCH 4/5] Remove routes need to be OpenAI mocked --- .../api/routes/documents/test_route_document_remove.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/backend/app/tests/api/routes/documents/test_route_document_remove.py b/backend/app/tests/api/routes/documents/test_route_document_remove.py index 62433876..50753a46 100644 --- a/backend/app/tests/api/routes/documents/test_route_document_remove.py +++ b/backend/app/tests/api/routes/documents/test_route_document_remove.py @@ -1,4 +1,5 @@ import pytest +import openai_responses from sqlmodel import Session, select from app.models import Document @@ -9,6 +10,8 @@ WebCrawler, crawler, ) +from app.tests.utils.collection import get_collection +from app.tests.utils.utils import openai_credentials @pytest.fixture @@ -16,7 +19,9 @@ def route(): return Route("remove") +@pytest.mark.usefixtures("openai_credentials") class TestDocumentRouteRemove: + @openai_responses.mock() def test_response_is_success( self, db: Session, @@ -28,6 +33,7 @@ def test_response_is_success( assert response.is_success + @openai_responses.mock() def test_item_is_soft_removed( self, db: Session, @@ -44,6 +50,7 @@ def test_item_is_soft_removed( assert result.removed_at is not None + @openai_responses.mock() def test_cannot_remove_unknown_document( self, db: Session, From 1b0a5c0fee2803ecc3b88e4ff16293bd2f9caf7b Mon Sep 17 00:00:00 2001 From: Jerome White Date: Sat, 10 May 2025 18:18:31 +0530 Subject: [PATCH 5/5] Deleted tracker in the document module was changed --- .../tests/api/routes/documents/test_route_document_remove.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/app/tests/api/routes/documents/test_route_document_remove.py b/backend/app/tests/api/routes/documents/test_route_document_remove.py index 50753a46..7b01cc2f 100644 --- a/backend/app/tests/api/routes/documents/test_route_document_remove.py +++ b/backend/app/tests/api/routes/documents/test_route_document_remove.py @@ -48,7 +48,7 @@ def test_item_is_soft_removed( statement = select(Document).where(Document.id == document.id) result = db.exec(statement).one() - assert result.removed_at is not None + assert result.deleted_at is not None @openai_responses.mock() def test_cannot_remove_unknown_document(