40 lines
1.6 KiB
Python
40 lines
1.6 KiB
Python
import json
|
|
from data.field_tree import FieldTree
|
|
from data.test_case import TestCase, TestSuite, SparkConfig
|
|
from agents.llm import LLMClient
|
|
|
|
PROMPT_AGENT2 = """You are a COBOL test data designer. Given a FieldTree JSON, generate test data covering boundary values.
|
|
Output: {"test_cases": [{"id": "TC-001", "fields": {"FIELD_NAME": value, ...}, "coverage_targets": ["DP-001-TRUE"]}]}
|
|
For each field, generate 1-3 test cases covering: zero, boundary (MAX), typical value. Return valid JSON only."""
|
|
|
|
|
|
class Agent2Data:
|
|
def __init__(self, llm: LLMClient):
|
|
self.llm = llm
|
|
|
|
def design(self, tree: FieldTree, coverage_target: str = "boundary",
|
|
spark_mode: bool = False) -> TestSuite:
|
|
tree_json = {"fields": [{
|
|
"name": f.name, "level": f.level, "pic": f.pic,
|
|
"usage": f.usage, "length": f.length, "decimal": f.decimal,
|
|
"signed": f.signed, "redefines": f.redefines, "occurs": f.occurs
|
|
} for f in tree.flatten().values()]}
|
|
|
|
messages = [
|
|
{"role": "system", "content": PROMPT_AGENT2},
|
|
{"role": "user", "content": json.dumps(tree_json)}
|
|
]
|
|
raw = self.llm.call(messages)
|
|
test_cases = self._parse(raw)
|
|
suite = TestSuite(test_cases=test_cases)
|
|
if spark_mode:
|
|
suite.spark_config = SparkConfig(num_records=1000)
|
|
return suite
|
|
|
|
def _parse(self, raw: str) -> list[TestCase]:
|
|
try:
|
|
data = json.loads(raw)
|
|
return [TestCase(**tc) for tc in data.get("test_cases", [])]
|
|
except (json.JSONDecodeError, KeyError):
|
|
return [TestCase(id="TC-FALLBACK", fields={"BR-AMT": 0})]
|