refactor: base event
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
This commit is contained in:
@@ -27,14 +27,14 @@ final class AccessDeniedEventTest extends TestCase
|
||||
'identity-a',
|
||||
);
|
||||
|
||||
self::assertSame(AccessDeniedEvent::class, $event->getName());
|
||||
self::assertSame(AccessDeniedEvent::class, $event->label());
|
||||
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('tenant-a', $event->tenantIdentifier());
|
||||
self::assertSame('identity-a', $event->actorIdentity());
|
||||
self::assertSame(SecurityEventSeverity::WARNING, $event->getSeverity());
|
||||
}
|
||||
|
||||
|
||||
@@ -24,11 +24,11 @@ final class AuthenticationFailedEventTest extends TestCase
|
||||
'identity-a',
|
||||
);
|
||||
|
||||
self::assertSame(AuthenticationFailedEvent::class, $event->getName());
|
||||
self::assertSame(AuthenticationFailedEvent::class, $event->label());
|
||||
self::assertSame('user-a', $event->getUserId());
|
||||
self::assertSame('Invalid credentials', $event->getReason());
|
||||
self::assertSame('tenant-a', $event->getTenantId());
|
||||
self::assertSame('identity-a', $event->getIdentityId());
|
||||
self::assertSame('tenant-a', $event->tenantIdentifier());
|
||||
self::assertSame('identity-a', $event->actorIdentity());
|
||||
self::assertSame(SecurityEventSeverity::WARNING, $event->getSeverity());
|
||||
self::assertNotInstanceOf(SecurityRequestEventInterface::class, $event);
|
||||
}
|
||||
|
||||
@@ -22,10 +22,10 @@ final class AuthenticationSucceededEventTest extends TestCase
|
||||
'tenant-a',
|
||||
);
|
||||
|
||||
self::assertSame(AuthenticationSucceededEvent::class, $event->getName());
|
||||
self::assertSame(AuthenticationSucceededEvent::class, $event->label());
|
||||
self::assertSame('user-a', $event->getUserId());
|
||||
self::assertSame('tenant-a', $event->getTenantId());
|
||||
self::assertSame(['userId' => 'user-a'], $event->getData());
|
||||
self::assertSame('tenant-a', $event->tenantIdentifier());
|
||||
self::assertSame(['userId' => 'user-a'], $event->context());
|
||||
self::assertSame(SecurityEventSeverity::INFO, $event->getSeverity());
|
||||
self::assertNotInstanceOf(SecurityRequestEventInterface::class, $event);
|
||||
}
|
||||
|
||||
@@ -23,15 +23,15 @@ final class BruteForceDetectedEventTest extends TestCase
|
||||
'tenant-a',
|
||||
);
|
||||
|
||||
self::assertSame(BruteForceDetectedEvent::class, $event->getName());
|
||||
self::assertSame(BruteForceDetectedEvent::class, $event->label());
|
||||
self::assertSame('203.0.113.10', $event->getIpAddress());
|
||||
self::assertSame(5, $event->getFailureCount());
|
||||
self::assertSame(300, $event->getWindowSeconds());
|
||||
self::assertSame('tenant-a', $event->getTenantId());
|
||||
self::assertSame('tenant-a', $event->tenantIdentifier());
|
||||
self::assertSame('5 failed attempts in 300 seconds', $event->getReason());
|
||||
self::assertSame(
|
||||
['failureCount' => 5, 'windowSeconds' => 300],
|
||||
$event->getData(),
|
||||
$event->context(),
|
||||
);
|
||||
self::assertSame(SecurityEventSeverity::CRITICAL, $event->getSeverity());
|
||||
}
|
||||
|
||||
@@ -22,12 +22,15 @@ final class EventTest extends TestCase
|
||||
'identity-a',
|
||||
);
|
||||
|
||||
$copy = $event->getData();
|
||||
$copy = $event->context();
|
||||
$copy['nested']['value'] = 'changed';
|
||||
|
||||
self::assertSame('original', $event->get('nested')['value']);
|
||||
self::assertSame('tenant-a', $event->getTenantId());
|
||||
self::assertSame('identity-a', $event->getIdentityId());
|
||||
self::assertSame('test.event', $event->label());
|
||||
self::assertNotSame('', $event->identifier());
|
||||
self::assertGreaterThan(0, $event->timestamp());
|
||||
self::assertSame('tenant-a', $event->tenantIdentifier());
|
||||
self::assertSame('identity-a', $event->actorIdentity());
|
||||
}
|
||||
|
||||
#[Test]
|
||||
|
||||
@@ -23,14 +23,14 @@ final class FirewallPolicyEventTest extends TestCase
|
||||
$allowed = new IpAllowedEvent('203.0.113.11', 'Trusted service', 'tenant-a');
|
||||
$device = new DeviceBlockedEvent('device-a', 'Compromised device', 'tenant-a');
|
||||
|
||||
self::assertSame(IpBlockedEvent::class, $blocked->getName());
|
||||
self::assertSame(IpBlockedEvent::class, $blocked->label());
|
||||
self::assertSame('203.0.113.10', $blocked->getIpAddress());
|
||||
self::assertSame('Repeated abuse', $blocked->getReason());
|
||||
self::assertSame(SecurityEventSeverity::CRITICAL, $blocked->getSeverity());
|
||||
self::assertSame(IpAllowedEvent::class, $allowed->getName());
|
||||
self::assertSame(IpAllowedEvent::class, $allowed->label());
|
||||
self::assertSame('203.0.113.11', $allowed->getIpAddress());
|
||||
self::assertSame(SecurityEventSeverity::INFO, $allowed->getSeverity());
|
||||
self::assertSame(DeviceBlockedEvent::class, $device->getName());
|
||||
self::assertSame(DeviceBlockedEvent::class, $device->label());
|
||||
self::assertSame('device-a', $device->getDeviceFingerprint());
|
||||
self::assertSame(SecurityEventSeverity::CRITICAL, $device->getSeverity());
|
||||
}
|
||||
@@ -47,12 +47,12 @@ final class FirewallPolicyEventTest extends TestCase
|
||||
'operator-a',
|
||||
);
|
||||
|
||||
self::assertSame(FirewallSettingsUpdatedEvent::class, $event->getName());
|
||||
self::assertSame(FirewallSettingsUpdatedEvent::class, $event->label());
|
||||
self::assertSame('Tighten controls', $event->getChangeReason());
|
||||
self::assertSame(['maxAuthFailures' => 5], $event->getPrevious());
|
||||
self::assertSame(['maxAuthFailures' => 3], $event->getCurrent());
|
||||
self::assertSame('tenant-a', $event->getTenantId());
|
||||
self::assertSame('operator-a', $event->getIdentityId());
|
||||
self::assertSame('tenant-a', $event->tenantIdentifier());
|
||||
self::assertSame('operator-a', $event->actorIdentity());
|
||||
self::assertSame('manual', $event->getChangeOrigin());
|
||||
self::assertSame(SecurityEventSeverity::INFO, $event->getSeverity());
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ final class FirewallRuleEventTest extends TestCase
|
||||
);
|
||||
$rule->setReason('Mutated after publication');
|
||||
|
||||
self::assertSame(FirewallRuleExtendedEvent::class, $event->getName());
|
||||
self::assertSame(FirewallRuleExtendedEvent::class, $event->label());
|
||||
self::assertSame('rule-a', $event->getRuleId());
|
||||
self::assertSame(FirewallRuleObject::SCOPE_TENANT, $event->getRuleScope());
|
||||
self::assertSame(FirewallRuleObject::TYPE_IP, $event->getRuleType());
|
||||
@@ -50,8 +50,8 @@ final class FirewallRuleEventTest extends TestCase
|
||||
self::assertSame('Repeated abuse', $event->getReason());
|
||||
self::assertSame('automatic', $event->getOrigin());
|
||||
self::assertSame($expiresAt->format(\DateTimeInterface::ATOM), $event->getExpiresAt());
|
||||
self::assertSame('tenant-a', $event->getTenantId());
|
||||
self::assertSame('operator-a', $event->getIdentityId());
|
||||
self::assertSame('tenant-a', $event->tenantIdentifier());
|
||||
self::assertSame('operator-a', $event->actorIdentity());
|
||||
self::assertSame(5, $event->get('failureCount'));
|
||||
self::assertSame('Continue monitoring', $event->get('changeReason'));
|
||||
self::assertSame(SecurityEventSeverity::INFO, $event->getSeverity());
|
||||
@@ -75,7 +75,7 @@ final class FirewallRuleEventTest extends TestCase
|
||||
FirewallRuleDisabledEvent::class,
|
||||
FirewallRuleRemovedEvent::class,
|
||||
] as $eventClass) {
|
||||
self::assertSame($eventClass, $eventClass::fromRule($rule)->getName());
|
||||
self::assertSame($eventClass, $eventClass::fromRule($rule)->label());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,13 +24,13 @@ final class RateLimitExceededEventTest extends TestCase
|
||||
'tenant-a',
|
||||
);
|
||||
|
||||
self::assertSame(RateLimitExceededEvent::class, $event->getName());
|
||||
self::assertSame(RateLimitExceededEvent::class, $event->label());
|
||||
self::assertSame('203.0.113.10', $event->getIpAddress());
|
||||
self::assertSame(101, $event->getRequestCount());
|
||||
self::assertSame(60, $event->getWindowSeconds());
|
||||
self::assertSame('/login', $event->getEndpoint());
|
||||
self::assertSame('/login', $event->getRequestPath());
|
||||
self::assertSame('tenant-a', $event->getTenantId());
|
||||
self::assertSame('tenant-a', $event->tenantIdentifier());
|
||||
self::assertSame('101 requests in 60 seconds', $event->getReason());
|
||||
self::assertSame(SecurityEventSeverity::ERROR, $event->getSeverity());
|
||||
}
|
||||
|
||||
@@ -30,13 +30,13 @@ final class SuspiciousActivityEventTest extends TestCase
|
||||
reason: 'Matched a blocked payload signature',
|
||||
);
|
||||
|
||||
self::assertSame(SuspiciousActivityEvent::class, $event->getName());
|
||||
self::assertSame(SuspiciousActivityEvent::class, $event->label());
|
||||
self::assertSame('203.0.113.20', $event->getIpAddress());
|
||||
self::assertSame('payload-signature', $event->getDetector());
|
||||
self::assertSame(['score' => 98], $event->getDetectionData());
|
||||
self::assertSame(['detector' => 'payload-signature', 'score' => 98], $event->getData());
|
||||
self::assertSame('tenant-a', $event->getTenantId());
|
||||
self::assertSame('identity-a', $event->getIdentityId());
|
||||
self::assertSame(['detector' => 'payload-signature', 'score' => 98], $event->context());
|
||||
self::assertSame('tenant-a', $event->tenantIdentifier());
|
||||
self::assertSame('identity-a', $event->actorIdentity());
|
||||
self::assertSame('device-a', $event->getDeviceFingerprint());
|
||||
self::assertSame('Test Agent', $event->getUserAgent());
|
||||
self::assertSame('/admin', $event->getRequestPath());
|
||||
|
||||
@@ -6,6 +6,7 @@ namespace KTXT\Unit\Event;
|
||||
|
||||
use KTXC\User\Event\UserCreatedEvent;
|
||||
use KTXC\User\Event\UserDeletingEvent;
|
||||
use KTXC\User\Event\UserEvent;
|
||||
use KTXC\User\Event\UserUpdatedEvent;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use PHPUnit\Framework\Attributes\TestDox;
|
||||
@@ -29,15 +30,16 @@ final class UserEventTest extends TestCase
|
||||
'actor-a',
|
||||
);
|
||||
|
||||
self::assertSame(UserCreatedEvent::class, $event->getName());
|
||||
self::assertSame(UserCreatedEvent::class, $event->label());
|
||||
self::assertSame('user-a', $event->userIdentifier());
|
||||
self::assertSame('person@example.test', $event->userIdentity());
|
||||
self::assertSame('Person', $event->userLabel());
|
||||
self::assertTrue($event->userEnabled());
|
||||
self::assertSame(['member'], $event->userRoles());
|
||||
self::assertSame('tenant-a', $event->getTenantId());
|
||||
self::assertSame('tenant-a', $event->tenantIdentifier());
|
||||
self::assertSame('actor-a', $event->actorIdentifier());
|
||||
self::assertSame('actor-a', $event->getIdentityId());
|
||||
self::assertSame('actor-a', $event->actorIdentity());
|
||||
self::assertSame('string', (string) (new \ReflectionMethod(UserEvent::class, 'tenantIdentifier'))->getReturnType());
|
||||
}
|
||||
|
||||
#[Test]
|
||||
@@ -46,9 +48,9 @@ final class UserEventTest extends TestCase
|
||||
{
|
||||
$user = ['uid' => 'user-a', 'identity' => 'person@example.test'];
|
||||
|
||||
self::assertSame(UserCreatedEvent::class, UserCreatedEvent::fromUser($user, 'tenant-a')->getName());
|
||||
self::assertSame(UserUpdatedEvent::class, UserUpdatedEvent::fromUser($user, 'tenant-a')->getName());
|
||||
self::assertSame(UserDeletingEvent::class, UserDeletingEvent::fromUser($user, 'tenant-a')->getName());
|
||||
self::assertSame(UserCreatedEvent::class, UserCreatedEvent::fromUser($user, 'tenant-a')->label());
|
||||
self::assertSame(UserUpdatedEvent::class, UserUpdatedEvent::fromUser($user, 'tenant-a')->label());
|
||||
self::assertSame(UserDeletingEvent::class, UserDeletingEvent::fromUser($user, 'tenant-a')->label());
|
||||
}
|
||||
|
||||
#[Test]
|
||||
|
||||
@@ -78,7 +78,7 @@ final class AuthenticationManagerTest extends TestCase
|
||||
->with(self::callback(static fn($event): bool =>
|
||||
$event instanceof AuthenticationSucceededEvent
|
||||
&& $event->getUserId() === 'user-a'
|
||||
&& $event->getTenantId() === 'tenant-a'
|
||||
&& $event->tenantIdentifier() === 'tenant-a'
|
||||
));
|
||||
|
||||
$manager = new AuthenticationManager(
|
||||
@@ -198,7 +198,7 @@ final class AuthenticationManagerTest extends TestCase
|
||||
return $event instanceof AuthenticationFailedEvent
|
||||
&& $event->getUserId() === 'user-a'
|
||||
&& $event->getReason() === ProviderResult::ERROR_INVALID_FACTOR
|
||||
&& $event->getTenantId() === 'tenant-a';
|
||||
&& $event->tenantIdentifier() === 'tenant-a';
|
||||
}));
|
||||
|
||||
$manager = new AuthenticationManager(
|
||||
|
||||
@@ -285,7 +285,7 @@ class FirewallRuleManagerTest extends TestCase
|
||||
$this->events->expects($this->exactly(2))
|
||||
->method('dispatch')
|
||||
->willReturnCallback(static function (\KTXF\Event\Event $event) use (&$events): void {
|
||||
$events[$event->getName()] = $event;
|
||||
$events[$event->label()] = $event;
|
||||
});
|
||||
|
||||
$this->manager->blockIp(
|
||||
@@ -302,7 +302,7 @@ class FirewallRuleManagerTest extends TestCase
|
||||
self::assertSame(FirewallRuleObject::TYPE_IP, $audit->get('ruleType'));
|
||||
self::assertSame(FirewallRuleObject::ACTION_BLOCK, $audit->get('ruleAction'));
|
||||
self::assertSame(FirewallRuleManager::ORIGIN_MANUAL, $audit->get('origin'));
|
||||
self::assertSame('admin-a', $audit->getIdentityId());
|
||||
self::assertSame('admin-a', $audit->actorIdentity());
|
||||
self::assertNotNull($audit->get('expiresAt'));
|
||||
self::assertInstanceOf(IpBlockedEvent::class, $events[IpBlockedEvent::class]);
|
||||
self::assertSame('203.0.113.10', $events[IpBlockedEvent::class]->getIpAddress());
|
||||
@@ -385,13 +385,13 @@ class FirewallRuleManagerTest extends TestCase
|
||||
FirewallRuleEnabledEvent::class,
|
||||
FirewallRuleExtendedEvent::class,
|
||||
FirewallRuleRemovedEvent::class,
|
||||
], array_map(static fn($event): string => $event->getName(), $audits));
|
||||
], array_map(static fn($event): string => $event->label(), $audits));
|
||||
self::assertSame(
|
||||
['Investigation', 'Threat confirmed', 'Continue monitoring', 'Case closed'],
|
||||
array_map(static fn($event): string => $event->get('changeReason'), $audits)
|
||||
);
|
||||
self::assertSame(['operator'], array_values(array_unique(array_map(
|
||||
static fn($event): ?string => $event->getIdentityId(),
|
||||
static fn($event): ?string => $event->actorIdentity(),
|
||||
$audits
|
||||
))));
|
||||
}
|
||||
|
||||
@@ -539,7 +539,7 @@ class FirewallServiceTest extends TestCase
|
||||
&$lifecycleOrigin,
|
||||
&$bruteForceEvent,
|
||||
): void {
|
||||
$publishedTenants[] = $event->getTenantId();
|
||||
$publishedTenants[] = $event->tenantIdentifier();
|
||||
if ($event instanceof BruteForceDetectedEvent) {
|
||||
$bruteForceEvent = $event;
|
||||
}
|
||||
@@ -616,12 +616,12 @@ class FirewallServiceTest extends TestCase
|
||||
->with('tenant-a', '203.0.113.10', 300)
|
||||
->willReturn(1);
|
||||
$event = new AuthenticationFailedEvent();
|
||||
$eventId = $event->getEventId();
|
||||
$eventId = $event->identifier();
|
||||
|
||||
$this->service->handleAuthFailure($event);
|
||||
$this->service->handleAuthFailure($event);
|
||||
|
||||
self::assertSame($eventId, $event->getEventId());
|
||||
self::assertSame($eventId, $event->identifier());
|
||||
}
|
||||
|
||||
#[TestDox('Cleanup records successful maintenance counts')]
|
||||
|
||||
@@ -38,9 +38,9 @@ final class FirewallSettingsServiceTest extends TestCase
|
||||
$events->expects(self::once())
|
||||
->method('dispatch')
|
||||
->with(self::callback(static fn(FirewallSettingsUpdatedEvent $event): bool =>
|
||||
$event->getName() === FirewallSettingsUpdatedEvent::class
|
||||
&& $event->getTenantId() === 'tenant-a'
|
||||
&& $event->getIdentityId() === 'admin-a'
|
||||
$event->label() === FirewallSettingsUpdatedEvent::class
|
||||
&& $event->tenantIdentifier() === 'tenant-a'
|
||||
&& $event->actorIdentity() === 'admin-a'
|
||||
&& $event->get('changeReason') === 'Tighten authentication controls'
|
||||
&& $event->get('previous')['maxAuthFailures'] === 5
|
||||
&& $event->get('current')['maxAuthFailures'] === 8
|
||||
|
||||
@@ -70,7 +70,7 @@ final class UserAccountsServiceTest extends TestCase
|
||||
self::assertInstanceOf(UserCreatedEvent::class, $emitted[0]);
|
||||
self::assertInstanceOf(UserDeletingEvent::class, $emitted[1]);
|
||||
self::assertSame('actor-a', $emitted[0]->actorIdentifier());
|
||||
self::assertSame('tenant-a', $emitted[1]->getTenantId());
|
||||
self::assertSame('tenant-a', $emitted[1]->tenantIdentifier());
|
||||
self::assertSame(['event', 'delete'], $operations);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user