Fixes and improvements.
This commit is contained in:
@@ -14,23 +14,20 @@ class TestIGDBIntegration(unittest.IsolatedAsyncioTestCase):
|
||||
"model": "gpt-4",
|
||||
"enable-game-info": True,
|
||||
"igdb-client-id": "test_client",
|
||||
"igdb-access-token": "test_token"
|
||||
}
|
||||
|
||||
self.config_without_igdb = {
|
||||
"openai-key": "test_key",
|
||||
"model": "gpt-4",
|
||||
"enable-game-info": False
|
||||
"igdb-access-token": "test_token",
|
||||
}
|
||||
|
||||
self.config_without_igdb = {"openai-key": "test_key", "model": "gpt-4", "enable-game-info": False}
|
||||
|
||||
def test_igdb_initialization_enabled(self):
|
||||
"""Test IGDB is initialized when enabled in config."""
|
||||
with patch('fjerkroa_bot.openai_responder.IGDBQuery') as mock_igdb:
|
||||
with patch("fjerkroa_bot.openai_responder.IGDBQuery") as mock_igdb:
|
||||
mock_igdb_instance = Mock()
|
||||
mock_igdb_instance.get_openai_functions.return_value = [{"name": "test_function"}]
|
||||
mock_igdb.return_value = mock_igdb_instance
|
||||
|
||||
|
||||
responder = OpenAIResponder(self.config_with_igdb)
|
||||
|
||||
|
||||
mock_igdb.assert_called_once_with("test_client", "test_token")
|
||||
self.assertEqual(responder.igdb, mock_igdb_instance)
|
||||
|
||||
@@ -42,21 +39,23 @@ class TestIGDBIntegration(unittest.IsolatedAsyncioTestCase):
|
||||
def test_igdb_search_games_functionality(self):
|
||||
"""Test the search_games functionality."""
|
||||
igdb = IGDBQuery("test_client", "test_token")
|
||||
|
||||
|
||||
# Mock the actual API call
|
||||
mock_games = [{
|
||||
"id": 1,
|
||||
"name": "Test Game",
|
||||
"summary": "A test game",
|
||||
"first_release_date": 1577836800, # 2020-01-01
|
||||
"genres": [{"name": "Action"}],
|
||||
"platforms": [{"name": "PC"}],
|
||||
"rating": 85.5
|
||||
}]
|
||||
|
||||
with patch.object(igdb, 'generalized_igdb_query', return_value=mock_games):
|
||||
mock_games = [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Test Game",
|
||||
"summary": "A test game",
|
||||
"first_release_date": 1577836800, # 2020-01-01
|
||||
"genres": [{"name": "Action"}],
|
||||
"platforms": [{"name": "PC"}],
|
||||
"rating": 85.5,
|
||||
}
|
||||
]
|
||||
|
||||
with patch.object(igdb, "generalized_igdb_query", return_value=mock_games):
|
||||
results = igdb.search_games("Test Game")
|
||||
|
||||
|
||||
self.assertIsNotNone(results)
|
||||
self.assertEqual(len(results), 1)
|
||||
self.assertEqual(results[0]["name"], "Test Game")
|
||||
@@ -65,55 +64,51 @@ class TestIGDBIntegration(unittest.IsolatedAsyncioTestCase):
|
||||
|
||||
def test_igdb_openai_functions(self):
|
||||
"""Test OpenAI function definitions."""
|
||||
igdb = IGDBQuery("test_client", "test_token")
|
||||
igdb = IGDBQuery("test_client", "test_token")
|
||||
functions = igdb.get_openai_functions()
|
||||
|
||||
|
||||
self.assertEqual(len(functions), 2)
|
||||
|
||||
|
||||
# Check search_games function
|
||||
search_func = functions[0]
|
||||
self.assertEqual(search_func["name"], "search_games")
|
||||
self.assertIn("description", search_func)
|
||||
self.assertIn("parameters", search_func)
|
||||
self.assertIn("query", search_func["parameters"]["properties"])
|
||||
|
||||
|
||||
# Check get_game_details function
|
||||
details_func = functions[1]
|
||||
details_func = functions[1]
|
||||
self.assertEqual(details_func["name"], "get_game_details")
|
||||
self.assertIn("game_id", details_func["parameters"]["properties"])
|
||||
|
||||
async def test_execute_igdb_function_search(self):
|
||||
"""Test executing IGDB search function."""
|
||||
with patch('fjerkroa_bot.openai_responder.IGDBQuery') as mock_igdb_class:
|
||||
with patch("fjerkroa_bot.openai_responder.IGDBQuery") as mock_igdb_class:
|
||||
mock_igdb = Mock()
|
||||
mock_igdb.search_games.return_value = [{"name": "Test Game", "id": 1}]
|
||||
mock_igdb.get_openai_functions.return_value = [{"name": "test_function"}]
|
||||
mock_igdb_class.return_value = mock_igdb
|
||||
|
||||
|
||||
responder = OpenAIResponder(self.config_with_igdb)
|
||||
|
||||
result = await responder._execute_igdb_function(
|
||||
"search_games",
|
||||
{"query": "Test Game", "limit": 5}
|
||||
)
|
||||
|
||||
|
||||
result = await responder._execute_igdb_function("search_games", {"query": "Test Game", "limit": 5})
|
||||
|
||||
self.assertIsNotNone(result)
|
||||
self.assertIn("games", result)
|
||||
mock_igdb.search_games.assert_called_once_with("Test Game", 5)
|
||||
|
||||
async def test_execute_igdb_function_details(self):
|
||||
"""Test executing IGDB game details function."""
|
||||
with patch('fjerkroa_bot.openai_responder.IGDBQuery') as mock_igdb_class:
|
||||
with patch("fjerkroa_bot.openai_responder.IGDBQuery") as mock_igdb_class:
|
||||
mock_igdb = Mock()
|
||||
mock_igdb.get_game_details.return_value = {"name": "Test Game", "id": 1}
|
||||
mock_igdb.get_openai_functions.return_value = [{"name": "test_function"}]
|
||||
mock_igdb_class.return_value = mock_igdb
|
||||
|
||||
|
||||
responder = OpenAIResponder(self.config_with_igdb)
|
||||
|
||||
result = await responder._execute_igdb_function(
|
||||
"get_game_details",
|
||||
{"game_id": 1}
|
||||
)
|
||||
|
||||
|
||||
result = await responder._execute_igdb_function("get_game_details", {"game_id": 1})
|
||||
|
||||
self.assertIsNotNone(result)
|
||||
self.assertIn("game", result)
|
||||
mock_igdb.get_game_details.assert_called_once_with(1)
|
||||
@@ -121,7 +116,7 @@ class TestIGDBIntegration(unittest.IsolatedAsyncioTestCase):
|
||||
def test_format_game_for_ai(self):
|
||||
"""Test game data formatting for AI consumption."""
|
||||
igdb = IGDBQuery("test_client", "test_token")
|
||||
|
||||
|
||||
mock_game = {
|
||||
"id": 1,
|
||||
"name": "Elden Ring",
|
||||
@@ -131,19 +126,19 @@ class TestIGDBIntegration(unittest.IsolatedAsyncioTestCase):
|
||||
"aggregated_rating": 90.5,
|
||||
"genres": [{"name": "Role-playing (RPG)"}, {"name": "Adventure"}],
|
||||
"platforms": [{"name": "PC (Microsoft Windows)"}, {"name": "PlayStation 5"}],
|
||||
"developers": [{"name": "FromSoftware"}]
|
||||
"involved_companies": [{"company": {"name": "FromSoftware"}}, {"company": {"name": "Bandai Namco"}}],
|
||||
}
|
||||
|
||||
|
||||
formatted = igdb._format_game_for_ai(mock_game)
|
||||
|
||||
|
||||
self.assertEqual(formatted["name"], "Elden Ring")
|
||||
self.assertEqual(formatted["rating"], "96.0/100")
|
||||
self.assertEqual(formatted["user_rating"], "90.5/100")
|
||||
self.assertEqual(formatted["release_year"], 2022)
|
||||
self.assertIn("Role-playing (RPG)", formatted["genres"])
|
||||
self.assertIn("PC (Microsoft Windows)", formatted["platforms"])
|
||||
self.assertIn("FromSoftware", formatted["developers"])
|
||||
self.assertIn("FromSoftware", formatted["companies"])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user