create(); $subject = User::factory()->create(); $request = Request::create('/api/test', 'POST'); $request->headers->set('User-Agent', 'phpunit'); $request->server->set('REMOTE_ADDR', '127.0.0.1'); $logger = new AuditLogger(); $result = $logger->log( $request, 'user.updated', $subject, ['field' => 'name'], $user ); expect($result)->toBeInstanceOf(AuditLog::class); $this->assertDatabaseHas('audit_logs', [ 'user_id' => $user->id, 'action' => 'user.updated', 'subject_type' => $subject::class, 'subject_id' => $subject->id, 'ip_address' => '127.0.0.1', 'user_agent' => 'phpunit', ]); }); it('handles missing user', function (): void { $request = Request::create('/api/test', 'POST'); $request->headers->set('User-Agent', 'phpunit'); $request->server->set('REMOTE_ADDR', '127.0.0.1'); $logger = new AuditLogger(); $result = $logger->log($request, 'system.ping'); expect($result)->toBeInstanceOf(AuditLog::class); $this->assertDatabaseHas('audit_logs', [ 'action' => 'system.ping', 'user_id' => null, ]); }); it('returns null when logging fails', function (): void { AuditLog::creating(function () { throw new RuntimeException('fail'); }); $request = Request::create('/api/test', 'POST'); $request->headers->set('User-Agent', 'phpunit'); $request->server->set('REMOTE_ADDR', '127.0.0.1'); $logger = new AuditLogger(); $result = $logger->log($request, 'system.fail'); expect($result)->toBeNull(); AuditLog::flushEventListeners(); });