Files
mini-openclaw/backend/test_workspace.py

55 lines
2.6 KiB
Python

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()