78 lines
2.7 KiB
Python
78 lines
2.7 KiB
Python
# tests/test_integration.py
|
|
import os
|
|
import tempfile
|
|
from unittest.mock import patch, MagicMock
|
|
from agent import generate
|
|
|
|
FIXTURE_DIR = os.path.join(os.path.dirname(__file__), 'test_data')
|
|
|
|
|
|
@patch('agent.api_client.requests.post')
|
|
def test_full_pipeline_mock_api(mock_post):
|
|
"""完整流水线测试,API 调用使用 mock。"""
|
|
mock_response = MagicMock()
|
|
mock_response.json.return_value = {
|
|
'choices': [{'message': {'content': '''{
|
|
"groups": {
|
|
"g1": {
|
|
"program": "ZAN04MAT",
|
|
"records": [
|
|
{
|
|
"input": {
|
|
"R01INNFIL": {
|
|
"R01-APPL-ID": "A0000001",
|
|
"R01-EMP-ID": "00000101",
|
|
"R01-APPL-DATE": "20260101",
|
|
"R01-START-TIME": "0900",
|
|
"R01-END-TIME": "1800",
|
|
"R01-STATUS": "0",
|
|
"R01-OVT-TYPE": "W",
|
|
"R01-FILLER": "D000000000000000000000000000000000000000000001"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}'''}}]
|
|
}
|
|
mock_response.raise_for_status = MagicMock()
|
|
mock_post.return_value = mock_response
|
|
|
|
cpy_dir = FIXTURE_DIR
|
|
output_dir = tempfile.mkdtemp()
|
|
rules_dir = os.path.join(os.path.dirname(__file__), '..', 'rules')
|
|
|
|
design_md = os.path.join(FIXTURE_DIR, '詳細設計書_ZAN04MAT.md')
|
|
source_cbl = os.path.join(FIXTURE_DIR, '..', '..', '..',
|
|
'cobol-tna-system', 'src', 'ZAN04MAT.cbl')
|
|
|
|
# Fallback if real source not found
|
|
if not os.path.exists(source_cbl):
|
|
source_cbl = os.path.join(output_dir, 'dummy.cbl')
|
|
with open(source_cbl, 'w', encoding='utf-8') as f:
|
|
f.write("COPY ZAN01REC REPLACING ==(A)== BY ==R01==.\n")
|
|
|
|
try:
|
|
result = generate(
|
|
design_md=design_md,
|
|
source_cbl=source_cbl,
|
|
file_db_md='dummy.md',
|
|
cpy_dir=cpy_dir,
|
|
db_md='dummy_db.md',
|
|
output_dir=output_dir,
|
|
api_key='test-key',
|
|
rules_dir=rules_dir,
|
|
)
|
|
|
|
assert result['program_id'] == 'ZAN04MAT'
|
|
assert result['groups'] > 0
|
|
assert len(result['output_files']) > 0
|
|
|
|
for path in result['output_files'].values():
|
|
assert os.path.exists(path), f"输出文件不存在: {path}"
|
|
|
|
finally:
|
|
if source_cbl.endswith('dummy.cbl') and os.path.exists(source_cbl):
|
|
os.remove(source_cbl)
|