grantforge-api / backend /tests /test_regulation_context_provider.py
GrantForge Bot
Deploy sha-93ab5d396350b3e6db35d3bd315ec00724aa6c32 — source build (no GHCR)
5ecb84c
Raw
History Blame Contribute Delete
3.35 kB
"""Testy API regulation_context_provider — per-grant formatting i snapshoty."""
from core.match.matcher_helpers import (
build_nabory_context_for_matcher,
format_grant_for_matcher_prompt,
)
from core.search.regulation_context_provider import (
format_regulation_context_for_prompt,
get_regulation_context_for_candidates,
)
from core.search.regulation_snapshot import regulation_snapshot_store
def test_get_regulation_context_returns_dict_keyed_by_grant_id():
candidates = [
{"id": "g1", "name": "Program A", "description": "Opis A"},
{"id": "g2", "program": "PARP", "description": "Opis B"},
]
ctx = get_regulation_context_for_candidates(candidates)
assert isinstance(ctx, dict)
assert "g1" in ctx
assert "g2" in ctx
assert ctx["g1"][0]["program"] == "Program A"
def test_get_regulation_context_uses_snapshots_when_available():
snap = regulation_snapshot_store.create_snapshot(
program="PARP|SMART TEST",
call_name="SMART TEST",
source_url="https://example.com/regulamin.pdf",
raw_text="§ 1 Beneficjent musi spełniać warunki kwalifikowalności kosztów kwalifikowalnych.",
module="regulamin",
)
candidates = [{
"id": "grant-smart",
"program": "PARP",
"name": "SMART TEST",
"regulation_urls": [snap.source_url],
}]
ctx = get_regulation_context_for_candidates(candidates, k_per_grant=3)
assert ctx["grant-smart"]
assert ctx["grant-smart"][0]["source"] == "snapshot"
assert "kwalifikowalności" in ctx["grant-smart"][0]["excerpt"].lower()
def test_format_regulation_context_for_prompt_accepts_grant_id():
ctx = {
"g1": [{"program": "Prog1", "doc_role": "regulamin", "excerpt": "Fragment regulaminu 1"}],
"g2": [{"program": "Prog2", "doc_role": "ogloszenie", "excerpt": "Fragment regulaminu 2"}],
}
out = format_regulation_context_for_prompt(ctx, "g1")
assert "Prog1" in out
assert "[regulamin]" in out
assert "Fragment regulaminu 1" in out
assert "Prog2" not in out
def test_format_regulation_context_for_prompt_without_grant_id_flattens_dict():
ctx = {
"g1": [{"program": "Prog1", "doc_role": "rwp", "excerpt": "A"}],
"g2": [{"program": "Prog2", "doc_role": "ogloszenie", "excerpt": "B"}],
}
out = format_regulation_context_for_prompt(ctx)
assert "Prog1" in out
assert "Prog2" in out
assert "[rwp]" in out
def test_format_grant_for_matcher_prompt_with_two_arg_formatter():
grant = {"id": "g1", "program": "PARP", "name": "SMART", "description": "Test"}
ctx = get_regulation_context_for_candidates([grant])
block = format_grant_for_matcher_prompt(
grant,
ctx,
format_regulation_context_for_prompt,
)
assert "g1" in block
assert "SMART" in block
assert "Test" in block
def test_build_nabory_context_for_matcher_no_signature_error():
nabory = [
{"id": "g1", "program": "PARP", "name": "A", "description": "d1"},
{"id": "g2", "program": "FENG", "name": "B", "description": "d2"},
]
ctx = get_regulation_context_for_candidates(nabory)
result = build_nabory_context_for_matcher(
nabory,
ctx,
format_regulation_context_for_prompt,
)
assert "g1" in result
assert "g2" in result