"""FAC-001 ~ FAC-007: 工厂/供应商管理与下发文本测试。 覆盖功能点: - 供应商 CRUD - 供应商列表筛选 - 下发文本生成与确认 - 下发文本日志 """ from __future__ import annotations import pytest @pytest.mark.supplier @pytest.mark.p1 class TestSupplierManagement: """FAC-001 ~ FAC-002: 供应商管理测试。""" def test_create_supplier_success(self, client, admin_headers): """FAC-001: 新增供应商成功。""" resp = client.post("/api/suppliers", headers=admin_headers, json={ "supplier_name": "测试工厂", "supplier_type": "factory", "contact_name": "张三", "contact_mobile": "13900001001", }) assert resp.status_code == 200 data = resp.json() assert data["code"] == 0 def test_supplier_list_filter(self, client, admin_headers, make_supplier): """FAC-002: 供应商列表筛选。""" make_supplier(supplier_name="铝板工厂") make_supplier(supplier_name="钢材工厂") 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 @pytest.mark.supplier @pytest.mark.p0 class TestSupplierText: """FAC-003 ~ FAC-007: 下发文本测试。""" def test_generate_supplier_text(self, client, manager_headers, make_order): """FAC-003: 生成下发文本成功。""" order = make_order(order_status="approved") resp = client.post(f"/api/orders/{order.id}/supplier-text", headers=manager_headers, json={ "supplier_id": order.factory_id, }) assert resp.status_code == 200 data = resp.json() assert "text_content" in data["data"] def test_confirm_supplier_text(self, client, manager_headers, make_order): """FAC-004: 确认下发工厂成功。""" order = make_order(order_status="approved") resp = client.post(f"/api/orders/{order.id}/supplier-text/confirm", headers=manager_headers, json={ "supplier_id": order.factory_id, "text_content": "测试下发文本内容", }) assert resp.status_code == 200 def test_confirm_text_not_approved(self, client, manager_headers, make_order): """FAC-005: 非 approved 状态不能确认下发。""" order = make_order(order_status="draft") resp = client.post(f"/api/orders/{order.id}/supplier-text/confirm", headers=manager_headers, json={ "supplier_id": order.factory_id, "text_content": "不应该成功", }) assert resp.status_code in (400, 409)