Skip to content

Commit f36b512

Browse files
authored
Merge pull request #1147 from codeWithGodstime/feat/filter_faq_by_category
feat: modified the query parameter to all filtering faq by category
2 parents b27e354 + d242cd1 commit f36b512

3 files changed

Lines changed: 70 additions & 4 deletions

File tree

.env.sample

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,4 @@ MAILJET_API_SECRET='SECRET KEY'
4242

4343
APP_NAME="fastapi_boilerplate"
4444

45-
TELEX_WEBHOOK_URL=""
45+
TELEX_WEBHOOK_URL=""

api/v1/routes/faq.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,28 @@
1818
@faq.get("", response_model=success_response, status_code=200)
1919
async def get_all_faqs(
2020
db: Session = Depends(get_db),
21-
keyword: Optional[str] = Query(None, min_length=1)
21+
keyword: Optional[str] = Query(None, min_length=1),
22+
category: Optional[str] = Query(None, min_length=1)
2223
):
2324
"""Endpoint to get all FAQs or search by keyword in both question and answer"""
2425

2526
query_params = {}
2627
if keyword:
2728
query_params["question"] = keyword
2829
query_params["answer"] = keyword
30+
if category:
31+
query_params["category"] = category
2932

3033
grouped_faqs = faq_service.fetch_all_grouped_by_category(
31-
db=db, **query_params)
34+
db=db, **query_params
35+
)
3236

3337
return success_response(
3438
status_code=200,
3539
message="FAQs retrieved successfully",
3640
data=jsonable_encoder(grouped_faqs),
3741
)
3842

39-
4043
@faq.post("", response_model=success_response, status_code=201)
4144
async def create_faq(
4245
schema: CreateFAQ,
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from unittest.mock import MagicMock, patch
2+
3+
import pytest
4+
from fastapi.testclient import TestClient
5+
from sqlalchemy.orm import Session
6+
7+
from api.db.database import get_db
8+
from api.v1.services.faq import faq_service
9+
from main import app
10+
11+
12+
@pytest.fixture
13+
def mock_db_session():
14+
db_session = MagicMock(spec=Session)
15+
return db_session
16+
17+
18+
@pytest.fixture
19+
def client(mock_db_session):
20+
app.dependency_overrides[get_db] = lambda: mock_db_session
21+
client = TestClient(app)
22+
yield client
23+
app.dependency_overrides = {}
24+
25+
26+
def test_filter_faq_by_category(mock_db_session, client):
27+
"""Test to verify the response for filtering FAQs by category."""
28+
29+
mock_faq_data_grouped = {
30+
"General": [
31+
{"question": "What is FastAPI?",
32+
"answer": "FastAPI is a modern web framework for Python."},
33+
{"question": "What is SQLAlchemy?",
34+
"answer": "SQLAlchemy is a SQL toolkit and ORM for Python."}
35+
]
36+
}
37+
38+
with patch.object(faq_service, 'fetch_all_grouped_by_category', return_value=mock_faq_data_grouped):
39+
response = client.get('/api/v1/faqs/?category=General')
40+
response_data = response.json()
41+
42+
assert response.status_code == 200
43+
assert response_data["status_code"] == 200
44+
assert response_data["message"] == "FAQs retrieved successfully"
45+
assert "General" in response_data["data"]
46+
assert len(response_data["data"]["General"]) == 2
47+
assert response_data["data"]["General"][0]["question"] == "What is FastAPI?"
48+
assert response_data["data"]["General"][1]["question"] == "What is SQLAlchemy?"
49+
50+
51+
def test_filter_faq_category_not_found(mock_db_session, client):
52+
"""Test when the requested category does not exist."""
53+
54+
mock_faq_data_grouped = {}
55+
56+
with patch.object(faq_service, 'fetch_all_grouped_by_category', return_value=mock_faq_data_grouped):
57+
response = client.get('/api/v1/faqs/?category=UnknownCategory')
58+
response_data = response.json()
59+
60+
assert response.status_code == 200
61+
assert response_data["status_code"] == 200
62+
assert response_data["message"] == "FAQs retrieved successfully"
63+
assert response_data["data"] == {}

0 commit comments

Comments
 (0)