Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 3 additions & 9 deletions evolverstage.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down
12 changes: 6 additions & 6 deletions tests/test_evolution_status.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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

Expand All @@ -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):
Expand Down
22 changes: 12 additions & 10 deletions tests/test_log_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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):
Expand All @@ -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):
Expand All @@ -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')
Expand All @@ -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, [])
4 changes: 1 addition & 3 deletions tests/test_status.py
Original file line number Diff line number Diff line change
Expand Up @@ -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']
Expand Down