Files

55 lines
2.6 KiB
Python
Raw Permalink Normal View History

import tempfile
import unittest
from pathlib import Path
from fastapi import FastAPI
from fastapi.testclient import TestClient
from api import xingbang_workspace as workspace
class WorkflowTests(unittest.TestCase):
def setUp(self):
self.tmp = tempfile.TemporaryDirectory(ignore_cleanup_errors=True)
self.old = workspace.DB_PATH
workspace.DB_PATH = Path(self.tmp.name) / 'test.sqlite3'
app = FastAPI()
app.include_router(workspace.router)
self.client = TestClient(app)
self.base = '/api/xingbang/workspace/projects'
self.project = self.client.post(self.base, json={'name':'测试','client':'客户','amount':5000,'assets':10000,'liabilities':7500,'lease_value':5500}).json()
def tearDown(self):
self.client.close()
workspace.DB_PATH = self.old
self.tmp.cleanup()
def act(self, kind, **kwargs):
return self.client.post(self.base+'/'+self.project['id']+'/actions', json={'kind':kind,'actor':'测试','note':'人工核对依据',**kwargs})
def test_missing_and_evidence(self):
p = self.act('assess').json()
self.assertEqual(p['risks'][2]['category'], '信息缺失')
self.assertEqual(p['risks'][0]['value'], .75)
self.assertEqual(p['risks'][0]['evidence']['snapshot'], p['snapshots'][-1]['id'])
self.assertEqual(self.act('report').status_code,409)
def test_report_lifecycle_and_invalidation(self):
self.act('assess')
for target in ['debt','lease','insurance']:
self.assertEqual(self.act('confirm',target=target).status_code,200)
p = self.act('report').json()
report = p['reports'][-1]
p = self.act('finalize',target=report['id']).json()
self.assertEqual(p['cards'][0]['status'],'草稿')
self.assertEqual(self.act('assess').status_code,409)
p = self.act('change',amount=6000).json()
self.assertTrue(p['reports'][0]['stale'])
self.assertEqual(p['snapshots'][0]['data']['amount'],5000)
self.assertEqual(self.act('report').status_code,409)
def test_task_requires_submission_before_close(self):
self.act('assess')
p = self.act('task',target='debt').json()
task=p['tasks'][0]['id']
self.assertEqual(self.act('close_task',target=task).status_code,409)
self.assertEqual(self.act('submit_task',target=task).status_code,200)
self.assertEqual(self.act('close_task',target=task).json()['tasks'][0]['status'],'已解决')
def test_invalid_amount(self):
self.assertEqual(self.act('change',amount=-1).status_code,422)
if __name__ == '__main__':
unittest.main()