testOrderControllerHasCommissionMethod(); $this->testOrderControllerDetailIncludesCommissions(); $this->testOrderDetailViewHasCommissionSection(); $this->testOrderDetailJsHasCommissionData(); $this->testOrder64CommissionDataQuery(); echo "\n测试结果: {$this->passed} 通过, {$this->failed} 失败\n"; if ($this->failed > 0) { exit(1); } } private function assert($condition, $message) { if ($condition) { echo " [PASS] {$message}\n"; $this->passed++; } else { echo " [FAIL] {$message}\n"; $this->failed++; } } /** * 1. 验证 Order 控制器中必须包含 getOrderCommissions 辅助方法 */ public function testOrderControllerHasCommissionMethod() { $controllerPath = __DIR__ . '/../application/admin/controller/shopro/order/Order.php'; $this->assert(is_file($controllerPath), "Order.php 必须存在: {$controllerPath}"); $content = file_get_contents($controllerPath); $hasMethod = strpos($content, 'function getOrderCommissions(') !== false; $this->assert($hasMethod, "Order 控制器必须包含 getOrderCommissions 方法以获取分销与区域代理等分成明细"); } /** * 2. 验证 Order 控制器的 detail 方法返回值中必须包含 commissions 和 commission_total */ public function testOrderControllerDetailIncludesCommissions() { $controllerPath = __DIR__ . '/../application/admin/controller/shopro/order/Order.php'; $content = file_get_contents($controllerPath); $startPos = strpos($content, 'public function detail('); $this->assert($startPos !== false, "Order 控制器必须包含 detail 方法"); $nextFuncPos = strpos($content, 'public function ', $startPos + 20); $methodBody = substr($content, $startPos, ($nextFuncPos !== false ? $nextFuncPos - $startPos : 1000)); $hasCommissionsKey = strpos($methodBody, "'commissions'") !== false || strpos($methodBody, '"commissions"') !== false; $hasTotalKey = strpos($methodBody, "'commission_total'") !== false || strpos($methodBody, '"commission_total"') !== false; $this->assert($hasCommissionsKey, "Order::detail 返回数据必须包含 'commissions' 键"); $this->assert($hasTotalKey, "Order::detail 返回数据必须包含 'commission_total' 键"); } /** * 3. 验证 detail.html 视图中必须包含佣金分成明细表格区域 */ public function testOrderDetailViewHasCommissionSection() { $viewPath = __DIR__ . '/../application/admin/view/shopro/order/order/detail.html'; $this->assert(is_file($viewPath), "detail.html 必须存在: {$viewPath}"); $content = file_get_contents($viewPath); $hasSection = strpos($content, 'commissionList') !== false && strpos($content, '佣金分成明细') !== false; $this->assert($hasSection, "detail.html 必须包含佣金分成明细 (commissionList) 展示模块"); } /** * 4. 验证 order.js 中包含 commissionList 状态与数据接收 */ public function testOrderDetailJsHasCommissionData() { $jsPath = __DIR__ . '/../public/assets/js/backend/shopro/order/order.js'; $this->assert(is_file($jsPath), "order.js 必须存在: {$jsPath}"); $content = file_get_contents($jsPath); $hasState = strpos($content, 'commissionList') !== false; $hasReceive = strpos($content, 'res.data.commissions') !== false; $this->assert($hasState, "order.js 必须声明 commissionList 变量"); $this->assert($hasReceive, "order.js 的 getDetail 必须接收并赋值 res.data.commissions"); } /** * 5. 验证数据库中订单 64 的实际分成数据 */ public function testOrder64CommissionDataQuery() { $dbConfigFile = __DIR__ . '/../application/database.php'; if (!is_file($dbConfigFile)) { $this->assert(false, "数据库配置文件不存在"); return; } require_once __DIR__ . '/../thinkphp/base.php'; $dbConfig = require $dbConfigFile; try { $pdo = new PDO( "mysql:host={$dbConfig['hostname']};dbname={$dbConfig['database']};charset=utf8mb4", $dbConfig['username'], $dbConfig['password'] ); // 查询分销佣金 $stmt = $pdo->query("SELECT * FROM fa_shopro_commission_reward WHERE order_id = 64"); $commRewards = $stmt->fetchAll(PDO::FETCH_ASSOC); $this->assert(count($commRewards) >= 1, "订单 64 必须存在至少 1 笔分销佣金记录 (当前: " . count($commRewards) . ")"); // 查询区域代理佣金 $stmt = $pdo->query("SELECT * FROM fa_shopro_regional_agent_reward WHERE order_id = 64"); $regRewards = $stmt->fetchAll(PDO::FETCH_ASSOC); $this->assert(count($regRewards) >= 1, "订单 64 必须存在至少 1 笔区域代理佣金记录 (当前: " . count($regRewards) . ")"); $total = 0; foreach ($commRewards as $r) { $total += floatval($r['commission']); } foreach ($regRewards as $r) { $total += floatval($r['commission']); } $this->assert(abs($total - 208.00) < 0.01, "订单 64 的分成总金额必须为 208.00 (计算得: {$total})"); } catch (Exception $e) { $this->assert(false, "数据库测试失败: " . $e->getMessage()); } } } $test = new OrderDetailCommissionTest(); $test->run();