create(); $user = User::factory()->create(['tenant_id' => $tenant->id]); $dummy = new class { use WritesAuthLog; public function fire(?int $userId, ?int $tenantId): void { $this->logAuthEvent('login_success', $userId, $tenantId, 'a@b.c', '1.2.3.4', 'UA', null); } }; $dummy->fire($user->id, $tenant->id); $row = DB::table('auth_log')->latest('id')->first(); expect($row->event)->toBe('login_success') ->and($row->actor_type)->toBe('tenant_user') ->and((int) $row->user_id)->toBe($user->id) ->and((int) $row->tenant_id)->toBe($tenant->id) ->and((string) $row->ip_address)->toBe('1.2.3.4') ->and($row->user_agent)->toBe('UA'); }); it('actor_type=tenant_user even if user NULL (anti-enumeration)', function () { $dummy = new class { use WritesAuthLog; public function fire(?int $userId, ?int $tenantId): void { $this->logAuthEvent('login_failed', $userId, $tenantId, 'x@y.z', null, null, 'no_such_user'); } }; $dummy->fire(null, null); $row = DB::table('auth_log')->latest('id')->first(); expect($row->actor_type)->toBe('tenant_user')->and($row->user_id)->toBeNull(); });