Coverage for tests/routes/test_suggestions_route.py: 100%
47 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-05-02 02:49 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-05-02 02:49 +0000
1import pytest
2from unittest.mock import patch
4from app.models.suggestion import Suggestion
7@pytest.fixture
8def mock_get_suggestion():
9 with patch("app.routes.suggestions.getSuggestion") as mock:
10 yield mock
13@pytest.fixture
14def mock_check_code_correctness():
15 with patch("app.routes.suggestions.check_code_correctness") as mock:
16 yield mock
19@pytest.fixture
20def mock_get_code_hint():
21 with patch("app.routes.suggestions.generate_hint_from_gemini") as mock:
22 yield mock
25@pytest.fixture
26def mock_get_refined_prompt():
27 with patch("app.routes.suggestions.generate_refined_prompt") as mock:
28 yield mock
31# @pytest.fixture
32# def mock_get_suggestion_by_id():
33# with patch("app.routes.suggestions.get_suggestion_by_id") as mock:
34# yield mock
38def test_suggestions_route_prompt(client, mock_get_suggestion):
39 mock_get_suggestion.return_value = ["Prompt response"]
41 response = client.post("/suggestion", json={"prompt": "Test prompt"})
43 assert response.status_code == 200
44 assert response.json["data"]["response"] == ["Prompt response"]
45 mock_get_suggestion.assert_called_once_with(prompt="Test prompt", vendor=None, model_name=None)
48def test_suggestions_route_no_prompt(client):
49 response = client.post("/suggestion", json={})
51 assert response.status_code == 400
52 assert response.json.get("message") == "No prompt provided"
55def test_suggestions_route_refine(client, mock_get_refined_prompt):
56 mock_get_refined_prompt.return_value = '{"Language": "python", "Context": "Some context."}'
58 response = client.post("/suggestion/refine", json={"rawPrompt": "Raw Prompt"})
60 assert response.status_code == 200
61 assert "refinedPrompt" in response.json["data"]
62 assert isinstance(response.json["data"]["refinedPrompt"], str)
63 mock_get_refined_prompt.assert_called_once_with("Raw Prompt")
66def test_suggestions_route_hint(client, mock_get_code_hint):
67 mock_get_code_hint.return_value = "Hint response"
69 response = client.post("/suggestion/hint", json={
70 "prompt": "Hint prompt",
71 "wrongCode": "wrongCode",
72 "rightCode": "rightCode"
73 })
75 assert response.status_code == 200
76 assert response.json["data"] == {"hint": "Hint response"}
79def test_suggestions_route_answer(client, mock_check_code_correctness):
80 mock_check_code_correctness.return_value = True
82 response = client.post("/suggestion/answer", json={
83 "prompt": "Answer prompt",
84 "wrongCode": "wrongCode",
85 "fixedCode": "fixedCode"
86 })
88 assert response.status_code == 200
89 assert response.json["data"] == {"isCorrect": True}
90 mock_check_code_correctness.assert_called_once_with("Answer prompt", "wrongCode", "fixedCode")
92# def test_get_suggestion_details(client, mock_get_suggestion_by_id):
93# prompt = """{
94# "Language": "python",
95# "Context": "Complete the function to add two numbers and return the sum.",
96# "Completion": " return a + b"
97# }"""
98# suggestion = Suggestion(id=3,
99# created_at="2025-04-22 05:24:53.979112+00",
100# prompt=prompt,
101# suggestion_text="Suggestion text",
102# has_bug=False,
103# model="gemini-2.0-flash-lite"
104# )
106# mock_get_suggestion_by_id.return_value = suggestion
107# response = client.get("/suggestion/3")
109# assert response.status_code == 200
110# assert response.json["data"] == suggestion.to_json()