Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
nazmul-me committed Nov 27, 2024
2 parents d110e17 + ab6fb57 commit ee7c9d5
Show file tree
Hide file tree
Showing 4 changed files with 137 additions and 1 deletion.
2 changes: 1 addition & 1 deletion app/gemini_chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def get_gemini_feedback(csv_path, user_prompt):
response_text = response.text
output_text = re.sub(r"para 1:", "", response_text)
match = re.search(r"\[ID_START\](.*?)\[ID_END\]", output_text)

ids_string = ""
if match:
ids_string = match.group(1).strip() # Extract and remove leading/trailing spaces
id
Expand Down
1 change: 1 addition & 0 deletions app/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ def job_recommendations():

return render_template('review-page.html', jobs=recommended_reviews)


def getCurrentTime():
"""A method to get current time"""
return datetime.now().replace(microsecond=0).strftime("%Y-%m-%d %H:%M:%S")
Expand Down
115 changes: 115 additions & 0 deletions tests/test_gemini_chat.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
import unittest
from unittest.mock import patch, MagicMock
from app.gemini_chat import get_gemini_feedback # Replace with the actual module name


class TestGeminiFeedback(unittest.TestCase):

# Test Case 1: Test with valid inputs (csv_path and user_prompt)
@patch("google.generativeai.GenerativeModel")
@patch("google.generativeai.upload_file")
def test_get_gemini_feedback_valid(self, mock_upload_file, mock_GenerativeModel):
# Arrange
csv_path = "valid.txt"
user_prompt = "Tell me about the work culture"

# Mock the file upload to avoid the need for an actual file
mock_upload_file.return_value = "mocked_file_content"

# Mock the response from the API call
mock_response = MagicMock()
mock_response.text = "para 1: The work culture is great. para 2: [ID_START] 1, 2, 3 [ID_END]"

# Setup the mock to return the response
mock_GenerativeModel.return_value.generate_content.return_value = mock_response

# Act
response_text, ids_string = get_gemini_feedback(csv_path, user_prompt)

# Assert
self.assertEqual(response_text, "The work culture is great.")
self.assertEqual(ids_string, "1, 2, 3")

# Test Case 2: Test with missing or invalid CSV path
@patch("google.generativeai.GenerativeModel")
@patch("google.generativeai.upload_file")
def test_get_gemini_feedback_invalid_csv(self, mock_upload_file, mock_GenerativeModel):
# Arrange
csv_path = "" # Invalid path
user_prompt = "Tell me about the work culture"

# Act
response = get_gemini_feedback(csv_path, user_prompt)

# Assert
self.assertIsNone(response)

# Test Case 3: Test with malformed API response (no IDs found)
@patch("google.generativeai.GenerativeModel")
@patch("google.generativeai.upload_file")
def test_get_gemini_feedback_no_ids(self, mock_upload_file, mock_GenerativeModel):
# Arrange
csv_path = "valid_path.csv"
user_prompt = "Tell me about the work culture"

# Mock the file upload to avoid the need for an actual file
mock_upload_file.return_value = "mocked_file_content"

# Mock the response from the API call
mock_response = MagicMock()
mock_response.text = "para 1: The work culture is great. para 2: No IDs here."

# Setup the mock to return the response
mock_GenerativeModel.return_value.generate_content.return_value = mock_response

# Act
response_text, ids_string = get_gemini_feedback(csv_path, user_prompt)

# Assert
self.assertEqual(response_text, "The work culture is great.")
self.assertEqual(ids_string, "")

# Test Case 4: Test when an error occurs in the API call
@patch("google.generativeai.GenerativeModel")
@patch("google.generativeai.upload_file")
def test_get_gemini_feedback_api_error(self, mock_upload_file, mock_GenerativeModel):
# Arrange
csv_path = "valid_path.csv"
user_prompt = "Tell me about the work culture"

# Simulate an exception in the API call
mock_GenerativeModel.return_value.generate_content.side_effect = Exception("API Error")

# Act
response = get_gemini_feedback(csv_path, user_prompt)

# Assert
self.assertIsNone(response)

