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

1import pytest 

2from unittest.mock import patch 

3 

4from app.models.suggestion import Suggestion 

5 

6 

7@pytest.fixture 

8def mock_get_suggestion(): 

9 with patch("app.routes.suggestions.getSuggestion") as mock: 

10 yield mock 

11 

12 

13@pytest.fixture 

14def mock_check_code_correctness(): 

15 with patch("app.routes.suggestions.check_code_correctness") as mock: 

16 yield mock 

17 

18 

19@pytest.fixture 

20def mock_get_code_hint(): 

21 with patch("app.routes.suggestions.generate_hint_from_gemini") as mock: 

22 yield mock 

23 

24 

25@pytest.fixture 

26def mock_get_refined_prompt(): 

27 with patch("app.routes.suggestions.generate_refined_prompt") as mock: 

28 yield mock 

29 

30 

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 

35 

36 

37 

38def test_suggestions_route_prompt(client, mock_get_suggestion): 

39 mock_get_suggestion.return_value = ["Prompt response"] 

40 

41 response = client.post("/suggestion", json={"prompt": "Test prompt"}) 

42 

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) 

46 

47 

48def test_suggestions_route_no_prompt(client): 

49 response = client.post("/suggestion", json={}) 

50 

51 assert response.status_code == 400 

52 assert response.json.get("message") == "No prompt provided" 

53 

54 

55def test_suggestions_route_refine(client, mock_get_refined_prompt): 

56 mock_get_refined_prompt.return_value = '{"Language": "python", "Context": "Some context."}' 

57 

58 response = client.post("/suggestion/refine", json={"rawPrompt": "Raw Prompt"}) 

59 

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") 

64 

65 

66def test_suggestions_route_hint(client, mock_get_code_hint): 

67 mock_get_code_hint.return_value = "Hint response" 

68 

69 response = client.post("/suggestion/hint", json={ 

70 "prompt": "Hint prompt", 

71 "wrongCode": "wrongCode", 

72 "rightCode": "rightCode" 

73 }) 

74 

75 assert response.status_code == 200 

76 assert response.json["data"] == {"hint": "Hint response"} 

77 

78 

79def test_suggestions_route_answer(client, mock_check_code_correctness): 

80 mock_check_code_correctness.return_value = True 

81 

82 response = client.post("/suggestion/answer", json={ 

83 "prompt": "Answer prompt", 

84 "wrongCode": "wrongCode", 

85 "fixedCode": "fixedCode" 

86 }) 

87 

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") 

91 

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# ) 

105 

106# mock_get_suggestion_by_id.return_value = suggestion 

107# response = client.get("/suggestion/3") 

108 

109# assert response.status_code == 200 

110# assert response.json["data"] == suggestion.to_json()