first
This commit is contained in:
151
server-api/tools/smoke_check.php
Normal file
151
server-api/tools/smoke_check.php
Normal file
@@ -0,0 +1,151 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||
|
||||
$dotenv = Dotenv\Dotenv::createImmutable(dirname(__DIR__));
|
||||
$dotenv->safeLoad();
|
||||
|
||||
$baseUrl = 'http://127.0.0.1:8787';
|
||||
|
||||
function requestJson(string $method, string $url, array $payload = [], array $headers = []): array
|
||||
{
|
||||
$ch = curl_init();
|
||||
$defaultHeaders = ['Accept: application/json'];
|
||||
if ($payload) {
|
||||
$defaultHeaders[] = 'Content-Type: application/json';
|
||||
}
|
||||
foreach ($headers as $header) {
|
||||
$defaultHeaders[] = $header;
|
||||
}
|
||||
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_URL => $url,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_TIMEOUT => 10,
|
||||
CURLOPT_CUSTOMREQUEST => $method,
|
||||
CURLOPT_HTTPHEADER => $defaultHeaders,
|
||||
]);
|
||||
|
||||
if ($payload) {
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload, JSON_UNESCAPED_UNICODE));
|
||||
}
|
||||
|
||||
$response = curl_exec($ch);
|
||||
$errno = curl_errno($ch);
|
||||
$error = curl_error($ch);
|
||||
$httpCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
if ($errno) {
|
||||
throw new RuntimeException("HTTP {$method} {$url} failed: {$error}");
|
||||
}
|
||||
|
||||
$decoded = json_decode((string)$response, true);
|
||||
return [
|
||||
'status' => $httpCode,
|
||||
'body' => is_array($decoded) ? $decoded : ['raw' => $response],
|
||||
];
|
||||
}
|
||||
|
||||
function assertOk(string $label, array $response): void
|
||||
{
|
||||
$status = $response['status'];
|
||||
$body = $response['body'];
|
||||
$code = $body['code'] ?? null;
|
||||
if ($status !== 200 || $code !== 0) {
|
||||
throw new RuntimeException("{$label} failed: http={$status} body=" . json_encode($body, JSON_UNESCAPED_UNICODE));
|
||||
}
|
||||
echo "[PASS] {$label}\n";
|
||||
}
|
||||
|
||||
try {
|
||||
assertOk('app home', requestJson('GET', $baseUrl . '/api/app/home/index'));
|
||||
assertOk('app help center', requestJson('GET', $baseUrl . '/api/app/help-center'));
|
||||
|
||||
$appLogin = requestJson('POST', $baseUrl . '/api/app/auth/login/password', [
|
||||
'mobile' => '13800000000',
|
||||
'password' => 'User@123456',
|
||||
]);
|
||||
assertOk('app login', $appLogin);
|
||||
$appToken = $appLogin['body']['data']['token'] ?? '';
|
||||
if (!$appToken) {
|
||||
throw new RuntimeException('app login did not return token');
|
||||
}
|
||||
$appAuthHeader = ['Authorization: Bearer ' . $appToken];
|
||||
|
||||
assertOk('app me', requestJson('GET', $baseUrl . '/api/app/auth/me', [], $appAuthHeader));
|
||||
$appReports = requestJson('GET', $baseUrl . '/api/app/reports', [], $appAuthHeader);
|
||||
assertOk('app reports', $appReports);
|
||||
$appOrders = requestJson('GET', $baseUrl . '/api/app/orders', [], $appAuthHeader);
|
||||
assertOk('app orders', $appOrders);
|
||||
assertOk('app messages summary', requestJson('GET', $baseUrl . '/api/app/messages/summary', [], $appAuthHeader));
|
||||
assertOk('app addresses', requestJson('GET', $baseUrl . '/api/app/addresses', [], $appAuthHeader));
|
||||
assertOk('app settings', requestJson('GET', $baseUrl . '/api/app/settings', [], $appAuthHeader));
|
||||
|
||||
$completedOrder = null;
|
||||
foreach (($appOrders['body']['data']['list'] ?? []) as $item) {
|
||||
if (($item['order_status'] ?? '') === 'completed') {
|
||||
$completedOrder = $item;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($completedOrder) {
|
||||
$orderDetail = requestJson('GET', $baseUrl . '/api/app/order/detail?id=' . (int)$completedOrder['order_id'], [], $appAuthHeader);
|
||||
assertOk('app order detail completed', $orderDetail);
|
||||
}
|
||||
|
||||
$reportNo = $appReports['body']['data']['list'][0]['report_no'] ?? '';
|
||||
if ($reportNo !== '') {
|
||||
$reportDetail = requestJson('GET', $baseUrl . '/api/app/report/detail?report_no=' . rawurlencode($reportNo));
|
||||
assertOk('app public report detail', $reportDetail);
|
||||
$verifyQr = $reportDetail['body']['data']['verify_info']['verify_qrcode_url'] ?? '';
|
||||
if ($verifyQr === '') {
|
||||
throw new RuntimeException('app public report detail missing verify_qrcode_url');
|
||||
}
|
||||
assertOk('app public verify', requestJson('GET', $baseUrl . '/api/app/verify?report_no=' . rawurlencode($reportNo)));
|
||||
}
|
||||
|
||||
$appLogout = requestJson('POST', $baseUrl . '/api/app/auth/logout', [], $appAuthHeader);
|
||||
assertOk('app logout', $appLogout);
|
||||
|
||||
$login = requestJson('POST', $baseUrl . '/api/admin/auth/login', [
|
||||
'mobile' => '13800138000',
|
||||
'password' => 'Anxinyan@2026!',
|
||||
]);
|
||||
assertOk('admin login', $login);
|
||||
$token = $login['body']['data']['token'] ?? '';
|
||||
if (!$token) {
|
||||
throw new RuntimeException('admin login did not return token');
|
||||
}
|
||||
$authHeader = ['Authorization: Bearer ' . $token];
|
||||
|
||||
assertOk('admin me', requestJson('GET', $baseUrl . '/api/admin/auth/me', [], $authHeader));
|
||||
assertOk('admin dashboard', requestJson('GET', $baseUrl . '/api/admin/dashboard', [], $authHeader));
|
||||
assertOk('admin users overview', requestJson('GET', $baseUrl . '/api/admin/users/overview', [], $authHeader));
|
||||
assertOk('admin access overview', requestJson('GET', $baseUrl . '/api/admin/access/overview', [], $authHeader));
|
||||
assertOk('admin system configs', requestJson('GET', $baseUrl . '/api/admin/system-configs', [], $authHeader));
|
||||
|
||||
$adminOrders = requestJson('GET', $baseUrl . '/api/admin/orders', [], $authHeader);
|
||||
assertOk('admin orders', $adminOrders);
|
||||
$adminCompletedOrder = null;
|
||||
foreach (($adminOrders['body']['data']['list'] ?? []) as $item) {
|
||||
if (($item['order_status'] ?? '') === 'completed') {
|
||||
$adminCompletedOrder = $item;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($adminCompletedOrder) {
|
||||
$adminOrderDetail = requestJson('GET', $baseUrl . '/api/admin/order/detail?id=' . (int)$adminCompletedOrder['id'], [], $authHeader);
|
||||
assertOk('admin order detail completed', $adminOrderDetail);
|
||||
}
|
||||
|
||||
$logout = requestJson('POST', $baseUrl . '/api/admin/auth/logout', [], $authHeader);
|
||||
assertOk('admin logout', $logout);
|
||||
|
||||
echo "SMOKE_OK\n";
|
||||
} catch (Throwable $e) {
|
||||
fwrite(STDERR, "SMOKE_FAIL: " . $e->getMessage() . "\n");
|
||||
exit(1);
|
||||
}
|
||||
Reference in New Issue
Block a user