Files
Pier_v1/도면추출_연동패키지_20261102/history/tests/installed_smoke.py
T

53 lines
3.7 KiB
Python

"""Test the installed wheel, not source imports. Args: install_dir workspace converter."""
import json,os,subprocess,sys
from pathlib import Path
installed,workspace,converter=map(lambda p:Path(p).resolve(),sys.argv[1:4])
sys.path.insert(0,str(installed))
import bridge_drawing_extractor as sdk
assert installed in Path(sdk.__file__).resolve().parents
assert 'tkinter' not in sys.modules
assert sdk.check_environment(converter_path=converter)['converter_available']
assert not sdk.check_environment(converter_path=installed/'absent.exe')['converter_available']
try:sdk.extract_folder(installed/'absent_input',converter_path=converter)
except sdk.ExtractionError:pass
else:raise AssertionError('Missing folder should raise ExtractionError')
messages=[]
result=sdk.extract_folder(workspace/'산외교도면',output_dir=workspace/'outputs/package_smoke',converter_path=converter,on_progress=messages.append)
assert len(result.workbooks)==1 and messages
assert result.status=='needs_review' and result.review_count>0
book=result.workbooks[0];assert book.xlsx_path.is_file() and book.review_csv_path.is_file()
assert len(book.data['supplementary_drawings'])==1
assert any('03' in f['roles'] for f in result.files)
gold=json.loads((workspace/'Code/sanoe_extract/extracted.json').read_text(encoding='utf8'))
for e in gold['evidence']:
if e['sheet']=='Pier' and e['cell'][0] in 'CDHIJK' or e['sheet']=='Bearing' and e['cell'][0]=='F':continue
value=None if e['value'] in ['미확인','미확정'] else e['value']
assert book.data['cells'][e['sheet']][e['cell']]==value,(e['sheet'],e['cell'])
assert book.data['cells']['Pier']['C3']=='T형'
assert book.data['cells']['Pier']['D3']==71.0632
assert book.data['cells']['Bearing']['F3']==71.4178
assert book.data['cells']['Pier']['H3']==7000
assert book.data['cells']['Pier']['K3']==1
assert sum(v=='전열' for c,v in book.data['cells']['Bearing'].items() if c.startswith('H'))==38
assert sum(v=='후열' for c,v in book.data['cells']['Bearing'].items() if c.startswith('H'))==40
from openpyxl import load_workbook
wb=load_workbook(book.xlsx_path)
assert wb['Pier']['H2'].value=='말뚝\n길이_mm'
assert wb['Bearing']['G2'].value=='방위각' and wb['Bearing']['H2'].value=='전열/후열'
assert wb['Pier']['H3'].value==7000 and wb['Pier']['K3'].value==1
wb.close()
json.dumps(result.to_dict(),ensure_ascii=False)
assert 'data' not in result.to_dict(include_data=False)['workbooks'][0]
env=os.environ.copy();env['PYTHONPATH']=str(installed)
cmd=[sys.executable,'-m','bridge_drawing_extractor',str(workspace/'산외교도면'),'--output',str(workspace/'outputs/package_smoke'),'--converter',str(converter)]
proc=subprocess.run(cmd,cwd=installed,env=env,capture_output=True,encoding='utf8',timeout=120)
assert proc.returncode==0,proc.stderr
response=json.loads(proc.stdout);assert response['schema_version']=='1.0' and len(response['workbooks'])==1
assert response['status']=='needs_review';assert proc.stderr
failure=subprocess.run([sys.executable,'-m','bridge_drawing_extractor',str(installed/'absent_input'),'--converter',str(converter)],cwd=installed,env=env,capture_output=True,encoding='utf8',timeout=30)
assert failure.returncode==1 and json.loads(failure.stdout)['status']=='error'
report=dict(version=sdk.__version__,installed_module=str(sdk.__file__),verified_fields=sum(not(e['sheet']=='Pier' and e['cell'][0] in 'CDHIJK' or e['sheet']=='Bearing' and e['cell'][0]=='F') for e in gold['evidence']),gui_imported='tkinter' in sys.modules,api='passed',json_serialization='passed',cli='passed',failure_contract='passed',output=str(book.xlsx_path))
(workspace/'outputs/package_smoke/verification.json').write_text(json.dumps(report,ensure_ascii=False,indent=2),encoding='utf8')
print(json.dumps(report,ensure_ascii=True))