# Test Case 5: Test empty user prompt
@patch("google.generativeai.GenerativeModel")
@patch("google.generativeai.upload_file")
def test_get_gemini_feedback_empty_prompt(self, mock_upload_file, mock_GenerativeModel):
# Arrange
csv_path = "valid_path.csv"
user_prompt = "" # Empty user prompt

# Mock the file upload to avoid the need for an actual file
mock_upload_file.return_value = "mocked_file_content"

# Mock the response from the API call
mock_response = MagicMock()
mock_response.text = "para 1: The work culture is great. para 2: [ID_START] 1, 2 [ID_END]"

# Setup the mock to return the response
mock_GenerativeModel.return_value.generate_content.return_value = mock_response

# Act
response_text, ids_string = get_gemini_feedback(csv_path, user_prompt)

# Assert
self.assertEqual(response_text, "The work culture is great.")
self.assertEqual(ids_string, "1, 2")

if __name__ == "__main__":
unittest.main()
20 changes: 20 additions & 0 deletions tests/valid.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
title,company,description,locations,department,hourly_pay,benefits,review,rating,recommendation,author,upvote,id
software engineer intern,Apple,web development,NY,DEV,45,health benefit,great,4,6,user1,1,software engineer intern_Apple_NY_user1_DEV
software intern,Amazon,development,RTP,CS,60,transport,not bad,5,9,12345678,0,software intern_Amazon_RTP_12345678_CS
software engineer,Microsoft,asdf,RTP,software developer,50,fdsfd,dasfdsf,5,8,user1,0,software engineer_Microsoft_RTP_user1_software developer
software intern,Apple,developer,DC,ENG,60,no benefits,not that good,4,8,user1,0,software intern_Apple_DC_user1_ENG
software engineer intern,Tesla,Testing,California,testing,55,incentives,good,4,9,user1,0,software engineer intern_Tesla_California_user1_testing
software engineer intern,Apple,sdf,RTP,software developer,67,sdf,dsf,5,8,user1,0,software engineer intern_Apple_RTP_user1_software developer
software engineer intern,Microsoft,programming,DC,dev,70,money,great,5,10,user1,0,software engineer intern_Microsoft_DC_user1_dev
software intern,Microsoft,fdaf,RTP,fsd,50,afsd,dfadf,5,8,user1,0,software intern_Microsoft_RTP_user1_fsd
software engineer intern,Microsoft,sfasf,RTP,fsa,40,asdsa,asdsa,4,7,user1,0,software engineer intern_Microsoft_RTP_user1_fsa
intern,Apple,df,RTP,df,50,dfs,sff,5,7,user1,0,intern_Apple_RTP_user1_df
software engineer intern,Apple,dfsd,NY,R&D,78,dfsd,fds,5,8,user1,0,software engineer intern_Apple_NY_user1_R&D
software engineer intern,Apple,adsfk,California,adslf,56,dfs,dsf,0,7,user1,0,software engineer intern_Apple_California_user1_adslf
intern,Microsoft,dad,California,ddsf,35,dsf,dfsdf,4,8,user1,0,intern_Microsoft_California_user1_ddsf
software engineer intern,Microsoft,dsaf,California,safds,65,fdsf,dsf,3,6,user1,0,software engineer intern_Microsoft_California_user1_safds
software engineer intern,Microsoft,zcc,NY,dfs,77,fdg,dsfds,5,9,user1,0,software engineer intern_Microsoft_NY_user1_dfs
Web Developer,Oracle,Good,VA,Development,40,HI,Good,5,5,test,0,Web Developer_Oracle_VA
System Admin,Google,"system modification, system analysis, migrations",California,Systems,50,Bonus,"This job pays quite well, vacations are good and you dont have to work in the weekends",2,0,kishan,0,System Admin_Google_California
software engineer,google,"Software Development, Web Development",VA,Development,30,Bonus,No,1,0,kishan,0,software engineer_google_VA
Software Developer,NVidia,Responsible for software development of chip,New York,Development,10,Health Insurance,"Good place, good food",1,0,test,0,Software Developer_NVidia_New York

0 comments on commit ee7c9d5

Please sign in to comment.