-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_values_presets.py
More file actions
114 lines (81 loc) · 4.08 KB
/
Copy pathtest_values_presets.py
File metadata and controls
114 lines (81 loc) · 4.08 KB
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
"""Values-screening preset packs: neutral defaults, opt-in stance packs (M1.5)."""
from __future__ import annotations
from hypothesis import given
from hypothesis import strategies as st
from openjobradar.policy import (
PUBLIC_INTEREST,
describe_packs,
resolve_rules,
screen_organization,
)
PUBLIC = {"values_screening": {"preset": "public_interest"}}
def _org(name: str, description: str = "") -> dict:
return {"name": name, "description": description}
def test_missing_section_is_permissive() -> None:
assert screen_organization(_org("Missiles Inc", "weapons manufacturer"), {}).allowed
def test_preset_none_is_neutral_even_for_obvious_hits() -> None:
profile = {"values_screening": {"preset": "none"}}
verdict = screen_organization(_org("Private Prison Co"), profile)
assert verdict.allowed and verdict.rules == ()
def test_pack_rule_denies_on_description_evidence() -> None:
verdict = screen_organization(
_org("Meridian Systems", "A leading defense contractor for allied governments."),
PUBLIC,
)
assert not verdict.allowed
assert verdict.rules == ("preset:defense_weapons",)
assert "defense contractor" in verdict.reasons[0]
def test_pack_rule_matches_name_without_description() -> None:
verdict = screen_organization(_org("Predictive Policing Platform LLC"), PUBLIC)
assert not verdict.allowed
assert verdict.rules == ("preset:predictive_policing",)
def test_clean_mission_org_passes_public_interest() -> None:
verdict = screen_organization(
_org("Bright Benefits Lab", "We help families access public benefits."),
PUBLIC,
)
assert verdict.allowed
def test_custom_uses_only_the_user_denylist() -> None:
profile = {"values_screening": {"preset": "custom", "denylist": ["Gigacorp"]}}
assert not screen_organization(_org("Gigacorp Cloud"), profile).allowed
assert screen_organization(_org("Private Prison Co"), profile).allowed
def test_denylist_adds_to_pack_rules() -> None:
profile = {"values_screening": {"preset": "public_interest", "denylist": ["gigantic ads"]}}
verdict = screen_organization(_org("Gigantic Ads", "spyware vendor"), profile)
assert set(verdict.rules) == {"denylist:gigantic ads", "preset:mass_surveillance"}
assert len(verdict.reasons) == 2
def test_word_boundary_no_partial_token_hits() -> None:
verdict = screen_organization(_org("Munitionless Logistics"), PUBLIC)
assert verdict.allowed
def test_empty_org_record_passes() -> None:
assert screen_organization({"name": "", "description": ""}, PUBLIC).allowed
def test_pack_registry_integrity() -> None:
for meta in describe_packs():
pack_rules = resolve_rules(meta["pack_id"])
assert len(pack_rules) == meta["rules"]
ids = [rule.rule_id for rule in pack_rules]
assert len(ids) == len(set(ids))
assert all(rule.phrases for rule in pack_rules)
def test_unknown_preset_behaves_like_none() -> None:
profile = {"values_screening": {"preset": "climate_only"}}
assert screen_organization(_org("Anything At All"), profile).allowed
assert resolve_rules("unknown") == []
def test_public_interest_is_registered() -> None:
assert PUBLIC_INTEREST.pack_id in {meta["pack_id"] for meta in describe_packs()}
@given(
name=st.text(max_size=40),
description=st.text(max_size=80),
preset=st.sampled_from(["none", "public_interest", "custom", "bogus"]),
denylist=st.lists(st.text(min_size=1, max_size=20), max_size=3),
)
def test_arbitrary_inputs_never_raise(name, description, preset, denylist):
profile = {"values_screening": {"preset": preset, "denylist": denylist}}
verdict = screen_organization({"name": name, "description": description}, profile)
assert verdict.status in ("allow", "deny")
assert len(verdict.rules) == len(verdict.reasons)
@given(st.text(min_size=0, max_size=40), st.text(min_size=0, max_size=40))
def test_evaluation_is_deterministic(name, description):
org = {"name": name, "description": description}
first = screen_organization(org, PUBLIC)
second = screen_organization(org, PUBLIC)
assert first == second