code.pablomurad.com

prami-pet

Community virtual pet that lives as a Mastodon account

tests/test_memory.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
53
54
55
56
57
58
59
60
61
62
from prami import engine, memory, sanitize


def test_clean_memory_strips_quotes_and_html():
    assert sanitize.clean_memory('"<b>Soup is a weather condition.</b>"') == "Soup is a weather condition."


def test_clean_memory_rejects_url_and_mention():
    assert sanitize.clean_memory("visit http://x.example") is None
    assert sanitize.clean_memory("ask @bob") is None


def test_clean_memory_truncates():
    assert len(sanitize.clean_memory("x" * 300, max_len=180)) == 180


def test_categorize():
    assert memory.categorize("Prami is afraid of silent printers") == "fear"
    assert memory.categorize("Prami believes soup is a weather condition") == "lore"
    assert memory.categorize("Prami likes warm blankets") == "preference"


def test_submit_and_approve_flow(session, pet, user, config):
    suggestion = memory.submit(session, pet, user, "Prami believes soup is weather.", config)
    assert suggestion.status == "pending"
    assert memory.by_status(session, "pending") == [suggestion]
    memory.approve(session, suggestion.id, "admin")
    assert suggestion.status == "approved"
    assert memory.by_status(session, "approved") == [suggestion]


def test_reject_records_reason(session, pet, user, config):
    suggestion = memory.submit(session, pet, user, "something forgettable", config)
    memory.reject(session, suggestion.id, "admin", "spam")
    assert suggestion.status == "rejected"
    assert suggestion.rejection_reason == "spam"


def test_approve_nonpending_returns_none(session, pet, user, config):
    suggestion = memory.submit(session, pet, user, "x", config)
    memory.approve(session, suggestion.id, "admin")
    assert memory.approve(session, suggestion.id, "admin") is None


def test_teach_disabled_by_default(session, pet, user, config):
    result = engine.handle(session, pet, user, "teach", config, arg="Prami fears printers")
    assert result.accepted is False
    assert memory.by_status(session, "pending") == []


def test_teach_creates_pending_when_enabled(session, pet, user, config):
    config.enable_teach_command = True
    result = engine.handle(session, pet, user, "teach", config, arg="Prami fears printers")
    assert result.accepted is True
    assert len(memory.by_status(session, "pending")) == 1


def test_teach_rejects_invalid_content(session, pet, user, config):
    config.enable_teach_command = True
    result = engine.handle(session, pet, user, "teach", config, arg="see http://x.example")
    assert result.accepted is False
    assert memory.by_status(session, "pending") == []