124 lines
4.2 KiB
PHP
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);
|
|
}
|