Spaces:
Sleeping
Sleeping
| """Tests for app.assembly: test_type-aware battery assembly + default policy. | |
| Covers the Recall@10 lever (guaranteed personality/cognitive defaults) and the | |
| opt-out policy that keeps the "honors edits" behavior intact (a REFINE that drops | |
| OPQ must actually drop it). | |
| """ | |
| from __future__ import annotations | |
| from app.assembly import ( | |
| COGNITIVE_DEFAULT, | |
| PERSONALITY_DEFAULT, | |
| assemble_ids, | |
| default_flags, | |
| ) | |
| VALID = {PERSONALITY_DEFAULT, COGNITIVE_DEFAULT} | {f"skill-{i}" for i in range(20)} | |
| def test_defaults_injected_and_capped(): | |
| ids = assemble_ids(["skill-0", "skill-1"], k=10, valid_ids=VALID) | |
| assert PERSONALITY_DEFAULT in ids and COGNITIVE_DEFAULT in ids | |
| assert ids[:2] == ["skill-0", "skill-1"] # skills first, defaults appended | |
| assert len(ids) == 4 | |
| def test_defaults_reserved_when_pool_is_full(): | |
| pool = [f"skill-{i}" for i in range(20)] | |
| ids = assemble_ids(pool, k=10, valid_ids=VALID) | |
| assert len(ids) == 10 | |
| assert PERSONALITY_DEFAULT in ids and COGNITIVE_DEFAULT in ids | |
| assert ids.count(PERSONALITY_DEFAULT) == 1 # no duplicates | |
| def test_no_duplicate_when_default_already_retrieved(): | |
| pool = [PERSONALITY_DEFAULT, "skill-0"] | |
| ids = assemble_ids(pool, k=10, valid_ids=VALID) | |
| assert ids.count(PERSONALITY_DEFAULT) == 1 | |
| def test_valid_ids_prevents_wasted_slot(): | |
| # Defaults not in the catalog are neither injected nor reserve a slot. | |
| pool = [f"skill-{i}" for i in range(20)] | |
| ids = assemble_ids(pool, k=10, valid_ids={f"skill-{i}" for i in range(20)}) | |
| assert len(ids) == 10 | |
| assert PERSONALITY_DEFAULT not in ids | |
| def test_disable_flags(): | |
| ids = assemble_ids( | |
| ["skill-0"], k=10, add_personality=False, add_cognitive=False, valid_ids=VALID | |
| ) | |
| assert ids == ["skill-0"] | |
| # --- default_flags policy ----------------------------------------------------- | |
| def test_flags_default_on_for_plain_hiring(): | |
| add_p, add_c = default_flags({}, "Hiring a senior Java developer") | |
| assert add_p and add_c | |
| def test_flags_personality_opt_out_phrases(): | |
| for text in [ | |
| "Drop the OPQ32r", | |
| "remove the personality test", | |
| "no personality please", | |
| "screen for Excel, skip personality", | |
| ]: | |
| add_p, _ = default_flags({}, text.lower()) | |
| assert add_p is False, text | |
| def test_flags_cognitive_opt_out(): | |
| add_p, add_c = default_flags({}, "drop verify g+, keep the rest") | |
| assert add_c is False | |
| def test_flags_knowledge_only_prefs_disable_defaults(): | |
| add_p, add_c = default_flags( | |
| {"test_type_prefs": ["knowledge", "skills"]}, "excel and word only" | |
| ) | |
| assert add_p is False and add_c is False | |
| def test_flags_explicit_personality_pref_keeps_it(): | |
| add_p, _ = default_flags( | |
| {"test_type_prefs": ["knowledge", "personality"]}, "some text" | |
| ) | |
| assert add_p is True | |