getName()); self::assertSame('203.0.113.10', $event->getIpAddress()); self::assertSame('device-a', $event->getDeviceFingerprint()); self::assertSame('rule-a', $event->getRuleId()); self::assertSame(FirewallRuleObject::SCOPE_TENANT, $event->getRuleScope()); self::assertSame('Blocked by policy', $event->getReason()); self::assertSame('tenant-a', $event->getTenantId()); self::assertSame('identity-a', $event->getIdentityId()); self::assertSame(SecurityEvent::SEVERITY_WARNING, $event->getSeverity()); } #[Test] #[TestDox('Access denial rejects incomplete rule context')] public function rejectsIncompleteRuleContext(): void { foreach ([ ['', 'rule-a', FirewallRuleObject::SCOPE_TENANT], ['203.0.113.10', '', FirewallRuleObject::SCOPE_TENANT], ['203.0.113.10', 'rule-a', 'unknown'], ] as $arguments) { try { new AccessDeniedEvent(...$arguments); self::fail('Incomplete access-denial context was accepted.'); } catch (\InvalidArgumentException) { $this->addToAssertionCount(1); } } } }