generated from coulomb/repo-seed
Some checks failed
ci / validate-registry (push) Has been cancelled
Add hub sync and report cohorts CLI commands with pytest coverage, document sibling index publish contract and hub hardening path, align INTENT layout, raise external evidence on three registry entries, and close gap priorities 19-23 (priority 18 deferred on sibling index blocks).
99 lines
2.9 KiB
Python
99 lines
2.9 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
|
|
from reuse_surface.reports import (
|
|
cohort_filters_from_args,
|
|
format_cohort_json,
|
|
format_cohort_markdown,
|
|
select_cohort,
|
|
)
|
|
|
|
|
|
SAMPLE_INDEX = {
|
|
"capabilities": [
|
|
{
|
|
"id": "capability.planning.only",
|
|
"vector": "D5 / A0 / C2 / R1",
|
|
"domain": "helix_forge",
|
|
"consumption_modes": ["planning"],
|
|
},
|
|
{
|
|
"id": "capability.implementation.ready",
|
|
"vector": "D5 / A4 / C3 / R3",
|
|
"domain": "helix_forge",
|
|
"consumption_modes": ["cli", "service API"],
|
|
},
|
|
{
|
|
"id": "capability.other.domain",
|
|
"vector": "D4 / A3 / C2 / R2",
|
|
"domain": "other",
|
|
"consumption_modes": ["cli"],
|
|
},
|
|
]
|
|
}
|
|
|
|
|
|
def test_planning_min_filter():
|
|
filters = cohort_filters_from_args(
|
|
argparse.Namespace(
|
|
planning_min="D5",
|
|
implementation_min=None,
|
|
discovery_min=None,
|
|
availability_min=None,
|
|
availability_max=None,
|
|
domain=None,
|
|
)
|
|
)
|
|
matches = select_cohort(filters, SAMPLE_INDEX)
|
|
assert [item["id"] for item in matches] == ["capability.planning.only"]
|
|
|
|
|
|
def test_implementation_min_filter():
|
|
filters = cohort_filters_from_args(
|
|
argparse.Namespace(
|
|
planning_min=None,
|
|
implementation_min="A4",
|
|
discovery_min=None,
|
|
availability_min=None,
|
|
availability_max=None,
|
|
domain=None,
|
|
)
|
|
)
|
|
matches = select_cohort(filters, SAMPLE_INDEX)
|
|
assert [item["id"] for item in matches] == ["capability.implementation.ready"]
|
|
|
|
|
|
def test_domain_filter():
|
|
filters = {"discovery_min": None, "availability_min": None, "availability_max": None, "domain": "helix_forge"}
|
|
matches = select_cohort(filters, SAMPLE_INDEX)
|
|
assert len(matches) == 2
|
|
|
|
|
|
def test_format_cohort_markdown_includes_filters():
|
|
filters = {"discovery_min": "D5", "availability_min": None, "availability_max": "A1", "domain": None}
|
|
text = format_cohort_markdown([SAMPLE_INDEX["capabilities"][0]], filters)
|
|
assert "planning-min" not in text
|
|
assert "discovery_min" in text
|
|
assert "capability.planning.only" in text
|
|
|
|
|
|
def test_format_cohort_json_payload():
|
|
filters = {"discovery_min": "D5", "availability_min": None, "availability_max": "A1", "domain": None}
|
|
payload = json.loads(
|
|
format_cohort_json([SAMPLE_INDEX["capabilities"][0]], filters)
|
|
)
|
|
assert payload["count"] == 1
|
|
assert payload["filters"]["discovery_min"] == "D5"
|
|
|
|
|
|
def test_cmd_report_cohorts_markdown(monkeypatch):
|
|
from reuse_surface.cli import main
|
|
|
|
monkeypatch.setattr(
|
|
"reuse_surface.reports.load_index",
|
|
lambda: SAMPLE_INDEX,
|
|
)
|
|
exit_code = main(["report", "cohorts", "--planning-min", "D5"])
|
|
assert exit_code == 0 |