star-cloud/tests/test_discord.php

103 lines
3.4 KiB
PHP

<?php
// 載入 Laravel Bootstrap
require __DIR__ . '/../vendor/autoload.php';
$app = require_once __DIR__ . '/../bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
$kernel->bootstrap();
use App\Models\Machine\Machine;
use App\Models\Machine\MachineLog;
use App\Models\System\Company;
use App\Services\Notification\DiscordWebhookService;
use Illuminate\Support\Facades\Http;
// 1. Fake HTTP 請求以攔截 payload
Http::fake(function ($request) {
$payload = json_decode($request->body(), true);
echo "========================================================\n";
echo "📡 Discord Webhook URL: " . $request->url() . "\n";
echo "📦 Username: " . ($payload['username'] ?? 'N/A') . "\n";
if (!empty($payload['embeds'])) {
foreach ($payload['embeds'] as $i => $embed) {
echo "--- [Embed " . ($i + 1) . "] ---\n";
echo "🔴 Title: " . ($embed['title'] ?? 'N/A') . "\n";
echo "📝 Description: " . ($embed['description'] ?? 'N/A') . "\n";
echo "🎨 Color: " . ($embed['color'] ?? 'N/A') . "\n";
echo "📊 Fields:\n";
if (!empty($embed['fields'])) {
foreach ($embed['fields'] as $field) {
echo "" . $field['name'] . ": " . $field['value'] . " (Inline: " . ($field['inline'] ? 'Yes' : 'No') . ")\n";
}
} else {
echo " (No Fields)\n";
}
}
}
echo "========================================================\n\n";
return Http::response(['status' => 'ok'], 200);
});
// 2. 準備假數據 (用真實 Model)
$company = Company::firstOrNew(['code' => 'TEST_COMP']);
$company->name = '星科技 (Star Tech)';
$company->settings = ['locale' => 'zh_TW']; // 測試 Locale 變更
$company->save();
$machine = Machine::firstOrNew(['serial_no' => 'M1103']);
$machine->name = '機台MQTT測試1';
$machine->location = '台中車站1樓';
$machine->company_id = $company->id;
$machine->save();
$service = app(DiscordWebhookService::class);
$webhookUrl = 'https://discord.com/api/webhooks/mock-url-123';
$locales = ['zh_TW', 'en', 'ja'];
foreach ($locales as $loc) {
echo "💡 [測試語系: {$loc}]\n";
$company->settings = array_merge($company->settings ?? [], ['locale' => $loc]);
$company->save();
// (A) 連線中斷 LWT
$logLwt = new MachineLog([
'machine_id' => $machine->id,
'company_id' => $company->id,
'type' => 'status',
'level' => 'warning',
'message' => 'Connection lost (LWT)',
]);
$service->sendMachineLogAlert($webhookUrl, $logLwt);
// (B) 連線恢復
$logRestored = new MachineLog([
'machine_id' => $machine->id,
'company_id' => $company->id,
'type' => 'status',
'level' => 'info',
'message' => 'Connection restored',
]);
$service->sendMachineLogAlert($webhookUrl, $logRestored);
// (C) B013 0205 貨道阻塞異常
$logB013 = new MachineLog([
'machine_id' => $machine->id,
'company_id' => $company->id,
'type' => 'submachine',
'level' => 'error',
'message' => 'Slot 1: Slot sensor blocked (Code: 0205)',
'context' => [
'error_code' => '0205',
'tid' => '1',
'translated_label' => 'Slot sensor blocked',
]
]);
$service->sendMachineLogAlert($webhookUrl, $logB013);
}
echo "🎉 測試完成!\n";