feat: 增强风险池 Redis 操作,添加 TTL 支持并更新相关 Lua 脚本;新增 API 异常响应测试
This commit is contained in:
25
tests/Feature/ApiExceptionResponseTest.php
Normal file
25
tests/Feature/ApiExceptionResponseTest.php
Normal file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
use App\Lottery\ErrorCode;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
test('api internal exception response includes structured details in testing', function (): void {
|
||||
Route::get('/api/v1/test-error-detail', function (): void {
|
||||
throw new RuntimeException('测试异常明细');
|
||||
});
|
||||
|
||||
$response = $this->getJson('/api/v1/test-error-detail');
|
||||
|
||||
$response
|
||||
->assertStatus(500)
|
||||
->assertJsonPath('code', ErrorCode::InternalError->value)
|
||||
->assertJsonPath('msg', '测试异常明细')
|
||||
->assertJsonPath('data.exception', RuntimeException::class)
|
||||
->assertJsonPath('data.message', '测试异常明细');
|
||||
|
||||
expect($response->json('data.error_id'))->not->toBeEmpty()
|
||||
->and($response->json('data.file'))->toContain('ApiExceptionResponseTest.php')
|
||||
->and($response->json('data.line'))->toBeInt()
|
||||
->and($response->getContent())->toContain('测试异常明细')
|
||||
->and($response->getContent())->not->toContain('\u6d4b\u8bd5\u5f02\u5e38\u660e\u7ec6');
|
||||
});
|
||||
@@ -19,5 +19,25 @@ test('risk pool lua acquire script returns structured status and pool counters',
|
||||
->and($lua)->toContain('INSUFFICIENT_CAP')
|
||||
->and($lua)->toContain('remaining')
|
||||
->and($lua)->toContain('locked')
|
||||
->and($lua)->toContain('version');
|
||||
->and($lua)->toContain('version')
|
||||
->and($lua)->toContain("redis.call('EXPIRE', KEYS[1], tonumber(ARGV[3]))");
|
||||
});
|
||||
|
||||
test('risk pool lua init overwrite and release scripts refresh redis ttl', function (): void {
|
||||
$service = app(RiskPoolService::class);
|
||||
|
||||
$initMethod = new ReflectionMethod($service, 'initLua');
|
||||
$initMethod->setAccessible(true);
|
||||
$overwriteMethod = new ReflectionMethod($service, 'overwriteStateLua');
|
||||
$overwriteMethod->setAccessible(true);
|
||||
$releaseMethod = new ReflectionMethod($service, 'releaseLua');
|
||||
$releaseMethod->setAccessible(true);
|
||||
|
||||
$initLua = (string) $initMethod->invoke($service);
|
||||
$overwriteLua = (string) $overwriteMethod->invoke($service);
|
||||
$releaseLua = (string) $releaseMethod->invoke($service);
|
||||
|
||||
expect($initLua)->toContain("redis.call('EXPIRE', KEYS[1], tonumber(ARGV[4]))")
|
||||
->and($overwriteLua)->toContain("redis.call('EXPIRE', KEYS[1], tonumber(ARGV[5]))")
|
||||
->and($releaseLua)->toContain("redis.call('EXPIRE', KEYS[1], tonumber(ARGV[2]))");
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user