diff --git a/evolverstage.py b/evolverstage.py index c6cb0ef..1b4515b 100644 --- a/evolverstage.py +++ b/evolverstage.py @@ -921,13 +921,6 @@ def determine_winner(scores, warriors): return warriors[1], warriors[0] return warriors[0], warriors[1] -def get_latest_log_entry(): - """ - Retrieves and parses the last entry from the battle log file. - """ - entries = get_recent_log_entries(n=1) - return entries[0] if entries else None - def get_recent_log_entries(n=5): """ Retrieves and parses the last n entries from the battle log file. @@ -973,9 +966,10 @@ def get_evolution_status(): except Exception: pass + recent_log = get_recent_log_entries(5) status = { - "latest_log": get_latest_log_entry(), - "recent_log": get_recent_log_entries(5), + "latest_log": recent_log[-1] if recent_log else None, + "recent_log": recent_log, "total_battles": total_battles, "arenas": [], "archive": None diff --git a/tests/test_evolution_status.py b/tests/test_evolution_status.py index 5941e3d..51bb69c 100644 --- a/tests/test_evolution_status.py +++ b/tests/test_evolution_status.py @@ -23,13 +23,13 @@ def setUp(self): def tearDown(self): self.patcher.stop() - @mock.patch('evolverstage.get_latest_log_entry') + @mock.patch('evolverstage.get_recent_log_entries') @mock.patch('evolverstage.get_leaderboard') @mock.patch('os.path.exists') @mock.patch('os.listdir') def test_get_evolution_status_basic(self, mock_listdir, mock_exists, mock_leaderboard, mock_get_log): """Test basic status gathering for a single arena.""" - mock_get_log.return_value = {'era': '1', 'arena': '0', 'winner': '5', 'loser': '10', 'score1': '150', 'score2': '50'} + mock_get_log.return_value = [{'era': '1', 'arena': '0', 'winner': '5', 'loser': '10', 'score1': '150', 'score2': '50'}] mock_leaderboard.return_value = {0: [('5', 10)]} def exists_side_effect(path): @@ -55,12 +55,12 @@ def exists_side_effect(path): self.assertEqual(arena0['avg_length'], 2.0) self.assertFalse(status['archive']['exists']) - @mock.patch('evolverstage.get_latest_log_entry') + @mock.patch('evolverstage.get_recent_log_entries') @mock.patch('evolverstage.get_leaderboard') @mock.patch('os.path.exists') def test_get_evolution_status_no_arena_dir(self, mock_exists, mock_leaderboard, mock_get_log): """Test status when arena directory is missing.""" - mock_get_log.return_value = None + mock_get_log.return_value = [] mock_leaderboard.return_value = {} mock_exists.return_value = False @@ -70,13 +70,13 @@ def test_get_evolution_status_no_arena_dir(self, mock_exists, mock_leaderboard, self.assertFalse(status['arenas'][0]['exists']) self.assertEqual(status['arenas'][0]['population'], 0) - @mock.patch('evolverstage.get_latest_log_entry') + @mock.patch('evolverstage.get_recent_log_entries') @mock.patch('evolverstage.get_leaderboard') @mock.patch('os.path.exists') @mock.patch('os.listdir') def test_get_evolution_status_archive(self, mock_listdir, mock_exists, mock_leaderboard, mock_get_log): """Test status when archive exists.""" - mock_get_log.return_value = None + mock_get_log.return_value = [] mock_leaderboard.return_value = {} def exists_side_effect(path): diff --git a/tests/test_log_utils.py b/tests/test_log_utils.py index d158a98..16e99db 100644 --- a/tests/test_log_utils.py +++ b/tests/test_log_utils.py @@ -8,7 +8,7 @@ import evolverstage -class TestGetLatestLogEntry(unittest.TestCase): +class TestGetRecentLogEntries(unittest.TestCase): def setUp(self): # Save original BATTLE_LOG_FILE to restore later self.original_log_file = evolverstage.BATTLE_LOG_FILE @@ -23,15 +23,15 @@ def tearDown(self): def test_log_file_not_found(self, mock_exists): """Test behavior when the log file does not exist.""" mock_exists.return_value = False - result = evolverstage.get_latest_log_entry() - self.assertIsNone(result) + result = evolverstage.get_recent_log_entries(n=1) + self.assertEqual(result, []) @mock.patch('os.path.exists') def test_log_file_not_configured(self, _): """Test behavior when BATTLE_LOG_FILE is None or empty.""" evolverstage.BATTLE_LOG_FILE = None - result = evolverstage.get_latest_log_entry() - self.assertIsNone(result) + result = evolverstage.get_recent_log_entries(n=1) + self.assertEqual(result, []) @mock.patch('os.path.exists') def test_log_file_empty(self, mock_exists): @@ -40,9 +40,9 @@ def test_log_file_empty(self, mock_exists): # Mock file opening and deque behavior with mock.patch('builtins.open', mock.mock_open(read_data="")): - result = evolverstage.get_latest_log_entry() + result = evolverstage.get_recent_log_entries(n=1) - self.assertIsNone(result) + self.assertEqual(result, []) @mock.patch('os.path.exists') def test_log_file_with_content(self, mock_exists): @@ -52,8 +52,10 @@ def test_log_file_with_content(self, mock_exists): log_content = "era,arena,winner,loser,score1,score2,bred_with\n0,1,5,10,150,50,7\n" with mock.patch('builtins.open', mock.mock_open(read_data=log_content)): - result = evolverstage.get_latest_log_entry() + result = evolverstage.get_recent_log_entries(n=1) + self.assertEqual(len(result), 1) + result = result[0] self.assertEqual(result['era'], '0') self.assertEqual(result['arena'], '1') self.assertEqual(result['winner'], '5') @@ -67,6 +69,6 @@ def test_log_file_read_error(self, mock_exists): mock_exists.return_value = True with mock.patch('builtins.open', side_effect=IOError("Disk error")): - result = evolverstage.get_latest_log_entry() + result = evolverstage.get_recent_log_entries(n=1) - self.assertIsNone(result) + self.assertEqual(result, []) diff --git a/tests/test_status.py b/tests/test_status.py index 6800ea3..c91c1c4 100644 --- a/tests/test_status.py +++ b/tests/test_status.py @@ -11,15 +11,13 @@ class TestStatus(unittest.TestCase): @patch('builtins.print') @patch('evolverstage.get_recent_log_entries') - @patch('evolverstage.get_latest_log_entry') @patch('os.path.exists') @patch('os.listdir') - def test_print_status_structure(self, mock_listdir, mock_exists, mock_get_log, mock_get_recent, mock_print): + def test_print_status_structure(self, mock_listdir, mock_exists, mock_get_recent, mock_print): # Setup mocks log_entry = { 'era': '0', 'arena': '0', 'winner': '5', 'loser': '10', 'score1': '150', 'score2': '50' } - mock_get_log.return_value = log_entry mock_get_recent.return_value = [log_entry] mock_exists.return_value = True mock_listdir.return_value = ['1.red', '2.red']