83 lines
2.7 KiB
Python
83 lines
2.7 KiB
Python
import pytest
|
||
from src.classes.avatar import Avatar, Gender
|
||
from src.classes.age import Age
|
||
from src.classes.cultivation import Realm, CultivationProgress
|
||
from src.utils.id_generator import get_avatar_id
|
||
from src.classes.root import Root
|
||
from src.classes.calendar import create_month_stamp, Year, Month
|
||
|
||
def test_register_avatar_buffer(base_world):
|
||
"""测试注册新角色时的缓冲区逻辑"""
|
||
manager = base_world.avatar_manager
|
||
|
||
# 1. 注册普通角色(非新生,例如加载存档)
|
||
a1 = Avatar(
|
||
world=base_world,
|
||
name="OldGuy",
|
||
id=get_avatar_id(),
|
||
birth_month_stamp=create_month_stamp(Year(100), Month.JANUARY),
|
||
age=Age(20, Realm.Qi_Refinement),
|
||
gender=Gender.MALE
|
||
)
|
||
manager.register_avatar(a1, is_newly_born=False)
|
||
|
||
assert a1.id in manager.avatars
|
||
assert len(manager.pop_newly_born()) == 0
|
||
|
||
# 2. 注册新生角色
|
||
a2 = Avatar(
|
||
world=base_world,
|
||
name="Baby",
|
||
id=get_avatar_id(),
|
||
birth_month_stamp=create_month_stamp(Year(200), Month.JANUARY),
|
||
age=Age(1, Realm.Qi_Refinement),
|
||
gender=Gender.FEMALE
|
||
)
|
||
manager.register_avatar(a2, is_newly_born=True)
|
||
|
||
assert a2.id in manager.avatars
|
||
newly_born = manager.pop_newly_born()
|
||
assert len(newly_born) == 1
|
||
assert str(a2.id) in newly_born
|
||
|
||
# 3. 再次获取应为空
|
||
assert len(manager.pop_newly_born()) == 0
|
||
|
||
@pytest.mark.asyncio
|
||
async def test_simulator_birth_logic(base_world):
|
||
"""测试模拟器中的生子逻辑集成"""
|
||
from src.sim.simulator import Simulator
|
||
from unittest.mock import patch
|
||
from src.classes.avatar import Avatar
|
||
from src.classes.age import Age
|
||
from src.classes.cultivation import Realm, CultivationProgress
|
||
|
||
# 构造一个简单的模拟返回值
|
||
mock_avatar = Avatar(
|
||
world=base_world,
|
||
name="MockBaby",
|
||
id="mock_id_123",
|
||
birth_month_stamp=base_world.month_stamp,
|
||
age=Age(1, Realm.Qi_Refinement),
|
||
gender=Gender.MALE
|
||
)
|
||
|
||
sim = Simulator(base_world)
|
||
sim.awakening_rate = 1.0 # 必生
|
||
|
||
# Patch 掉 create_random_mortal,避免依赖复杂的宗门/地图数据
|
||
with patch('src.sim.simulator.create_random_mortal', return_value=mock_avatar):
|
||
# 执行一次更新
|
||
events = sim._phase_update_age_and_birth()
|
||
|
||
# 验证产生了一个新角色
|
||
newly_born = base_world.avatar_manager.pop_newly_born()
|
||
assert len(newly_born) == 1
|
||
assert newly_born[0] == mock_avatar.id
|
||
|
||
# 验证新角色在管理器中
|
||
avatar = base_world.avatar_manager.get_avatar(mock_avatar.id)
|
||
assert avatar is mock_avatar
|
||
assert avatar.name in events[0].content # 确保事件也生成了
|
||
|