def test_add_merit():
    '''
    The usual merit price.
    '''
    ch = CharacterModel()
    builder = CharacterBuilder(ch)

    assert ch.get_value('xp') == 0
    builder.add_merit('large', 1, 'test merit', buy=True)
    assert ch.get_value('xp') == 4
def test_add_merit_special_cost():
    '''
    Crabs pay less for "large" merit.
    '''
    ch = CharacterModel()
    builder = CharacterBuilder(ch)
    builder.set_advancement_value('clan', 'crab')
    builder.set_advancement_value('family', 'crab_hida')
    builder.set_advancement_value('school', 'crab_hida_bushi_school')

    assert ch.get_value('xp') == 0
    builder.add_merit('large', 1, 'test merit', buy=True)
    assert ch.get_value('xp') == 3
def test_rings():
    ch = CharacterModel()
    assert ch.get_value('rings.earth') == 2

    ch.set_value('traits.stamina', 3)
    assert ch.get_value('rings.earth') == 2

    ch.set_value('traits.willpower', 3)
    assert ch.get_value('rings.earth') == 3
def test_wounds():
    ch = CharacterModel()
    assert ch.get_value('wounds.healthy') == 10
    assert ch.get_value('wounds.injured') == 26

    ch.set_value('traits.stamina', 3)
    ch.set_value('traits.willpower', 3)
    assert ch.get_value('wounds.healthy') == 15
    assert ch.get_value('wounds.injured') == 39
def test_wounds_penalty():
    ch = CharacterModel()
    assert ch.get_value('wounds.healthy.penalty') == 0
    assert ch.get_value('wounds.nicked.penalty') == 3
    assert ch.get_value('wounds.grazed.penalty') == 5
    assert ch.get_value('wounds.hurt.penalty') == 10
    assert ch.get_value('wounds.crippled.penalty') == 20
    assert ch.get_value('wounds.down.penalty') == 40
def test_armor_tn():
    ch = CharacterModel()
    ch.add_modifier('traits.reflexes', 1, source='test_armor_tn')
    assert ch.get_value('armor_tn.base') == 20
    assert ch.get_value('armor_tn.reduction') == 20
    assert ch.get_value('armor_tn.current') == 20
def test_initiative():
    ch = CharacterModel()
    assert ch.get_value('initiative.base') == '3k2'
    assert ch.get_value('initiative.modifiers') == '0k0'
    assert ch.get_value('initiative.current') == '3k2'
def test_modifiers():
    ch = CharacterModel()
    assert ch.get_value('traits.stamina') == 2
    assert ch.get_value('traits.willpower') == 2
    assert ch.get_value('rings.earth') == 2

    ch.add_modifier('traits.stamina', 1, 'test_modifier')
    assert ch.get_value('traits.stamina') == 3
    assert ch.get_value('traits.willpower') == 2
    assert ch.get_value('rings.earth') == 2

    ch.add_modifier('traits.willpower', 1, 'test_modifier')
    assert ch.get_value('traits.stamina') == 3
    assert ch.get_value('traits.willpower') == 3
    assert ch.get_value('rings.earth') == 3