diff --git a/api/v1/routes/topic.py b/api/v1/routes/topic.py index b9b147532..80afb8fe0 100644 --- a/api/v1/routes/topic.py +++ b/api/v1/routes/topic.py @@ -1,3 +1,4 @@ +from typing import Optional from fastapi import ( APIRouter, Depends, @@ -64,7 +65,8 @@ async def retrieve_topic( @topic.get('/search', response_model=TopicList) async def search_for_topic( - query: str, + title: Optional[str] = None, + content: Optional[str] = None, db: Session = Depends(get_db) ): """ @@ -77,7 +79,7 @@ async def search_for_topic( Returns: Response: a response object containing details if successful or appropriate errors if not """ - topics = topic_service.search(db=db,search_query=query) + topics = topic_service.search(db=db,title_query=title, content_query=content) return success_response( status_code=status.HTTP_200_OK, diff --git a/api/v1/services/topic.py b/api/v1/services/topic.py index e39323eed..eceb74a8e 100644 --- a/api/v1/services/topic.py +++ b/api/v1/services/topic.py @@ -61,15 +61,13 @@ def delete(self, db: Session, id: str): db.delete(topic) db.commit() - def search(self, db: Session, search_query: str): + def search(self, db: Session, title_query: str, content_query: str): """ Search for topics based on title, content, tags, or topic IDs. """ query = db.query(Topic).filter( - (Topic.title.ilike(f'%{search_query}%')) | - (Topic.content.ilike(f'%{search_query}%')) | - (Topic.tags.any(search_query)) | - (Topic.id == search_query) # Include searching by topic ID + (Topic.title.ilike(f'%{title_query}%')) | + (Topic.content.ilike(f'%{content_query}%')) ) return query.all() diff --git a/tests/v1/topic/test_topic.py b/tests/v1/topic/test_topic.py index d7b6464f6..9efd8826e 100644 --- a/tests/v1/topic/test_topic.py +++ b/tests/v1/topic/test_topic.py @@ -95,10 +95,9 @@ def mock_get(model, ident): headers = {'Authorization': f'Bearer {access_token_user1}'} data = { - "id": test_topic.id, "title": "Uploading profile picture." } - response = client.patch(f"/api/v1/help-center/topics", headers=headers, json=data) + response = client.patch(f"/api/v1/help-center/topics/{test_topic.id}", headers=headers, json=data) assert response.status_code == 200 def test_delete_topic( @@ -119,7 +118,7 @@ def mock_get(model, ident): mock_db_session.query.return_value.filter_by.return_value.first.return_value = [test_topic] headers = {'Authorization': f'Bearer {access_token_user1}'} - response = client.request("DELETE",f"/api/v1/help-center/topics", headers=headers, json={"id":test_topic.id}) + response = client.delete(f"/api/v1/help-center/topics/{test_topic.id}", headers=headers) assert response.status_code == 204 def test_search_topic( @@ -138,7 +137,7 @@ def mock_get(model, ident): mock_db_session.query.return_value.filter.return_value.first.return_value = test_user mock_db_session.query.return_value.filter_by.return_value.first.return_value = [test_topic] - response = client.request("GET","/api/v1/help-center/search", json={"query":test_topic.title}) + response = client.get(f"/api/v1/help-center/search?title={test_topic.title}") assert response.status_code == 200 def test_fetch_a_topic(