MakerFLOSS/tests/test_gen_overview.py

49 lines
1.5 KiB
Python
Raw Permalink Normal View History

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