diff --git a/README.md b/README.md index d1b47e8..64a2add 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ New Badges ![GitHub closed issues](https://img.shields.io/github/issues-closed-raw/TeamBenign/PackReview_v4?style=plastic) - +[![Manual Build](https://img.shields.io/github/actions/workflow/status/TeamBenign/PackReview_v4/codecov.yml)](https://github.com/TeamBenign/PackReview_v4/actions) ![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/TeamBenign/PackReview_v4) ## Pre-requisites diff --git a/app/routes.py b/app/routes.py index 9cba88d..f3397c3 100644 --- a/app/routes.py +++ b/app/routes.py @@ -826,11 +826,14 @@ def query_gemini_model(user_message): job_reviews = get_all_jobs() dict_to_csv(job_reviews, tmp_csv_file_for_gemini) - response_text = get_gemini_feedback(tmp_csv_file_for_gemini, user_message) + response_text = query_gemini(tmp_csv_file_for_gemini, user_message) if response_text is None: return "Error: Couldn't fetch response from Gemini." else: return response_text + +def query_gemini(tmp_csv_file_for_gemini, user_message): + return get_gemini_feedback(tmp_csv_file_for_gemini, user_message) # Function to chunk large review texts def chunk_text(text, chunk_size=1500): diff --git a/tests/test_gemini_query.py b/tests/test_gemini_query.py new file mode 100644 index 0000000..7f2c9d9 --- /dev/null +++ b/tests/test_gemini_query.py @@ -0,0 +1,45 @@ +import unittest +from unittest.mock import patch, MagicMock +import os +from app.routes import query_gemini_model + + +class TestQueryGeminiModel(unittest.TestCase): + + @patch('app.routes.query_gemini') # Mock get_gemini_feedback + @patch('app.routes.dict_to_csv') # Mock dict_to_csv + @patch('app.routes.get_all_jobs') # Mock get_all_jobs + def test_query_gemini_model_success(self, mock_get_all_jobs, mock_dict_to_csv, mock_get_gemini_feedback): + """ + Test query_gemini_model when the response is successfully fetched from Gemini. + """ + # Arrange + mock_get_all_jobs.return_value = [{'id': 1, 'title': 'Job 1'}, {'id': 2, 'title': 'Job 2'}] + mock_get_gemini_feedback.return_value = "This is the Gemini response." + + # Act + result = query_gemini_model("Test user message") + + # Assert + mock_get_all_jobs.assert_called_once() # Ensure get_all_jobs was called + mock_dict_to_csv.assert_called_once() # Ensure dict_to_csv was called + mock_get_gemini_feedback.assert_called_once_with(os.path.join("tmp", "reviews", "tmp_review.txt"), "Test user message") + + @patch('app.routes.query_gemini') # Mock get_gemini_feedback + @patch('app.routes.dict_to_csv') # Mock dict_to_csv + @patch('app.routes.get_all_jobs') # Mock get_all_jobs + def test_query_gemini_model_no_response(self, mock_get_all_jobs, mock_dict_to_csv, mock_get_gemini_feedback): + """ + Test query_gemini_model when the response from Gemini is None. + """ + # Arrange + mock_get_all_jobs.return_value = [{'id': 1, 'title': 'Job 1'}, {'id': 2, 'title': 'Job 2'}] + mock_get_gemini_feedback.return_value = None + + # Act + result = query_gemini_model("Test user message") + + # Assert + mock_get_all_jobs.assert_called_once() # Ensure get_all_jobs was called + mock_dict_to_csv.assert_called_once() # Ensure dict_to_csv was called + mock_get_gemini_feedback.assert_called_once_with(os.path.join("tmp", "reviews", "tmp_review.txt"), "Test user message")