import pytest import gen_overview CFG = { "required_fields": ["hostname", "kind", "status"], "enums": { "kind": ["server", "switch", "pdu"], "status": ["in-use", "staging", "spare"], }, "key_field": "hostname", } def validate(stem, fm): from pathlib import Path gen_overview.validate(Path(f"{stem}.md"), fm, CFG) def test_missing_required_field_names_field_and_lists_allowed(): with pytest.raises(gen_overview.SchemaError) as ei: validate("srv06", {"hostname": "srv06", "kind": "server"}) msg = str(ei.value) assert "status" in msg # which field assert "in-use" in msg # an allowed value, so a novice knows what to type def test_enum_violation_lists_allowed_values(): with pytest.raises(gen_overview.SchemaError) as ei: validate("x", {"hostname": "x", "kind": "router", "status": "in-use"}) msg = str(ei.value) assert "router" in msg # the offending value assert "server" in msg # an allowed value def test_filename_mismatch_explains_the_rename(): with pytest.raises(gen_overview.SchemaError) as ei: validate("srv06", {"hostname": "srv07", "kind": "server", "status": "in-use"}) msg = str(ei.value).lower() assert "srv07.md" in msg or "rename" in msg def test_error_report_points_to_the_guide(capsys): gen_overview.report_errors(["srv06.md: missing required field 'status'"], "hardware") err = capsys.readouterr().err assert "make docs-index" in err assert gen_overview.GUIDE_URL in err