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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 |
from prami import repository as repo
from prami import safety
def settings_with(session, config, **overrides):
settings = repo.get_settings(session, config)
for key, value in overrides.items():
setattr(settings, key, value)
return settings
def test_favourites_disabled_by_default(session, pet, user, config):
settings = repo.get_settings(session, config)
allowed, _ = safety.may_favourite(session, settings, config, user, "public", "1")
assert allowed is False
def test_favourite_allowed_when_enabled(session, pet, user, config):
settings = settings_with(session, config, favourites_enabled=True)
allowed, why = safety.may_favourite(session, settings, config, user, "public", "1")
assert allowed is True
assert why == "ok"
def test_favourite_rejects_blocked_user(session, pet, user, config):
settings = settings_with(session, config, favourites_enabled=True)
user.blocked = True
allowed, _ = safety.may_favourite(session, settings, config, user, "public", "1")
assert allowed is False
def test_favourite_rejects_private_by_default(session, pet, user, config):
settings = settings_with(session, config, favourites_enabled=True)
allowed, _ = safety.may_favourite(session, settings, config, user, "direct", "1")
assert allowed is False
def test_favourite_allows_private_when_configured(session, pet, user, config):
config.allow_favourite_private = True
settings = settings_with(session, config, favourites_enabled=True)
allowed, _ = safety.may_favourite(session, settings, config, user, "private", "1")
assert allowed is True
def test_favourite_no_duplicate(session, pet, user, config):
settings = settings_with(session, config, favourites_enabled=True)
repo.record_social_action(session, pet.id, user.id, "9", "favourite")
allowed, why = safety.may_favourite(session, settings, config, user, "public", "9")
assert allowed is False
assert "already" in why
def test_favourite_hourly_cap(session, pet, user, config):
config.max_favourites_per_hour = 1
settings = settings_with(session, config, favourites_enabled=True)
repo.record_social_action(session, pet.id, user.id, "1", "favourite")
allowed, _ = safety.may_favourite(session, settings, config, user, "public", "2")
assert allowed is False
def test_boosts_disabled_by_default(session, pet, user, config):
settings = repo.get_settings(session, config)
allowed, _ = safety.may_boost(session, settings, config, user, "public", "1")
assert allowed is False
def test_boost_only_public(session, pet, user, config):
settings = settings_with(session, config, boosts_enabled=True)
allowed, _ = safety.may_boost(session, settings, config, user, "unlisted", "1")
assert allowed is False
def test_boost_allowed_for_public_when_enabled(session, pet, user, config):
settings = settings_with(session, config, boosts_enabled=True)
allowed, why = safety.may_boost(session, settings, config, user, "public", "1")
assert allowed is True
def test_boost_respects_min_interval(session, pet, user, config):
config.max_boosts_per_day = 5
settings = settings_with(session, config, boosts_enabled=True)
repo.record_social_action(session, pet.id, user.id, "1", "boost")
allowed, why = safety.may_boost(session, settings, config, user, "public", "2")
assert allowed is False
def test_paused_blocks_favourites(session, pet, user, config):
settings = settings_with(session, config, favourites_enabled=True, paused=True)
allowed, _ = safety.may_favourite(session, settings, config, user, "public", "1")
assert allowed is False
|