feat: 更新 .env.example 文件,新增彩票业务配置与 Redis、邮件、队列等环境变量,优化开发环境设置

This commit is contained in:
2026-05-08 17:26:01 +08:00
parent 8cce1778b9
commit 85e57782cc
12 changed files with 663 additions and 54 deletions

View File

@@ -0,0 +1,79 @@
<?php
use App\Models\AuditLog;
use App\Services\AuditLogger;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Http\Request;
uses(RefreshDatabase::class);
test('audit logger persists row with snapshots', function (): void {
$row = AuditLogger::record(
AuditLogger::OPERATOR_ADMIN,
42,
'settings',
'update',
'lottery_setting',
'deposit_min',
['value_json' => 100],
['value_json' => 200],
'203.0.113.10',
'PHPUnit',
);
expect($row)->toBeInstanceOf(AuditLog::class)
->operator_type->toBe(AuditLogger::OPERATOR_ADMIN)
->operator_id->toBe(42)
->module_code->toBe('settings')
->action_code->toBe('update')
->target_type->toBe('lottery_setting')
->target_id->toBe('deposit_min')
->before_json->toBe(['value_json' => 100])
->after_json->toBe(['value_json' => 200])
->ip->toBe('203.0.113.10')
->user_agent->toBe('PHPUnit');
expect(AuditLog::query()->count())->toBe(1);
});
test('audit logger truncates user agent to 255', function (): void {
$ua = str_repeat('a', 300);
$row = AuditLogger::record(AuditLogger::OPERATOR_SYSTEM, 0, 'job', 'run', ip: null, userAgent: $ua);
expect(strlen((string) $row->user_agent))->toBe(255);
});
test('audit logger record from request fills ip', function (): void {
$request = Request::create('/fake', 'POST', server: [
'REMOTE_ADDR' => '198.51.100.2',
'HTTP_USER_AGENT' => 'TestAgent',
]);
$row = AuditLogger::recordFromRequest(
$request,
AuditLogger::OPERATOR_PLAYER,
7,
'wallet',
'transfer',
null,
null,
['x' => 1],
['x' => 2],
);
expect($row)
->ip->toContain('198.51.100.2')
->user_agent->toBe('TestAgent');
});
test('record for system uses operator zero', function (): void {
AuditLogger::recordForSystem('reconcile', 'start', targetId: '2026-01');
/** @var AuditLog|null $row */
$row = AuditLog::query()->latest('id')->first();
expect($row)->not->toBeNull()
->operator_type->toBe(AuditLogger::OPERATOR_SYSTEM)
->operator_id->toBe(0);
});