fixing leveling xp reporting
This commit is contained in:
@@ -324,6 +324,7 @@ def test_add_experience_no_level_up(basic_character):
|
||||
assert leveled_up == False
|
||||
assert basic_character.level == 1
|
||||
assert basic_character.experience == 50
|
||||
assert basic_character.total_xp == 50 # Cumulative XP tracked
|
||||
|
||||
|
||||
def test_add_experience_with_level_up(basic_character):
|
||||
@@ -333,7 +334,8 @@ def test_add_experience_with_level_up(basic_character):
|
||||
|
||||
assert leveled_up == True
|
||||
assert basic_character.level == 2
|
||||
assert basic_character.experience == 0 # Reset
|
||||
assert basic_character.experience == 0 # Current level progress resets
|
||||
assert basic_character.total_xp == 100 # Cumulative XP preserved
|
||||
|
||||
|
||||
def test_add_experience_with_overflow(basic_character):
|
||||
@@ -343,7 +345,48 @@ def test_add_experience_with_overflow(basic_character):
|
||||
|
||||
assert leveled_up == True
|
||||
assert basic_character.level == 2
|
||||
assert basic_character.experience == 50 # Overflow
|
||||
assert basic_character.experience == 50 # Overflow preserved
|
||||
assert basic_character.total_xp == 150 # All XP tracked cumulatively
|
||||
|
||||
|
||||
def test_xp_to_next_level_property(basic_character):
|
||||
"""Test xp_to_next_level property calculation."""
|
||||
# At level 1 with 0 XP, need 100 to level up
|
||||
assert basic_character.xp_to_next_level == 100
|
||||
|
||||
# Add 30 XP
|
||||
basic_character.add_experience(30)
|
||||
assert basic_character.xp_to_next_level == 70 # 100 - 30
|
||||
|
||||
# Add 70 more to level up
|
||||
basic_character.add_experience(70)
|
||||
assert basic_character.level == 2
|
||||
assert basic_character.experience == 0
|
||||
# At level 2, need 282 XP to level up
|
||||
assert basic_character.xp_to_next_level == 282
|
||||
|
||||
|
||||
def test_total_xp_never_decreases(basic_character):
|
||||
"""Test that total_xp is cumulative and never decreases."""
|
||||
# Start at 0
|
||||
assert basic_character.total_xp == 0
|
||||
|
||||
# Add XP multiple times
|
||||
basic_character.add_experience(50)
|
||||
assert basic_character.total_xp == 50
|
||||
|
||||
basic_character.add_experience(50)
|
||||
assert basic_character.total_xp == 100
|
||||
# Should have leveled up to level 2
|
||||
assert basic_character.level == 2
|
||||
assert basic_character.experience == 0 # Current progress reset
|
||||
|
||||
# Add more XP
|
||||
basic_character.add_experience(100)
|
||||
assert basic_character.total_xp == 200 # Still cumulative
|
||||
|
||||
# Even though experience resets on level-up, total_xp keeps growing
|
||||
assert basic_character.total_xp >= basic_character.experience
|
||||
|
||||
|
||||
def test_xp_calculation(basic_origin):
|
||||
@@ -386,6 +429,7 @@ def test_character_serialization(basic_character):
|
||||
basic_character.gold = 500
|
||||
basic_character.level = 3
|
||||
basic_character.experience = 100
|
||||
basic_character.total_xp = 500 # Manually set for test
|
||||
|
||||
data = basic_character.to_dict()
|
||||
|
||||
@@ -394,7 +438,13 @@ def test_character_serialization(basic_character):
|
||||
assert data["name"] == "Test Hero"
|
||||
assert data["level"] == 3
|
||||
assert data["experience"] == 100
|
||||
assert data["total_xp"] == 500
|
||||
assert data["gold"] == 500
|
||||
# Check computed fields
|
||||
assert "xp_to_next_level" in data
|
||||
assert "xp_required_for_next_level" in data
|
||||
assert data["xp_required_for_next_level"] == 519 # Level 3 requires 519 XP
|
||||
assert data["xp_to_next_level"] == 419 # 519 - 100
|
||||
|
||||
|
||||
def test_character_deserialization(basic_player_class, basic_origin):
|
||||
|
||||
@@ -636,7 +636,15 @@ class TestRewardsCalculation:
|
||||
|
||||
# Mock loot service to return mock items
|
||||
mock_item = Mock()
|
||||
mock_item.to_dict.return_value = {"item_id": "sword", "quantity": 1}
|
||||
mock_item.to_dict.return_value = {
|
||||
"item_id": "test_sword",
|
||||
"name": "Test Sword",
|
||||
"item_type": "weapon",
|
||||
"rarity": "common",
|
||||
"description": "A test sword",
|
||||
"value": 10,
|
||||
"damage": 5,
|
||||
}
|
||||
service.loot_service.generate_loot_from_enemy.return_value = [mock_item]
|
||||
|
||||
mock_session = Mock()
|
||||
@@ -647,6 +655,7 @@ class TestRewardsCalculation:
|
||||
mock_char.level = 1
|
||||
mock_char.experience = 0
|
||||
mock_char.gold = 0
|
||||
mock_char.add_item = Mock() # Mock the add_item method
|
||||
service.character_service.get_character.return_value = mock_char
|
||||
service.character_service.update_character = Mock()
|
||||
|
||||
@@ -655,3 +664,6 @@ class TestRewardsCalculation:
|
||||
assert rewards.experience == 50
|
||||
assert rewards.gold == 25
|
||||
assert len(rewards.items) == 1
|
||||
# Verify items were added to character inventory
|
||||
assert mock_char.add_item.called, "Items should be added to character inventory"
|
||||
assert mock_char.add_item.call_count == 1, "Should add 1 item to inventory"
|
||||
|
||||
Reference in New Issue
Block a user