Files
datahub/backend/test/Cases/Integration/System/MqStatusControllerTest.php
T
2026-03-13 14:50:06 +08:00

102 lines
2.9 KiB
PHP

<?php
declare(strict_types=1);
namespace HyperfTest\Cases\Integration\System;
use HyperfTest\TestCase;
use HyperfTest\Traits\AuthenticatedTestTrait;
/**
* MqStatusController 集成测试
*
* 覆盖接口结构、队列参数筛选、无效参数 400、未认证 401
*
* @internal
* @coversNothing
*/
class MqStatusControllerTest extends TestCase
{
use AuthenticatedTestTrait;
// ========== 正常返回结构 ==========
public function test_mq_status_returns_expected_structure(): void
{
$response = $this->get('/api/v1/mq/status', [], $this->authHeaders());
// RabbitMQ 可能不可用,接受 200 或 500
$status = $response->getStatusCode();
if ($status === 500) {
// 连接不可用时返回 500,仍验证响应格式
$response->assertJsonStructure(['code', 'message', 'data']);
$this->assertSame(500, $response->json('code'));
return;
}
$response->assertStatus(200);
$response->assertJsonPath('code', 0);
$response->assertJsonPath('message', '获取成功');
$response->assertJsonStructure([
'code',
'message',
'data' => [
'business_queues',
'retry_queues',
'error_queue',
'summary' => [
'total_messages',
'total_consumers',
],
'fetched_at',
],
]);
}
// ========== 队列类型筛选 ==========
public function test_mq_status_with_valid_queue_filter(): void
{
$response = $this->get('/api/v1/mq/status', ['queue' => 'orders'], $this->authHeaders());
$status = $response->getStatusCode();
if ($status === 500) {
// RabbitMQ 不可用,跳过具体数据验证
return;
}
$response->assertStatus(200);
$response->assertJsonPath('code', 0);
$data = $response->json('data');
// 筛选时 business_queues 仅包含 orders.queue
foreach ($data['business_queues'] as $queue) {
$this->assertStringContainsString('orders', $queue['queue']);
}
// 筛选时 error_queue 为空数组(仅全量查询时返回)
$this->assertEmpty($data['error_queue']);
}
// ========== 无效参数 ==========
public function test_mq_status_with_invalid_queue_returns_400(): void
{
$response = $this->get('/api/v1/mq/status', ['queue' => 'invalid_type'], $this->authHeaders());
$response->assertStatus(400);
$this->assertSame(400, $response->json('code'));
$this->assertStringContainsString('无效的队列类型', $response->json('message'));
}
// ========== 认证检查 ==========
public function test_mq_status_without_token_returns_401(): void
{
$response = $this->get('/api/v1/mq/status');
$response->assertStatus(401);
}
}