- 门控:用户提供 existing_system 路径 → 进入影响调查;未提供 → 原流程不变
- CodeParser 解析 Java(@RestController/@Service/@Entity/@TableName)+ ExistingSystemExplorer 组装
- ImpactAgent 变更点定位(变更区分×既存対応 确定性比对,无 LLM)→ ImpactReport(JSON 可下载)
- 影响调查结果作为 Writer 生成概要设计书的主上下文({{impact}},无专用影响章)
- source_aggregator 解除 existing_system=None 硬编码
- 既有系统样本 sunOnly/stock-trade-system(无 LICENSE,仅测试输入,保留来源标注)
- 新造股票交易域追加改修样本 要件定義_追加改修_股票.xlsx(对齐 sunOnly 真实类名)
- 全量 351 passed / 99.27% 覆盖;门禁 PASS(16 要素:新规5/変更8/削除3/未受影响50)
48 lines
1.9 KiB
Python
48 lines
1.9 KiB
Python
from types import SimpleNamespace
|
|
|
|
from genesis.data_models import ParsedTemplate, ChapterMarker
|
|
from genesis.writer.context_builder import build_contexts
|
|
from genesis.writer.models import GenerationContext
|
|
|
|
|
|
def _ss():
|
|
template = ParsedTemplate(
|
|
file_name="t.docx",
|
|
sections=[
|
|
ChapterMarker(type="heading", name="はじめに", level=1),
|
|
ChapterMarker(type="placeholder", name="section:introduction", level=0),
|
|
],
|
|
placeholders={},
|
|
styles={"defined": ["Heading1"], "used": ["Heading1", "Normal"]},
|
|
)
|
|
return SimpleNamespace(template=template)
|
|
|
|
|
|
def test_build_contexts_maps_chapters():
|
|
ctxs = build_contexts(_ss(), samples_dir="nonexistent_dir_xyz")
|
|
assert len(ctxs) == 1
|
|
c = ctxs[0]
|
|
assert isinstance(c, GenerationContext)
|
|
assert c.chapter_id == "introduction"
|
|
assert c.write_rules == [] # 样本缺失 -> 空
|
|
assert c.design_rules == []
|
|
assert c.template_styles == {"Heading1", "Normal"}
|
|
assert c.template_marker.section_placeholder == "section:introduction"
|
|
|
|
|
|
def test_build_contexts_without_impact_report_is_none():
|
|
ctxs = build_contexts(_ss(), samples_dir="nonexistent_dir_xyz")
|
|
assert ctxs[0].impact_report is None
|
|
|
|
|
|
def test_build_contexts_carries_impact_report():
|
|
from genesis.data_models import ChangeAnalysis, ChangeElement, ChangeType, ImpactReport
|
|
ca = ChangeAnalysis(project_type="enhancement", new_elements=[], modified_elements=[],
|
|
deleted_elements=[], unchanged_elements=[], warnings=[])
|
|
report = ImpactReport(metadata={"version": "v1"}, change_analysis=ca, summary={})
|
|
ss = _ss()
|
|
ss.impact_report = report
|
|
ctxs = build_contexts(ss, samples_dir="nonexistent_dir_xyz")
|
|
assert ctxs[0].impact_report is report
|
|
assert "project_type" in ctxs[0].to_vars()["impact"] or ctxs[0].to_vars()["impact"] != ""
|