feat: add README document contract

This commit is contained in:
DongHyeonka
2026-07-29 18:23:34 +09:00
parent a5ba640492
commit 332762b94f
7 changed files with 56 additions and 0 deletions
+8
View File
@@ -23,6 +23,14 @@ class ModelTests(unittest.TestCase):
self.assertEqual(brief.document_type, DocumentType.TECHNICAL_BLOG)
self.assertEqual(Brief.from_dict(brief.to_dict()).title, brief.title)
def test_readme_brief_round_trip(self) -> None:
brief = Brief.from_dict(brief_dict("readme"))
self.assertEqual(brief.document_type, DocumentType.README)
self.assertEqual(
Brief.from_dict(brief.to_dict()).document_type,
DocumentType.README,
)
def test_invalid_document_type_is_rejected(self) -> None:
data = brief_dict()
data["document_type"] = "essay"
+18
View File
@@ -4,7 +4,11 @@ import json
import unittest
from pathlib import Path
import jsonschema
from claridoc.models import Brief, Outline, PipelineConfig, SourcePack
from claridoc.structures import create_outline
from tests.helpers import brief_dict, make_sources
ROOT = Path(__file__).resolve().parents[1]
@@ -57,6 +61,20 @@ class SchemaTests(unittest.TestCase):
outline = Outline.from_dict(sample)
self.assertEqual(outline.sections[0].intent, "promise")
def test_readme_is_accepted_by_brief_and_outline_schemas(self) -> None:
brief_data = brief_dict("readme")
brief_schema = json.loads(
(ROOT / "schemas" / "brief.schema.json").read_text(encoding="utf-8")
)
outline_schema = json.loads(
(ROOT / "schemas" / "outline.schema.json").read_text(encoding="utf-8")
)
jsonschema.Draft202012Validator(brief_schema).validate(brief_data)
brief = Brief.from_dict(brief_data)
outline = create_outline(brief, make_sources())
jsonschema.Draft202012Validator(outline_schema).validate(outline.to_dict())
if __name__ == "__main__":
unittest.main()
+17
View File
@@ -17,6 +17,23 @@ class StructureTests(unittest.TestCase):
self.assertEqual(len(intents), len(set(intents)), document_type.value)
self.assertGreaterEqual(len(intents), 7, document_type.value)
def test_readme_outline_preserves_reader_onboarding_order(self) -> None:
brief = Brief.from_dict(brief_dict("readme"))
outline = create_outline(brief, make_sources())
self.assertEqual(
[section.intent for section in outline.sections],
[
"problem_value",
"principles",
"workflow",
"installation",
"quickstart",
"configuration",
"verification",
"limits_next",
],
)
def test_reconcile_preserves_contract_order(self) -> None:
brief = Brief.from_dict(brief_dict())
sources = make_sources()