code.pablomurad.com

prami-pet

Community virtual pet that lives as a Mastodon account

tests/test_relationships.py raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
from prami import engine
from prami.relationships import bond_for, is_critical, record


def test_bond_levels_by_trust():
    assert bond_for(0) == "stranger"
    assert bond_for(11) == "stranger"
    assert bond_for(12) == "familiar"
    assert bond_for(30) == "trusted"
    assert bond_for(55) == "friend"
    assert bond_for(80) == "beloved menace"


def test_record_counts_and_trust(pet, user):
    record(user, "pet", pet)
    assert user.total_interactions == 1
    assert user.pet_count == 1
    assert user.trust_score == 4
    assert user.bond_level == "stranger"


def test_bond_progresses_with_care(pet, user):
    for _ in range(3):
        record(user, "pet", pet)
    assert user.trust_score == 12
    assert user.bond_level == "familiar"


def test_non_care_command_counts_but_no_per_command_field(pet, user):
    record(user, "status", pet)
    assert user.total_interactions == 1
    assert user.feed_count == 0
    assert user.trust_score == 0


def test_critical_save_grants_bonus(pet, user):
    record(user, "feed", pet, was_critical=True)
    assert user.trust_score == 9


def test_is_critical_detects_bad_states(pet):
    pet.hunger, pet.health, pet.cleanliness, pet.energy = 90, 90, 70, 70
    assert is_critical(pet) is True
    pet.hunger = 40
    assert is_critical(pet) is False


def test_engine_records_relationship(session, pet, user, config):
    engine.handle(session, pet, user, "feed", config)
    assert user.feed_count == 1
    assert user.total_interactions == 1
    assert user.trust_score >= 3