feat: add README document contract
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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,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()
|
||||
|
||||
Reference in New Issue
Block a user