Files
anxinyan/server-api/tools/enterprise_warehouse_list_mock_test.php
2026-06-18 13:56:20 +08:00

124 lines
4.2 KiB
PHP

<?php
declare(strict_types=1);
require dirname(__DIR__) . '/vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(dirname(__DIR__));
$dotenv->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);
}