Add approval instance drafts with menu badges, dual-track user/role read model and role bound names, form-designer outline docs, and bare-metal test deploy scripts. Ignore local test-server credential file. Co-authored-by: Cursor <cursoragent@cursor.com>
39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
"""OA 菜单角标:待办数 / 草稿数"""
|
|
import unittest
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from app.crud import oa_instance_draft as oid_crud
|
|
from app.services import oa_engine as eng
|
|
|
|
|
|
class TestCountPendingTasks(unittest.TestCase):
|
|
def test_filters_approval_pending_for_user(self):
|
|
db = MagicMock()
|
|
q = db.query.return_value
|
|
filtered = q.filter.return_value
|
|
filtered.count.return_value = 3
|
|
|
|
n = eng.count_pending_tasks(db, tenant_no="t1", user_id="u1")
|
|
self.assertEqual(n, 3)
|
|
db.query.assert_called_once()
|
|
q.filter.assert_called_once()
|
|
filtered.count.assert_called_once()
|
|
|
|
|
|
class TestCountDrafts(unittest.TestCase):
|
|
def test_filters_owner_and_tenant(self):
|
|
db = MagicMock()
|
|
q = db.query.return_value
|
|
filtered = q.filter.return_value
|
|
filtered.count.return_value = 5
|
|
|
|
n = oid_crud.count_drafts(db, tenant_no="t1", owner_user_id="u1")
|
|
self.assertEqual(n, 5)
|
|
db.query.assert_called_once()
|
|
q.filter.assert_called_once()
|
|
filtered.count.assert_called_once()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|