getName()); self::assertSame('203.0.113.10', $event->getIpAddress()); self::assertSame('user-a', $event->getUserId()); self::assertSame('tenant-a', $event->getTenantId()); self::assertSame('device-a', $event->getDeviceFingerprint()); self::assertSame(['userId' => 'user-a'], $event->getData()); self::assertSame(SecurityEventSeverity::INFO, $event->getSeverity()); } #[Test] #[TestDox('Successful authentication requires an IP address and user ID')] public function rejectsIncompleteAuthenticationContext(): void { foreach ([ ['', 'user-a'], ['203.0.113.10', ''], ] as $arguments) { try { new AuthenticationSucceededEvent(...$arguments); self::fail('Incomplete successful-authentication context was accepted.'); } catch (\InvalidArgumentException) { $this->addToAssertionCount(1); } } } }