safeLoad(); use app\support\EnterpriseWarehouseService; use app\support\WarehouseService; use support\think\Db; Db::setConfig(require dirname(__DIR__) . '/config/think-orm.php'); function assertTrue(bool $condition, string $message): void { if (!$condition) { throw new RuntimeException($message); } } function cleanupWarehouseMockData(): void { Db::name('shipping_warehouses')->whereLike('warehouse_code', 'OPENWHMOCK%')->delete(); } function createMockWarehouse(string $code, string $serviceProvider, string $status, int $sortOrder): void { $now = date('Y-m-d H:i:s'); Db::name('shipping_warehouses')->insert([ 'warehouse_name' => '开放接口测试仓库 ' . $code, 'warehouse_code' => $code, 'warehouse_type' => 'detection_center', 'service_provider' => $serviceProvider, 'receiver_name' => '开放接口收件人', 'receiver_mobile' => '13900001111', 'province' => '广东省', 'city' => '深圳市', 'district' => '南山区', 'detail_address' => '开放接口测试地址 ' . $code, 'service_time' => '周一至周五 09:00-18:00', 'notice' => '开放接口 mock 测试仓库', 'supported_category_ids_json' => json_encode([101, 102], JSON_UNESCAPED_UNICODE), 'service_area_provinces_json' => json_encode(['广东省'], JSON_UNESCAPED_UNICODE), 'service_area_cities_json' => json_encode(['深圳市'], JSON_UNESCAPED_UNICODE), 'status' => $status, 'is_default' => $sortOrder === 1 ? 1 : 0, 'sort_order' => $sortOrder, 'remark' => '不应暴露到第三方开放接口', 'created_at' => $now, 'updated_at' => $now, ]); } function findWarehouse(array $warehouses, string $code): ?array { foreach ($warehouses as $warehouse) { if (($warehouse['warehouse_code'] ?? '') === $code) { return $warehouse; } } return null; } try { new WarehouseService(); cleanupWarehouseMockData(); createMockWarehouse('OPENWHMOCK-A', 'open_mock_a', 'enabled', 1); createMockWarehouse('OPENWHMOCK-B', 'open_mock_b', 'enabled', 2); createMockWarehouse('OPENWHMOCK-DISABLED', 'open_mock_a', 'disabled', 3); $service = new EnterpriseWarehouseService(); $all = $service->list(); assertTrue(findWarehouse($all, 'OPENWHMOCK-A') !== null, '启用仓库 A 应出现在全量列表中'); assertTrue(findWarehouse($all, 'OPENWHMOCK-B') !== null, '启用仓库 B 应出现在全量列表中'); assertTrue(findWarehouse($all, 'OPENWHMOCK-DISABLED') === null, '停用仓库不应出现在全量列表中'); $filtered = $service->list('open_mock_a'); assertTrue(count($filtered) === 1, '按 service_provider 过滤后应只返回一个启用仓库'); assertTrue(($filtered[0]['warehouse_code'] ?? '') === 'OPENWHMOCK-A', '过滤结果应为 OPENWHMOCK-A'); foreach (['remark', 'status', 'created_at', 'updated_at'] as $privateField) { assertTrue(!array_key_exists($privateField, $filtered[0]), $privateField . ' 不应暴露到开放接口'); } foreach ([ 'id', 'warehouse_name', 'warehouse_code', 'service_provider', 'service_provider_text', 'receiver_name', 'receiver_mobile', 'province', 'city', 'district', 'detail_address', 'full_address', 'service_time', 'notice', 'supported_category_ids', 'supported_category_names', 'service_area_provinces', 'service_area_cities', 'is_default', 'sort_order', ] as $publicField) { assertTrue(array_key_exists($publicField, $filtered[0]), $publicField . ' 应出现在开放接口响应中'); } assertTrue($service->list('missing_provider') === [], '不存在的 service_provider 应返回空列表'); cleanupWarehouseMockData(); echo "ENTERPRISE_WAREHOUSE_LIST_MOCK_TEST_OK\n"; } catch (Throwable $e) { cleanupWarehouseMockData(); fwrite(STDERR, "ENTERPRISE_WAREHOUSE_LIST_MOCK_TEST_FAILED: {$e->getMessage()}\n"); exit(1); }