Files
Jyotisha/tests/test_dynamic_rectification_opportunities.py
T
2026-07-19 03:11:57 +08:00

92 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from __future__ import annotations
import json
import re
from pathlib import Path
import pytest
from scripts.dynamic_rectification_opportunities import _dimension_opportunity
TASK2_PACKET_FIXTURE = (
Path(__file__).parents[1]
/ "frontend/tests/fixtures/task2-dynamic-rectification-packet.json"
)
@pytest.mark.parametrize(
("dimension", "domain_terms"),
[
("education", ("升学", "转学", "学习")),
("relocation", ("搬家", "离乡", "居住")),
("relationship", ("关系",)),
("career", ("工作", "职业", "身份")),
("health_pressure", ("健康", "压力", "生活")),
],
)
def test_every_supported_dimension_emits_localized_validator_safe_copy(
dimension: str,
domain_terms: tuple[str, ...],
) -> None:
windows = [
{
"window_start": "2018-01-01",
"window_end": "2020-12-31",
"activations": {"04:00": 1.0, "04:01": 0.0},
},
{
"window_start": "2021-01-01",
"window_end": "2023-12-31",
"activations": {"04:00": 0.0, "04:01": 1.0},
},
]
opportunity = _dimension_opportunity(dimension, windows, ["04:00", "04:01"])
assert opportunity is not None
context = opportunity["neutral_context"]
prompt = opportunity["fallback_prompt"]
assert any(term in context for term in domain_terms)
assert dimension not in context
assert re.search(r"[\u3400-\u9fff]", context)
assert re.search(r"[A-Za-z]", context) is None
assert context in prompt
assert prompt.endswith("")
assert re.search(r"[A-Za-z]", prompt) is None
assert all(label.endswith("") for label in (
item["fallback_label"] for item in opportunity["partitions"]
))
assert [item["fallback_label"].replace("", "") for item in opportunity["partitions"]] == [
"2018—2020",
"2021—2023",
]
def test_frontend_adapter_fixture_is_real_task2_opportunity_output() -> None:
packet = json.loads(TASK2_PACKET_FIXTURE.read_text(encoding="utf-8"))
windows = [
{
"window_start": "2018-01-01",
"window_end": "2020-12-31",
"activations": {"04:00": 1.0, "04:01": 0.0},
},
{
"window_start": "2021-01-01",
"window_end": "2023-12-31",
"activations": {"04:00": 0.0, "04:01": 1.0},
},
]
opportunity = _dimension_opportunity("career", windows, ["04:00", "04:01"])
fixture = packet["opportunities"][0]
assert fixture["opportunity_id"] == opportunity["opportunity_id"]
assert fixture["candidate_partition_fingerprint"] == opportunity[
"candidate_partition_fingerprint"
]
assert [item["partition_id"] for item in fixture["partitions"]] == [
item["partition_id"] for item in opportunity["partitions"]
]
assert fixture["dimension_code"] == "career"
assert "career" not in fixture["neutral_context"]