75 lines
2.8 KiB
Python
75 lines
2.8 KiB
Python
"""供应商管理扩展测试。
|
|
|
|
测试用例:
|
|
- FAC-002c: 更新供应商
|
|
- FAC-002d: 软删除供应商
|
|
- FAC-002e: 硬删有订单的供应商
|
|
- FAC-002f: 批量删除供应商
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.mark.supplier
|
|
@pytest.mark.p1
|
|
class TestSupplierExtended:
|
|
"""供应商管理扩展测试。"""
|
|
|
|
def test_update_supplier(self, client, admin_headers, make_supplier):
|
|
"""FAC-002c: 更新供应商。"""
|
|
supplier = make_supplier()
|
|
resp = client.put(f"/api/suppliers/{supplier.id}", headers=admin_headers, json={
|
|
"supplier_name": "更新后的工厂",
|
|
"supplier_type": "factory",
|
|
"contact_name": "新联系人",
|
|
"contact_mobile": "13900001111",
|
|
})
|
|
assert resp.status_code in (200, 422)
|
|
|
|
def test_soft_delete_supplier(self, client, admin_headers, make_supplier):
|
|
"""FAC-002d: 软删除供应商。"""
|
|
supplier = make_supplier()
|
|
resp = client.delete(f"/api/suppliers/{supplier.id}", headers=admin_headers)
|
|
assert resp.status_code == 200
|
|
|
|
def test_hard_delete_supplier_with_orders_rejected(self, client, admin_headers, make_supplier, make_order):
|
|
"""FAC-002e: 有订单的供应商不能硬删除。"""
|
|
supplier = make_supplier()
|
|
order = make_order()
|
|
# 将订单关联到该供应商
|
|
order.factory_id = supplier.id
|
|
resp = client.delete(f"/api/suppliers/{supplier.id}/permanent", headers=admin_headers)
|
|
assert resp.status_code in (400, 200)
|
|
|
|
def test_batch_delete_suppliers(self, client, admin_headers, make_supplier):
|
|
"""FAC-002f: 批量删除供应商。"""
|
|
s1 = make_supplier()
|
|
s2 = make_supplier()
|
|
resp = client.post("/api/suppliers/batch-delete", headers=admin_headers, json={
|
|
"ids": [s1.id, s2.id],
|
|
})
|
|
assert resp.status_code == 200
|
|
|
|
def test_supplier_list_filter(self, client, admin_headers, make_supplier):
|
|
"""供应商列表筛选。"""
|
|
make_supplier(supplier_name="特殊工厂XYZ")
|
|
resp = client.get("/api/suppliers?keyword=特殊", headers=admin_headers)
|
|
assert resp.status_code == 200
|
|
|
|
def test_supplier_detail(self, client, admin_headers, make_supplier):
|
|
"""供应商详情。"""
|
|
supplier = make_supplier()
|
|
resp = client.get(f"/api/suppliers/{supplier.id}", headers=admin_headers)
|
|
assert resp.status_code == 200
|
|
|
|
def test_salesman_cannot_create_supplier(self, client, salesman_headers):
|
|
"""业务员不能创建供应商。"""
|
|
resp = client.post("/api/suppliers", headers=salesman_headers, json={
|
|
"supplier_name": "测试工厂",
|
|
"supplier_type": "factory",
|
|
"contact_name": "联系人",
|
|
"contact_mobile": "13900000000",
|
|
})
|
|
assert resp.status_code == 403
|