This commit is contained in:
zlwu committed 2026-06-11 15:42:58 +08:00
1 parent 195c4c0a34
commit 64219a68c7
317 files changed
+66845 -33515

No files matched your search

@@ -0,0 +1,110 @@
"""基础实验申请单与售卖计划批量创建"""
import unittest
from unittest.mock import MagicMock, patch
from app.crud import pilot_application as crud
class TestBasicExperimentApplicationNo(unittest.TestCase):
@patch("app.crud.pilot_application.datetime")
def test_generate_application_no_basic_experiment_prefix(self, mock_dt):
mock_dt.now.return_value.strftime.return_value = "20260610"
db = MagicMock()
mock_query = MagicMock()
db.query.return_value = mock_query
mock_query.filter.return_value = mock_query
mock_query.order_by.return_value = mock_query
mock_query.first.return_value = None
result = crud._generate_application_no(db, "zkxw", biz_type="basic_experiment")
self.assertTrue(result.startswith("JCSY"))
self.assertNotIn("JCSQ", result)
self.assertEqual(result, "JCSY202606100001")
class TestBasicExperimentCreateValidation(unittest.TestCase):
def test_create_basic_experiment_requires_customer_fields(self):
db = MagicMock()
data = {
"bizType": "basic_experiment",
"projectTitle": "课题A",
"customerName": "",
"customerContact": "张三",
"customerPhone": "13800000000",
}
with self.assertRaises(ValueError) as ctx:
crud.create_application(
db,
data=data,
tenant_no="zkxw",
user_id="user-1",
dept_id="dept-1",
)
self.assertIn("客户名称", str(ctx.exception))
class TestBasicExperimentSaleSchedules(unittest.TestCase):
@patch("app.crud.pilot_application.create_schedule")
@patch("app.crud.pilot_application._get_or_create_infusion_plan")
def test_two_product_lines_create_two_schedules(self, mock_get_plan, mock_create_schedule):
db = MagicMock()
app = MagicMock()
app.biz_type = "basic_experiment"
plan = MagicMock()
plan.id = "plan-1"
mock_query = MagicMock()
db.query.return_value = mock_query
mock_query.filter.return_value = mock_query
mock_query.first.return_value = app
mock_query.scalar.return_value = 2
mock_get_plan.return_value = plan
mock_create_schedule.side_effect = [{"id": "sched-1"}, {"id": "sched-2"}]
product_lines = [
{
"cellTypeName": "NK",
"specText": "1e8",
"pickupTime": "2026-06-15",
"amount": 1000,
"priceId": "p1",
"projectCode": "C01",
"projectName": "产品1",
"agreementPrice": 1000,
"actualPrice": 900,
"quantity": 1,
},
{
"cellTypeName": "T",
"specText": "5e7",
"pickupTime": "2026-06-20",
"amount": 2000,
"priceId": "p2",
"projectCode": "C02",
"projectName": "产品2",
"agreementPrice": 2000,
"actualPrice": 1800,
"quantity": 2,
},
]
results = crud.create_basic_experiment_sale_schedules(
db,
application_id="app-1",
product_lines=product_lines,
tenant_no="zkxw",
user_id="user-1",
dept_id="dept-1",
)
self.assertEqual(len(results), 2)
self.assertEqual(mock_create_schedule.call_count, 2)
first_call = mock_create_schedule.call_args_list[0]
self.assertEqual(first_call.kwargs.get("commit"), False)
self.assertEqual(len(first_call.args[2].get("cellProducts", [])), 1)
db.commit.assert_called_once()
if __name__ == "__main__":
unittest.main()