%PDF- %PDF-
Direktori : /www/varak.net/dmarc.varak.net/tests/classes/ |
Current File : /www/varak.net/dmarc.varak.net/tests/classes/AuthTest.php |
<?php namespace Liuch\DmarcSrg; use Liuch\DmarcSrg\Users\User; use Liuch\DmarcSrg\Users\AdminUser; use Liuch\DmarcSrg\Exception\AuthException; use Liuch\DmarcSrg\Database\DatabaseController; use Liuch\DmarcSrg\Database\UserMapperInterface; class AuthTest extends \PHPUnit\Framework\TestCase { public function testIsEnabledWithNoPassword(): void { $core = $this->coreWithConfigValue('admin/password', null); $this->assertFalse((new Auth($core))->isEnabled()); } public function testIsEnabledWithPassword(): void { $core = $this->coreWithConfigValue('admin/password', 'some'); $this->assertTrue((new Auth($core))->isEnabled()); } public function testCorrectLogin(): void { $core = $this->getMockBuilder(Core::class) ->disableOriginalConstructor() ->onlyMethods([ 'config', 'setCurrentUser' ]) ->getMock(); $core->expects($this->exactly(3)) ->method('config') ->with($this->logicalOr( $this->equalTo('admin/password'), $this->equalTo('users/user_management') )) ->willReturnCallback(function ($param) { return $param === 'admin/password' ? 'some' : false; }); $core->expects($this->once()) ->method('setCurrentUser') ->with($this->callback(function ($param) { return $param instanceof User; })); $result = (new Auth($core))->login('', 'some'); $this->assertIsArray($result); $this->assertSame(0, $result['error_code']); $this->assertSame('Authentication succeeded', $result['message']); } public function testLoginWithIncorrectUsername(): void { $mp = $this->getMockBuilder(UserMapperInterface::class) ->disableOriginalConstructor() ->getMock(); $mp->expects($this->once()) ->method('exists') ->willReturn(false); $db = $this->getMockBuilder(DatabaseController::class) ->disableOriginalConstructor() ->onlyMethods([ 'getMapper' ]) ->getMock(); $db->expects($this->once()) ->method('getMapper') ->with('user') ->willReturn($mp); $core = $this->getMockBuilder(Core::class) ->disableOriginalConstructor() ->onlyMethods([ 'database', 'config' ]) ->getMock(); $core->expects($this->once()) ->method('database') ->willReturn($db); $core->expects($this->exactly(2)) ->method('config') ->with($this->logicalOr( $this->equalTo('admin/password'), $this->equalTo('users/user_management') )) ->willReturnCallback(function ($param) { return $param === 'admin/password' ? 'some' : true; }); $this->expectException(AuthException::class); (new Auth($core))->login('fake_user', 'password'); } public function testLogout(): void { $core = $this->getMockBuilder(Core::class) ->onlyMethods([ 'setCurrentUser' ]) ->disableOriginalConstructor() ->getMock(); $core->expects($this->once())->method('setCurrentUser')->with(null); $result = (new Auth($core))->logout(); $this->assertArrayHasKey('error_code', $result); $this->assertArrayHasKey('message', $result); $this->assertEquals(0, $result['error_code']); $this->assertEquals('Logged out successfully', $result['message']); } public function testIsAllowedWhenAuthDisabled(): void { $core = $this->getMockBuilder(Core::class) ->disableOriginalConstructor() ->onlyMethods([ 'config', 'getCurrentUser' ]) ->getMock(); $core->expects($this->once()) ->method('config') ->with($this->equalTo('admin/password')) ->willReturn(null); $core->expects($this->never()) ->method('getCurrentUser'); $this->assertNull((new Auth($core))->isAllowed(User::LEVEL_ADMIN)); } public function testIsAllowedWithActiveSession(): void { $core = $this->getMockBuilder(Core::class) ->disableOriginalConstructor() ->onlyMethods([ 'config', 'getCurrentUser' ]) ->getMock(); $core->expects($this->once()) ->method('config') ->with($this->equalTo('admin/password')) ->willReturn('some'); $core->expects($this->once()) ->method('getCurrentUser') ->willReturn(new AdminUser($core)); $this->assertNull((new Auth($core))->isAllowed(User::LEVEL_ADMIN)); } public function testIsAllowedWithoutSession(): void { $core = $this->getMockBuilder(Core::class) ->disableOriginalConstructor() ->onlyMethods([ 'config', 'getCurrentUser' ]) ->getMock(); $core->expects($this->exactly(3)) ->method('config') ->with($this->logicalOr( $this->equalTo('admin/password'), $this->equalTo('users/user_management') )) ->willReturnCallback(function ($param) { return $param === 'admin/password' ? 'some' : false; }); $core->expects($this->once()) ->method('getCurrentUser') ->willReturn(null); $this->expectException(AuthException::class); $this->expectExceptionCode(-2); $this->expectExceptionMessage('Authentication needed'); (new Auth($core))->isAllowed(User::LEVEL_ADMIN); } private function coreWithConfigValue(string $key, $value) { $core = $this->getMockBuilder(Core::class)->disableOriginalConstructor()->onlyMethods([ 'config' ])->getMock(); $core->expects($this->once())->method('config')->with($this->equalTo($key))->willReturn($value); return $core; } }