Consolidate settings session policy tests
This commit is contained in:
@@ -1,178 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace MintyPHP\Tests\Service\Settings;
|
||||
|
||||
use MintyPHP\Service\Settings\SettingsLoginPersistenceGateway;
|
||||
use MintyPHP\Service\Settings\SettingsMetadataGateway;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class SettingsLoginPersistenceGatewayTest extends TestCase
|
||||
{
|
||||
// ---------------------------------------------------------------
|
||||
// isMicrosoftAutoRememberDefault
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
public function testAutoRememberDefaultReturnsFalseWhenNotSet(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->method('getValue')->willReturn(null);
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
$this->assertFalse($gateway->isMicrosoftAutoRememberDefault());
|
||||
}
|
||||
|
||||
public function testAutoRememberDefaultReturnsFalseForZero(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->method('getValue')->willReturn('0');
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
$this->assertFalse($gateway->isMicrosoftAutoRememberDefault());
|
||||
}
|
||||
|
||||
public function testAutoRememberDefaultReturnsTrueForOne(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->method('getValue')->willReturn('1');
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
$this->assertTrue($gateway->isMicrosoftAutoRememberDefault());
|
||||
}
|
||||
|
||||
public function testAutoRememberDefaultReturnsFalseForEmptyString(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->method('getValue')->willReturn('');
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
$this->assertFalse($gateway->isMicrosoftAutoRememberDefault());
|
||||
}
|
||||
|
||||
public function testSetAutoRememberDefaultPersistsValue(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->expects($this->once())
|
||||
->method('set')
|
||||
->with('microsoft_auto_remember_default', '1', $this->anything())
|
||||
->willReturn(true);
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
$this->assertTrue($gateway->setMicrosoftAutoRememberDefault(true));
|
||||
}
|
||||
|
||||
public function testSetAutoRememberDefaultPersistsFalseAsZero(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->expects($this->once())
|
||||
->method('set')
|
||||
->with('microsoft_auto_remember_default', '0', $this->anything())
|
||||
->willReturn(true);
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
$this->assertTrue($gateway->setMicrosoftAutoRememberDefault(false));
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// getRememberTokenLifetimeDays
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
public function testLifetimeDaysReturnsFallbackWhenNotSet(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->method('getInt')->willReturn(null);
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
$this->assertSame(30, $gateway->getRememberTokenLifetimeDays());
|
||||
}
|
||||
|
||||
public function testLifetimeDaysReturnsConfiguredValue(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->method('getInt')->willReturn(7);
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
$this->assertSame(7, $gateway->getRememberTokenLifetimeDays());
|
||||
}
|
||||
|
||||
public function testLifetimeDaysReturnsFallbackForZero(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->method('getInt')->willReturn(0);
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
$this->assertSame(30, $gateway->getRememberTokenLifetimeDays());
|
||||
}
|
||||
|
||||
public function testLifetimeDaysReturnsFallbackForValueAboveMax(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->method('getInt')->willReturn(500);
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
$this->assertSame(30, $gateway->getRememberTokenLifetimeDays());
|
||||
}
|
||||
|
||||
public function testSetLifetimeDaysAcceptsValidRange(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->expects($this->once())
|
||||
->method('set')
|
||||
->with('remember_token_lifetime_days', '14', $this->anything())
|
||||
->willReturn(true);
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
$this->assertTrue($gateway->setRememberTokenLifetimeDays(14));
|
||||
}
|
||||
|
||||
public function testSetLifetimeDaysRejectsZero(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->expects($this->never())->method('set');
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
$this->assertFalse($gateway->setRememberTokenLifetimeDays(0));
|
||||
}
|
||||
|
||||
public function testSetLifetimeDaysRejectsAboveMax(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->expects($this->never())->method('set');
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
$this->assertFalse($gateway->setRememberTokenLifetimeDays(400));
|
||||
}
|
||||
|
||||
public function testSetLifetimeDaysNullFallsBackToDefault(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->expects($this->once())
|
||||
->method('set')
|
||||
->with('remember_token_lifetime_days', '30', $this->anything())
|
||||
->willReturn(true);
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
$this->assertTrue($gateway->setRememberTokenLifetimeDays(null));
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// getRememberTokenLifetimeSeconds
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
public function testLifetimeSecondsComputesCorrectly(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->method('getInt')->willReturn(7);
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
$this->assertSame(7 * 86400, $gateway->getRememberTokenLifetimeSeconds());
|
||||
}
|
||||
|
||||
public function testLifetimeSecondsFallbackIs30Days(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->method('getInt')->willReturn(null);
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
$this->assertSame(30 * 86400, $gateway->getRememberTokenLifetimeSeconds());
|
||||
}
|
||||
}
|
||||
@@ -1,98 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace MintyPHP\Tests\Service\Settings;
|
||||
|
||||
use MintyPHP\Repository\Settings\SettingRepositoryInterface;
|
||||
use MintyPHP\Service\Settings\SettingsMetadataGateway;
|
||||
use MintyPHP\Service\Settings\SettingsSessionGateway;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class SettingsSessionGatewayTest extends TestCase
|
||||
{
|
||||
public function testGetSessionIdleTimeoutMinutesReturnsFallbackWhenNotSet(): void
|
||||
{
|
||||
$gateway = $this->createGateway(null);
|
||||
$this->assertSame(30, $gateway->getSessionIdleTimeoutMinutes());
|
||||
}
|
||||
|
||||
public function testGetSessionAbsoluteTimeoutHoursReturnsFallbackWhenNotSet(): void
|
||||
{
|
||||
$gateway = $this->createGateway(null);
|
||||
$this->assertSame(8, $gateway->getSessionAbsoluteTimeoutHours());
|
||||
}
|
||||
|
||||
public function testGetSessionIdleTimeoutMinutesReturnsStoredValue(): void
|
||||
{
|
||||
$gateway = $this->createGateway('15', 'session_idle_timeout_minutes');
|
||||
$this->assertSame(15, $gateway->getSessionIdleTimeoutMinutes());
|
||||
}
|
||||
|
||||
public function testGetSessionAbsoluteTimeoutHoursReturnsStoredValue(): void
|
||||
{
|
||||
$gateway = $this->createGateway('12', 'session_absolute_timeout_hours');
|
||||
$this->assertSame(12, $gateway->getSessionAbsoluteTimeoutHours());
|
||||
}
|
||||
|
||||
public function testGetSessionIdleTimeoutMinutesReturnsFallbackForOutOfBoundsValue(): void
|
||||
{
|
||||
$gateway = $this->createGateway('2', 'session_idle_timeout_minutes');
|
||||
$this->assertSame(30, $gateway->getSessionIdleTimeoutMinutes());
|
||||
}
|
||||
|
||||
public function testGetSessionAbsoluteTimeoutHoursReturnsFallbackForOutOfBoundsValue(): void
|
||||
{
|
||||
$gateway = $this->createGateway('100', 'session_absolute_timeout_hours');
|
||||
$this->assertSame(8, $gateway->getSessionAbsoluteTimeoutHours());
|
||||
}
|
||||
|
||||
public function testSetSessionIdleTimeoutMinutesRejectsBelowMinimum(): void
|
||||
{
|
||||
$settings = $this->createMock(SettingRepositoryInterface::class);
|
||||
$settings->expects($this->never())->method('set');
|
||||
$gateway = new SettingsSessionGateway(new SettingsMetadataGateway($settings));
|
||||
$this->assertFalse($gateway->setSessionIdleTimeoutMinutes(2));
|
||||
}
|
||||
|
||||
public function testSetSessionIdleTimeoutMinutesRejectsAboveMaximum(): void
|
||||
{
|
||||
$settings = $this->createMock(SettingRepositoryInterface::class);
|
||||
$settings->expects($this->never())->method('set');
|
||||
$gateway = new SettingsSessionGateway(new SettingsMetadataGateway($settings));
|
||||
$this->assertFalse($gateway->setSessionIdleTimeoutMinutes(2000));
|
||||
}
|
||||
|
||||
public function testSetSessionAbsoluteTimeoutHoursRejectsZero(): void
|
||||
{
|
||||
$settings = $this->createMock(SettingRepositoryInterface::class);
|
||||
$settings->expects($this->never())->method('set');
|
||||
$gateway = new SettingsSessionGateway(new SettingsMetadataGateway($settings));
|
||||
$this->assertFalse($gateway->setSessionAbsoluteTimeoutHours(0));
|
||||
}
|
||||
|
||||
public function testGetSessionIdleTimeoutSecondsConvertsCorrectly(): void
|
||||
{
|
||||
$gateway = $this->createGateway('15', 'session_idle_timeout_minutes');
|
||||
$this->assertSame(900, $gateway->getSessionIdleTimeoutSeconds());
|
||||
}
|
||||
|
||||
public function testGetSessionAbsoluteTimeoutSecondsConvertsCorrectly(): void
|
||||
{
|
||||
$gateway = $this->createGateway('4', 'session_absolute_timeout_hours');
|
||||
$this->assertSame(14400, $gateway->getSessionAbsoluteTimeoutSeconds());
|
||||
}
|
||||
|
||||
private function createGateway(?string $returnValue, string $forKey = ''): SettingsSessionGateway
|
||||
{
|
||||
$settings = $this->createMock(SettingRepositoryInterface::class);
|
||||
$settings->method('getValue')->willReturnCallback(
|
||||
static function (string $key) use ($returnValue, $forKey): ?string {
|
||||
if ($forKey !== '' && $key === $forKey) {
|
||||
return $returnValue;
|
||||
}
|
||||
return $returnValue !== null && $forKey === '' ? $returnValue : null;
|
||||
}
|
||||
);
|
||||
|
||||
return new SettingsSessionGateway(new SettingsMetadataGateway($settings));
|
||||
}
|
||||
}
|
||||
143
tests/Service/Settings/SettingsSessionPolicyGatewayTest.php
Normal file
143
tests/Service/Settings/SettingsSessionPolicyGatewayTest.php
Normal file
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
|
||||
namespace MintyPHP\Tests\Service\Settings;
|
||||
|
||||
use MintyPHP\Repository\Settings\SettingRepositoryInterface;
|
||||
use MintyPHP\Service\Settings\SettingsLoginPersistenceGateway;
|
||||
use MintyPHP\Service\Settings\SettingsMetadataGateway;
|
||||
use MintyPHP\Service\Settings\SettingsSessionGateway;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class SettingsSessionPolicyGatewayTest extends TestCase
|
||||
{
|
||||
public function testSessionTimeoutsUseFallbacksWhenMissing(): void
|
||||
{
|
||||
$gateway = $this->newSessionGateway(null, null);
|
||||
|
||||
self::assertSame(30, $gateway->getSessionIdleTimeoutMinutes());
|
||||
self::assertSame(8, $gateway->getSessionAbsoluteTimeoutHours());
|
||||
}
|
||||
|
||||
public function testSessionTimeoutsUseStoredValuesWhenValid(): void
|
||||
{
|
||||
$gateway = $this->newSessionGateway('15', '12');
|
||||
|
||||
self::assertSame(15, $gateway->getSessionIdleTimeoutMinutes());
|
||||
self::assertSame(12, $gateway->getSessionAbsoluteTimeoutHours());
|
||||
self::assertSame(900, $gateway->getSessionIdleTimeoutSeconds());
|
||||
self::assertSame(43200, $gateway->getSessionAbsoluteTimeoutSeconds());
|
||||
}
|
||||
|
||||
public function testSessionTimeoutsFallbackWhenOutOfBounds(): void
|
||||
{
|
||||
$gateway = $this->newSessionGateway('2', '100');
|
||||
|
||||
self::assertSame(30, $gateway->getSessionIdleTimeoutMinutes());
|
||||
self::assertSame(8, $gateway->getSessionAbsoluteTimeoutHours());
|
||||
}
|
||||
|
||||
public function testSessionSettersRejectInvalidValues(): void
|
||||
{
|
||||
$settings = $this->createMock(SettingRepositoryInterface::class);
|
||||
$settings->expects($this->never())->method('set');
|
||||
|
||||
$gateway = new SettingsSessionGateway(new SettingsMetadataGateway($settings));
|
||||
self::assertFalse($gateway->setSessionIdleTimeoutMinutes(2));
|
||||
self::assertFalse($gateway->setSessionIdleTimeoutMinutes(2000));
|
||||
self::assertFalse($gateway->setSessionAbsoluteTimeoutHours(0));
|
||||
}
|
||||
|
||||
public function testAutoRememberDefaultUsesExpectedBooleanNormalization(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->method('getValue')->willReturnMap([
|
||||
['microsoft_auto_remember_default', null],
|
||||
['microsoft_auto_remember_default', '1'],
|
||||
]);
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
self::assertFalse($gateway->isMicrosoftAutoRememberDefault());
|
||||
|
||||
$metadataTrue = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadataTrue->method('getValue')->with('microsoft_auto_remember_default')->willReturn('1');
|
||||
$gatewayTrue = new SettingsLoginPersistenceGateway($metadataTrue);
|
||||
self::assertTrue($gatewayTrue->isMicrosoftAutoRememberDefault());
|
||||
}
|
||||
|
||||
public function testAutoRememberSetterPersistsBooleanFlag(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->expects($this->exactly(2))
|
||||
->method('set')
|
||||
->willReturnCallback(static function (string $key, ?string $value): bool {
|
||||
return $key === 'microsoft_auto_remember_default'
|
||||
&& in_array($value, ['0', '1'], true);
|
||||
});
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
self::assertTrue($gateway->setMicrosoftAutoRememberDefault(true));
|
||||
self::assertTrue($gateway->setMicrosoftAutoRememberDefault(false));
|
||||
}
|
||||
|
||||
public function testRememberTokenLifetimeUsesFallbackWhenMissingOrInvalid(): void
|
||||
{
|
||||
$metadataMissing = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadataMissing->method('getInt')->with('remember_token_lifetime_days')->willReturn(null);
|
||||
$gatewayMissing = new SettingsLoginPersistenceGateway($metadataMissing);
|
||||
self::assertSame(30, $gatewayMissing->getRememberTokenLifetimeDays());
|
||||
self::assertSame(30 * 86400, $gatewayMissing->getRememberTokenLifetimeSeconds());
|
||||
|
||||
$metadataInvalid = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadataInvalid->method('getInt')->with('remember_token_lifetime_days')->willReturn(500);
|
||||
$gatewayInvalid = new SettingsLoginPersistenceGateway($metadataInvalid);
|
||||
self::assertSame(30, $gatewayInvalid->getRememberTokenLifetimeDays());
|
||||
}
|
||||
|
||||
public function testRememberTokenLifetimeAcceptsValidRangeAndComputesSeconds(): void
|
||||
{
|
||||
$metadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$metadata->method('getInt')->with('remember_token_lifetime_days')->willReturn(7);
|
||||
$metadata->expects($this->once())
|
||||
->method('set')
|
||||
->with('remember_token_lifetime_days', '14', $this->anything())
|
||||
->willReturn(true);
|
||||
|
||||
$gateway = new SettingsLoginPersistenceGateway($metadata);
|
||||
self::assertSame(7, $gateway->getRememberTokenLifetimeDays());
|
||||
self::assertSame(7 * 86400, $gateway->getRememberTokenLifetimeSeconds());
|
||||
self::assertTrue($gateway->setRememberTokenLifetimeDays(14));
|
||||
}
|
||||
|
||||
public function testRememberTokenLifetimeRejectsInvalidRangeAndNullUsesDefault(): void
|
||||
{
|
||||
$rejectingMetadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$rejectingMetadata->expects($this->never())->method('set');
|
||||
$rejectingGateway = new SettingsLoginPersistenceGateway($rejectingMetadata);
|
||||
self::assertFalse($rejectingGateway->setRememberTokenLifetimeDays(0));
|
||||
self::assertFalse($rejectingGateway->setRememberTokenLifetimeDays(400));
|
||||
|
||||
$defaultingMetadata = $this->createMock(SettingsMetadataGateway::class);
|
||||
$defaultingMetadata->expects($this->once())
|
||||
->method('set')
|
||||
->with('remember_token_lifetime_days', '30', $this->anything())
|
||||
->willReturn(true);
|
||||
$defaultingGateway = new SettingsLoginPersistenceGateway($defaultingMetadata);
|
||||
self::assertTrue($defaultingGateway->setRememberTokenLifetimeDays(null));
|
||||
}
|
||||
|
||||
private function newSessionGateway(?string $idle, ?string $absolute): SettingsSessionGateway
|
||||
{
|
||||
$settings = $this->createMock(SettingRepositoryInterface::class);
|
||||
$settings->method('getValue')->willReturnCallback(
|
||||
static function (string $key) use ($idle, $absolute): ?string {
|
||||
return match ($key) {
|
||||
'session_idle_timeout_minutes' => $idle,
|
||||
'session_absolute_timeout_hours' => $absolute,
|
||||
default => null,
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
return new SettingsSessionGateway(new SettingsMetadataGateway($settings));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user