30 lines
2.3 KiB
Python
30 lines
2.3 KiB
Python
import os,json,unittest,uuid
|
|
from pathlib import Path
|
|
from unittest.mock import patch
|
|
from pierzainer_ground.app import read_launch_context,GroundModelApp,ROOT
|
|
|
|
class AppLinkTest(unittest.TestCase):
|
|
def setUp(self):
|
|
self.cache=ROOT/'data/cache'/('gui_link_test_'+uuid.uuid4().hex);self.cache.mkdir(parents=True)
|
|
self.excel=ROOT.parent/'도면추출/samples/샘플01_산외교_교각입력데이터.xlsx'
|
|
self.drawing=ROOT/'data/input/sanwoe/02.종평면도(울산)_2017.0619-수정.dwg'
|
|
def config(self,drawing=''):
|
|
return dict(piers=str(self.excel),drawing=drawing,output=str(ROOT/'data/output'/self.cache.name),ready_file=str(self.cache/'ready'))
|
|
def test_excel_has_empty_drawing_and_keeps_workbook(self):
|
|
file=self.cache/'context.json';file.write_text(json.dumps(self.config()),encoding='utf-8')
|
|
with patch.dict(os.environ,PIERZAINER_GROUND_CONTEXT=str(file)):
|
|
context=read_launch_context();self.assertEqual(context['drawing'],'');self.assertEqual(context['piers'],str(self.excel))
|
|
def test_native_gui_prefills_both_and_calls_existing_pipeline(self):
|
|
context=self.config(str(self.drawing));app=GroundModelApp(context);app.withdraw()
|
|
try:
|
|
self.assertEqual(app.drawing.get(),str(self.drawing));self.assertEqual(app.piers.get(),str(self.excel));self.assertEqual(app.output.get(),context['output']);self.assertEqual(app.run_button['text'],'지반 생성')
|
|
with patch('pierzainer_ground.app.build_from_files',return_value={'map_status':{'status':'mapped'}}) as run:
|
|
app._start_run();kind,message=app.messages.get(timeout=3);self.assertEqual(kind,'done');self.assertEqual(run.call_args.args[:2],(str(self.drawing),str(self.excel)));self.assertEqual(run.call_args.kwargs['output'],context['output'])
|
|
finally:
|
|
for token in app.tk.call('after','info'):app.after_cancel(token)
|
|
app.destroy()
|
|
def test_bad_output_is_rejected(self):
|
|
context=self.config();context['output']=str(ROOT.parent);file=self.cache/'context.json';file.write_text(json.dumps(context),encoding='utf-8')
|
|
with patch.dict(os.environ,PIERZAINER_GROUND_CONTEXT=str(file)),self.assertRaises(ValueError):read_launch_context()
|
|
if __name__=='__main__':unittest.main()
|