Signed-off-by: Georg Ehrke <developer@georgehrke.com>pull/9773/head
parent
2da510af0b
commit
b832edabbf
@ -0,0 +1,930 @@ |
||||
<?php |
||||
/** |
||||
* @copyright Copyright (c) 2018, Georg Ehrke |
||||
* |
||||
* @author Georg Ehrke <oc.list@georgehrke.com> |
||||
* |
||||
* @license AGPL-3.0 |
||||
* |
||||
* This code is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License, version 3, |
||||
* as published by the Free Software Foundation. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License, version 3, |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
||||
* |
||||
*/ |
||||
namespace OCA\DAV\Tests\unit\CalDAV\ResourceBooking; |
||||
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder; |
||||
use OCP\IDBConnection; |
||||
use OCP\IGroupManager; |
||||
use OCP\ILogger; |
||||
use OCP\IUser; |
||||
use OCP\IUserSession; |
||||
use Sabre\DAV\PropPatch; |
||||
use Test\TestCase; |
||||
|
||||
abstract class AbstractPrincipalBackendTest extends TestCase { |
||||
|
||||
/** @var \OCA\DAV\CalDAV\ResourceBooking\ResourcePrincipalBackend|\OCA\DAV\CalDAV\ResourceBooking\RoomPrincipalBackend */ |
||||
protected $principalBackend; |
||||
|
||||
/** @var IDBConnection|\PHPUnit_Framework_MockObject_MockObject */ |
||||
protected $dbConnection; |
||||
|
||||
/** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */ |
||||
protected $userSession; |
||||
|
||||
/** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */ |
||||
protected $groupManager; |
||||
|
||||
/** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */ |
||||
protected $logger; |
||||
|
||||
/** @var string */ |
||||
protected $expectedDbTable; |
||||
|
||||
/** @var string */ |
||||
protected $principalPrefix; |
||||
|
||||
public function setUp() { |
||||
parent::setUp(); |
||||
|
||||
$this->dbConnection = $this->createMock(IDBConnection::class); |
||||
$this->userSession = $this->createMock(IUserSession::class); |
||||
$this->groupManager = $this->createMock(IGroupManager::class); |
||||
$this->logger = $this->createMock(ILogger::class); |
||||
} |
||||
|
||||
public function testGetPrincipalsByPrefix() { |
||||
$queryBuilder = $this->createMock(IQueryBuilder::class); |
||||
$stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class); |
||||
$this->dbConnection->expects($this->once()) |
||||
->method('getQueryBuilder') |
||||
->with() |
||||
->will($this->returnValue($queryBuilder)); |
||||
|
||||
$queryBuilder->expects($this->at(0)) |
||||
->method('select') |
||||
->with(['id', 'backend_id', 'resource_id', 'email', 'displayname']) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(1)) |
||||
->method('from') |
||||
->with($this->expectedDbTable) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(2)) |
||||
->method('execute') |
||||
->with() |
||||
->will($this->returnValue($stmt)); |
||||
|
||||
$stmt->expects($this->at(0)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue([ |
||||
'id' => 0, |
||||
'backend_id' => 'db', |
||||
'resource_id' => '123', |
||||
'email' => 'foo@bar.com', |
||||
'displayname' => 'Resource 123' |
||||
])); |
||||
$stmt->expects($this->at(1)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue([ |
||||
'id' => 1, |
||||
'backend_id' => 'ldap', |
||||
'resource_id' => '123', |
||||
'email' => 'ldap@bar.com', |
||||
'displayname' => 'Resource 123 ldap' |
||||
])); |
||||
$stmt->expects($this->at(2)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue([ |
||||
'id' => 2, |
||||
'backend_id' => 'db', |
||||
'resource_id' => '456', |
||||
'email' => 'bli@bar.com', |
||||
'displayname' => 'Resource 456' |
||||
])); |
||||
$stmt->expects($this->at(3)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue(null)); |
||||
$stmt->expects($this->at(4)) |
||||
->method('closeCursor') |
||||
->with(); |
||||
|
||||
$actual = $this->principalBackend->getPrincipalsByPrefix($this->principalPrefix); |
||||
$this->assertEquals([ |
||||
[ |
||||
'uri' => $this->principalPrefix . '/db-123', |
||||
'{DAV:}displayname' => 'Resource 123', |
||||
'{http://sabredav.org/ns}email-address' => 'foo@bar.com', |
||||
], |
||||
[ |
||||
'uri' => $this->principalPrefix . '/ldap-123', |
||||
'{DAV:}displayname' => 'Resource 123 ldap', |
||||
'{http://sabredav.org/ns}email-address' => 'ldap@bar.com', |
||||
], |
||||
[ |
||||
'uri' => $this->principalPrefix . '/db-456', |
||||
'{DAV:}displayname' => 'Resource 456', |
||||
'{http://sabredav.org/ns}email-address' => 'bli@bar.com', |
||||
], |
||||
], $actual); |
||||
|
||||
} |
||||
|
||||
public function testGetNoPrincipalsByPrefixForWrongPrincipalPrefix() { |
||||
$this->dbConnection->expects($this->never()) |
||||
->method('getQueryBuilder'); |
||||
|
||||
$actual = $this->principalBackend->getPrincipalsByPrefix('principals/users'); |
||||
$this->assertEquals([], $actual); |
||||
} |
||||
|
||||
public function testGetPrincipalByPath() { |
||||
$queryBuilder = $this->createMock(IQueryBuilder::class); |
||||
$stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class); |
||||
$expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class); |
||||
|
||||
$this->dbConnection->expects($this->at(0)) |
||||
->method('getQueryBuilder') |
||||
->with() |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->method('expr') |
||||
->will($this->returnValue($expr)); |
||||
$expr->method('eq') |
||||
->will($this->returnValueMap([ |
||||
['backend_id', 'createNamedParameter-1', null, 'WHERE_CLAUSE_1'], |
||||
['resource_id', 'createNamedParameter-2', null, 'WHERE_CLAUSE_2'], |
||||
])); |
||||
$queryBuilder->method('createNamedParameter') |
||||
->will($this->returnValueMap([ |
||||
['db', \PDO::PARAM_STR, null, 'createNamedParameter-1'], |
||||
['123', \PDO::PARAM_STR, null, 'createNamedParameter-2'], |
||||
])); |
||||
|
||||
$queryBuilder->expects($this->at(0)) |
||||
->method('select') |
||||
->with(['id', 'backend_id', 'resource_id', 'email', 'displayname']) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(1)) |
||||
->method('from') |
||||
->with($this->expectedDbTable) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(4)) |
||||
->method('where') |
||||
->with('WHERE_CLAUSE_1') |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(7)) |
||||
->method('andWhere') |
||||
->with('WHERE_CLAUSE_2') |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(8)) |
||||
->method('execute') |
||||
->with() |
||||
->will($this->returnValue($stmt)); |
||||
|
||||
$stmt->expects($this->at(0)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue([ |
||||
'id' => 0, |
||||
'backend_id' => 'db', |
||||
'resource_id' => '123', |
||||
'email' => 'foo@bar.com', |
||||
'displayname' => 'Resource 123' |
||||
])); |
||||
|
||||
$actual = $this->principalBackend->getPrincipalByPath($this->principalPrefix . '/db-123'); |
||||
$this->assertEquals([ |
||||
'uri' => $this->principalPrefix . '/db-123', |
||||
'{DAV:}displayname' => 'Resource 123', |
||||
'{http://sabredav.org/ns}email-address' => 'foo@bar.com', |
||||
], $actual); |
||||
} |
||||
|
||||
public function testGetPrincipalByPathNotFound() { |
||||
$queryBuilder = $this->createMock(IQueryBuilder::class); |
||||
$stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class); |
||||
$expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class); |
||||
|
||||
$this->dbConnection->expects($this->at(0)) |
||||
->method('getQueryBuilder') |
||||
->with() |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->method('expr') |
||||
->will($this->returnValue($expr)); |
||||
$expr->method('eq') |
||||
->will($this->returnValueMap([ |
||||
['backend_id', 'createNamedParameter-1', null, 'WHERE_CLAUSE_1'], |
||||
['resource_id', 'createNamedParameter-2', null, 'WHERE_CLAUSE_2'], |
||||
])); |
||||
$queryBuilder->method('createNamedParameter') |
||||
->will($this->returnValueMap([ |
||||
['db', \PDO::PARAM_STR, null, 'createNamedParameter-1'], |
||||
['123', \PDO::PARAM_STR, null, 'createNamedParameter-2'], |
||||
])); |
||||
|
||||
$queryBuilder->expects($this->at(0)) |
||||
->method('select') |
||||
->with(['id', 'backend_id', 'resource_id', 'email', 'displayname']) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(1)) |
||||
->method('from') |
||||
->with($this->expectedDbTable) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(4)) |
||||
->method('where') |
||||
->with('WHERE_CLAUSE_1') |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(7)) |
||||
->method('andWhere') |
||||
->with('WHERE_CLAUSE_2') |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(8)) |
||||
->method('execute') |
||||
->with() |
||||
->will($this->returnValue($stmt)); |
||||
|
||||
$stmt->expects($this->at(0)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue(false)); |
||||
|
||||
$actual = $this->principalBackend->getPrincipalByPath($this->principalPrefix . '/db-123'); |
||||
$this->assertEquals(null, $actual); |
||||
} |
||||
|
||||
public function testGetPrincipalByPathWrongPrefix() { |
||||
$this->dbConnection->expects($this->never()) |
||||
->method('getQueryBuilder'); |
||||
|
||||
$actual = $this->principalBackend->getPrincipalByPath('principals/users/foo-bar'); |
||||
$this->assertEquals(null, $actual); |
||||
} |
||||
|
||||
public function testGetGroupMemberSet() { |
||||
$actual = $this->principalBackend->getGroupMemberSet($this->principalPrefix . '/foo-bar'); |
||||
$this->assertEquals([], $actual); |
||||
} |
||||
|
||||
public function testGetGroupMembership() { |
||||
$actual = $this->principalBackend->getGroupMembership($this->principalPrefix . '/foo-bar'); |
||||
$this->assertEquals([], $actual); |
||||
} |
||||
|
||||
/** |
||||
* @expectedException \Sabre\DAV\Exception |
||||
* @expectedExceptionMessage Setting members of the group is not supported yet |
||||
*/ |
||||
public function testSetGroupMemberSet() { |
||||
$this->principalBackend->setGroupMemberSet($this->principalPrefix . '/foo-bar', ['foo', 'bar']); |
||||
} |
||||
|
||||
public function testUpdatePrincipal() { |
||||
$propPatch = $this->createMock(PropPatch::class); |
||||
$actual = $this->principalBackend->updatePrincipal($this->principalPrefix . '/foo-bar', $propPatch); |
||||
|
||||
$this->assertEquals(0, $actual); |
||||
} |
||||
|
||||
/** |
||||
* @dataProvider dataSearchPrincipals |
||||
*/ |
||||
public function testSearchPrincipals($expected, $test) { |
||||
$user = $this->createMock(IUser::class); |
||||
$this->userSession->expects($this->once()) |
||||
->method('getUser') |
||||
->with() |
||||
->will($this->returnValue($user)); |
||||
$this->groupManager->expects($this->once()) |
||||
->method('getUserGroupIds') |
||||
->with($user) |
||||
->will($this->returnValue(['group1', 'group2'])); |
||||
|
||||
$queryBuilder1 = $this->createMock(IQueryBuilder::class); |
||||
$queryBuilder2 = $this->createMock(IQueryBuilder::class); |
||||
$stmt1 = $this->createMock(\Doctrine\DBAL\Driver\Statement::class); |
||||
$stmt2 = $this->createMock(\Doctrine\DBAL\Driver\Statement::class); |
||||
$expr1 = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class); |
||||
$expr2 = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class); |
||||
|
||||
$this->dbConnection->expects($this->at(0)) |
||||
->method('getQueryBuilder') |
||||
->with() |
||||
->will($this->returnValue($queryBuilder1)); |
||||
$this->dbConnection->expects($this->at(1)) |
||||
->method('escapeLikeParameter') |
||||
->with('foo') |
||||
->will($this->returnValue('escapedFoo')); |
||||
$this->dbConnection->expects($this->at(2)) |
||||
->method('getQueryBuilder') |
||||
->with() |
||||
->will($this->returnValue($queryBuilder2)); |
||||
$this->dbConnection->expects($this->at(3)) |
||||
->method('escapeLikeParameter') |
||||
->with('bar') |
||||
->will($this->returnValue('escapedBar')); |
||||
|
||||
$queryBuilder1->method('expr') |
||||
->will($this->returnValue($expr1)); |
||||
$queryBuilder2->method('expr') |
||||
->will($this->returnValue($expr2)); |
||||
|
||||
$expr1->method('iLike') |
||||
->will($this->returnValueMap([ |
||||
['email', 'createNamedParameter-1', null, 'ILIKE_CLAUSE_1'], |
||||
])); |
||||
$expr2->method('iLike') |
||||
->will($this->returnValueMap([ |
||||
['displayname', 'createNamedParameter-2', null, 'ILIKE_CLAUSE_2'], |
||||
])); |
||||
|
||||
$queryBuilder1->method('expr') |
||||
->will($this->returnValue($expr1)); |
||||
$queryBuilder2->method('expr') |
||||
->will($this->returnValue($expr2)); |
||||
|
||||
$queryBuilder1->method('createNamedParameter') |
||||
->will($this->returnValueMap([ |
||||
['%escapedFoo%', \PDO::PARAM_STR, null, 'createNamedParameter-1'], |
||||
])); |
||||
$queryBuilder2->method('createNamedParameter') |
||||
->will($this->returnValueMap([ |
||||
['%escapedBar%', \PDO::PARAM_STR, null, 'createNamedParameter-2'], |
||||
])); |
||||
|
||||
$queryBuilder1->expects($this->at(0)) |
||||
->method('select') |
||||
->with(['id', 'backend_id', 'resource_id', 'email', 'displayname', 'group_restrictions']) |
||||
->will($this->returnValue($queryBuilder1)); |
||||
$queryBuilder1->expects($this->at(1)) |
||||
->method('from') |
||||
->with($this->expectedDbTable) |
||||
->will($this->returnValue($queryBuilder1)); |
||||
$queryBuilder1->expects($this->at(4)) |
||||
->method('where') |
||||
->with('ILIKE_CLAUSE_1') |
||||
->will($this->returnValue($queryBuilder1)); |
||||
$queryBuilder1->expects($this->at(5)) |
||||
->method('execute') |
||||
->with() |
||||
->will($this->returnValue($stmt1)); |
||||
|
||||
$queryBuilder2->expects($this->at(0)) |
||||
->method('select') |
||||
->with(['id', 'backend_id', 'resource_id', 'email', 'displayname', 'group_restrictions']) |
||||
->will($this->returnValue($queryBuilder2)); |
||||
$queryBuilder2->expects($this->at(1)) |
||||
->method('from') |
||||
->with($this->expectedDbTable) |
||||
->will($this->returnValue($queryBuilder2)); |
||||
$queryBuilder2->expects($this->at(4)) |
||||
->method('where') |
||||
->with('ILIKE_CLAUSE_2') |
||||
->will($this->returnValue($queryBuilder2)); |
||||
$queryBuilder2->expects($this->at(5)) |
||||
->method('execute') |
||||
->with() |
||||
->will($this->returnValue($stmt2)); |
||||
|
||||
$stmt1->expects($this->at(0)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue([ |
||||
'id' => 0, |
||||
'backend_id' => 'db', |
||||
'resource_id' => '1', |
||||
'email' => '1', |
||||
'displayname' => 'Resource 1', |
||||
'group_restrictions' => null, |
||||
])); |
||||
$stmt1->expects($this->at(1)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue([ |
||||
'id' => 1, |
||||
'backend_id' => 'db', |
||||
'resource_id' => '2', |
||||
'email' => '2', |
||||
'displayname' => 'Resource 2', |
||||
'group_restrictions' => '', |
||||
])); |
||||
$stmt1->expects($this->at(2)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue([ |
||||
'id' => 2, |
||||
'backend_id' => 'db', |
||||
'resource_id' => '3', |
||||
'email' => '3', |
||||
'displayname' => 'Resource 3', |
||||
'group_restrictions' => '["group3"]', |
||||
])); |
||||
$stmt1->expects($this->at(3)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue([ |
||||
'id' => 99, |
||||
'backend_id' => 'db', |
||||
'resource_id' => '99', |
||||
'email' => '99', |
||||
'displayname' => 'Resource 99', |
||||
'group_restrictions' => '["group1", "group2"]', |
||||
])); |
||||
$stmt1->expects($this->at(4)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue(null)); |
||||
|
||||
$stmt2->expects($this->at(0)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue([ |
||||
'id' => 0, |
||||
'backend_id' => 'db', |
||||
'resource_id' => '4', |
||||
'email' => '4', |
||||
'displayname' => 'Resource 4', |
||||
'group_restrictions' => '[]' |
||||
])); |
||||
$stmt2->expects($this->at(1)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue([ |
||||
'id' => 1, |
||||
'backend_id' => 'db', |
||||
'resource_id' => '5', |
||||
'email' => '5', |
||||
'displayname' => 'Resource 5', |
||||
'group_restrictions' => '["group1", "group5"]' |
||||
])); |
||||
$stmt2->expects($this->at(2)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue([ |
||||
'id' => 99, |
||||
'backend_id' => 'db', |
||||
'resource_id' => '99', |
||||
'email' => '99', |
||||
'displayname' => 'Resource 99', |
||||
'group_restrictions' => '["group1", "group2"]', |
||||
])); |
||||
$stmt2->expects($this->at(3)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue(null)); |
||||
|
||||
$actual = $this->principalBackend->searchPrincipals($this->principalPrefix, [ |
||||
'{http://sabredav.org/ns}email-address' => 'foo', |
||||
'{DAV:}displayname' => 'bar', |
||||
], $test); |
||||
|
||||
$this->assertEquals( |
||||
str_replace('%prefix%', $this->principalPrefix, $expected), |
||||
$actual); |
||||
} |
||||
|
||||
public function dataSearchPrincipals() { |
||||
// data providers are called before we subclass |
||||
// this class, $this->principalPrefix is null |
||||
// at that point, so we need this hack |
||||
return [ |
||||
[[ |
||||
'%prefix%/db-99' |
||||
], 'allof'], |
||||
[[ |
||||
'%prefix%/db-1', |
||||
'%prefix%/db-2', |
||||
'%prefix%/db-99', |
||||
'%prefix%/db-4', |
||||
'%prefix%/db-5', |
||||
], 'anyof'], |
||||
]; |
||||
} |
||||
|
||||
public function testSearchPrincipalsEmptySearchProperties() { |
||||
$this->userSession->expects($this->never()) |
||||
->method('getUser'); |
||||
$this->groupManager->expects($this->never()) |
||||
->method('getUserGroupIds'); |
||||
$this->dbConnection->expects($this->never()) |
||||
->method('getQueryBuilder'); |
||||
|
||||
$this->principalBackend->searchPrincipals($this->principalPrefix, []); |
||||
} |
||||
|
||||
public function testSearchPrincipalsWrongPrincipalPrefix() { |
||||
$this->userSession->expects($this->never()) |
||||
->method('getUser'); |
||||
$this->groupManager->expects($this->never()) |
||||
->method('getUserGroupIds'); |
||||
$this->dbConnection->expects($this->never()) |
||||
->method('getQueryBuilder'); |
||||
|
||||
$this->principalBackend->searchPrincipals('principals/users', [ |
||||
'{http://sabredav.org/ns}email-address' => 'foo' |
||||
]); |
||||
} |
||||
|
||||
public function testFindByUriByEmail() { |
||||
$user = $this->createMock(IUser::class); |
||||
$this->userSession->expects($this->once()) |
||||
->method('getUser') |
||||
->with() |
||||
->will($this->returnValue($user)); |
||||
$this->groupManager->expects($this->once()) |
||||
->method('getUserGroupIds') |
||||
->with($user) |
||||
->will($this->returnValue(['group1', 'group2'])); |
||||
|
||||
$queryBuilder = $this->createMock(IQueryBuilder::class); |
||||
$stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class); |
||||
$expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class); |
||||
|
||||
$this->dbConnection->expects($this->at(0)) |
||||
->method('getQueryBuilder') |
||||
->with() |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->method('expr') |
||||
->will($this->returnValue($expr)); |
||||
$expr->method('eq') |
||||
->will($this->returnValueMap([ |
||||
['email', 'createNamedParameter-1', null, 'WHERE_CLAUSE_1'], |
||||
])); |
||||
$queryBuilder->method('createNamedParameter') |
||||
->will($this->returnValueMap([ |
||||
['foo@bar.com', \PDO::PARAM_STR, null, 'createNamedParameter-1'], |
||||
])); |
||||
|
||||
$queryBuilder->expects($this->at(0)) |
||||
->method('select') |
||||
->with(['id', 'backend_id', 'resource_id', 'email', 'displayname', 'group_restrictions']) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(1)) |
||||
->method('from') |
||||
->with($this->expectedDbTable) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(4)) |
||||
->method('where') |
||||
->with('WHERE_CLAUSE_1') |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(5)) |
||||
->method('execute') |
||||
->with() |
||||
->will($this->returnValue($stmt)); |
||||
|
||||
$stmt->expects($this->at(0)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue([ |
||||
'id' => 0, |
||||
'backend_id' => 'db', |
||||
'resource_id' => '123', |
||||
'email' => 'foo@bar.com', |
||||
'displayname' => 'Resource 123', |
||||
'group_restrictions' => '["group1"]', |
||||
])); |
||||
|
||||
$actual = $this->principalBackend->findByUri('mailto:foo@bar.com', $this->principalPrefix); |
||||
$this->assertEquals($this->principalPrefix . '/db-123', $actual); |
||||
} |
||||
|
||||
public function testFindByUriByEmailForbiddenResource() { |
||||
$user = $this->createMock(IUser::class); |
||||
$this->userSession->expects($this->once()) |
||||
->method('getUser') |
||||
->with() |
||||
->will($this->returnValue($user)); |
||||
$this->groupManager->expects($this->once()) |
||||
->method('getUserGroupIds') |
||||
->with($user) |
||||
->will($this->returnValue(['group1', 'group2'])); |
||||
|
||||
$queryBuilder = $this->createMock(IQueryBuilder::class); |
||||
$stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class); |
||||
$expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class); |
||||
|
||||
$this->dbConnection->expects($this->at(0)) |
||||
->method('getQueryBuilder') |
||||
->with() |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->method('expr') |
||||
->will($this->returnValue($expr)); |
||||
$expr->method('eq') |
||||
->will($this->returnValueMap([ |
||||
['email', 'createNamedParameter-1', null, 'WHERE_CLAUSE_1'], |
||||
])); |
||||
$queryBuilder->method('createNamedParameter') |
||||
->will($this->returnValueMap([ |
||||
['foo@bar.com', \PDO::PARAM_STR, null, 'createNamedParameter-1'], |
||||
])); |
||||
|
||||
$queryBuilder->expects($this->at(0)) |
||||
->method('select') |
||||
->with(['id', 'backend_id', 'resource_id', 'email', 'displayname', 'group_restrictions']) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(1)) |
||||
->method('from') |
||||
->with($this->expectedDbTable) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(4)) |
||||
->method('where') |
||||
->with('WHERE_CLAUSE_1') |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(5)) |
||||
->method('execute') |
||||
->with() |
||||
->will($this->returnValue($stmt)); |
||||
|
||||
$stmt->expects($this->at(0)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue([ |
||||
'id' => 0, |
||||
'backend_id' => 'db', |
||||
'resource_id' => '123', |
||||
'email' => 'foo@bar.com', |
||||
'displayname' => 'Resource 123', |
||||
'group_restrictions' => '["group3"]', |
||||
])); |
||||
|
||||
$actual = $this->principalBackend->findByUri('mailto:foo@bar.com', $this->principalPrefix); |
||||
$this->assertEquals(null, $actual); |
||||
} |
||||
|
||||
public function testFindByUriByEmailNotFound() { |
||||
$user = $this->createMock(IUser::class); |
||||
$this->userSession->expects($this->once()) |
||||
->method('getUser') |
||||
->with() |
||||
->will($this->returnValue($user)); |
||||
$this->groupManager->expects($this->once()) |
||||
->method('getUserGroupIds') |
||||
->with($user) |
||||
->will($this->returnValue(['group1', 'group2'])); |
||||
|
||||
$queryBuilder = $this->createMock(IQueryBuilder::class); |
||||
$stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class); |
||||
$expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class); |
||||
|
||||
$this->dbConnection->expects($this->at(0)) |
||||
->method('getQueryBuilder') |
||||
->with() |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->method('expr') |
||||
->will($this->returnValue($expr)); |
||||
$expr->method('eq') |
||||
->will($this->returnValueMap([ |
||||
['email', 'createNamedParameter-1', null, 'WHERE_CLAUSE_1'], |
||||
])); |
||||
$queryBuilder->method('createNamedParameter') |
||||
->will($this->returnValueMap([ |
||||
['foo@bar.com', \PDO::PARAM_STR, null, 'createNamedParameter-1'], |
||||
])); |
||||
|
||||
$queryBuilder->expects($this->at(0)) |
||||
->method('select') |
||||
->with(['id', 'backend_id', 'resource_id', 'email', 'displayname', 'group_restrictions']) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(1)) |
||||
->method('from') |
||||
->with($this->expectedDbTable) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(4)) |
||||
->method('where') |
||||
->with('WHERE_CLAUSE_1') |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(5)) |
||||
->method('execute') |
||||
->with() |
||||
->will($this->returnValue($stmt)); |
||||
|
||||
$stmt->expects($this->at(0)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue(null)); |
||||
|
||||
$actual = $this->principalBackend->findByUri('mailto:foo@bar.com', $this->principalPrefix); |
||||
$this->assertEquals(null, $actual); |
||||
} |
||||
|
||||
public function testFindByUriByPrincipal() { |
||||
$user = $this->createMock(IUser::class); |
||||
$this->userSession->expects($this->once()) |
||||
->method('getUser') |
||||
->with() |
||||
->will($this->returnValue($user)); |
||||
$this->groupManager->expects($this->once()) |
||||
->method('getUserGroupIds') |
||||
->with($user) |
||||
->will($this->returnValue(['group1', 'group2'])); |
||||
|
||||
$queryBuilder = $this->createMock(IQueryBuilder::class); |
||||
$stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class); |
||||
$expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class); |
||||
|
||||
$this->dbConnection->expects($this->at(0)) |
||||
->method('getQueryBuilder') |
||||
->with() |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->method('expr') |
||||
->will($this->returnValue($expr)); |
||||
$expr->method('eq') |
||||
->will($this->returnValueMap([ |
||||
['email', 'createNamedParameter-1', null, 'WHERE_CLAUSE_1'], |
||||
])); |
||||
$queryBuilder->method('createNamedParameter') |
||||
->will($this->returnValueMap([ |
||||
['foo@bar.com', \PDO::PARAM_STR, null, 'createNamedParameter-1'], |
||||
])); |
||||
|
||||
$queryBuilder->expects($this->at(0)) |
||||
->method('select') |
||||
->with(['id', 'backend_id', 'resource_id', 'email', 'displayname', 'group_restrictions']) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(1)) |
||||
->method('from') |
||||
->with($this->expectedDbTable) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(4)) |
||||
->method('where') |
||||
->with('WHERE_CLAUSE_1') |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(5)) |
||||
->method('execute') |
||||
->with() |
||||
->will($this->returnValue($stmt)); |
||||
|
||||
$stmt->expects($this->at(0)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue([ |
||||
'id' => 0, |
||||
'backend_id' => 'db', |
||||
'resource_id' => '123', |
||||
'email' => 'foo@bar.com', |
||||
'displayname' => 'Resource 123', |
||||
'group_restrictions' => '["group1"]', |
||||
])); |
||||
|
||||
$actual = $this->principalBackend->findByUri('mailto:foo@bar.com', $this->principalPrefix); |
||||
$this->assertEquals($this->principalPrefix . '/db-123', $actual); |
||||
} |
||||
|
||||
public function testFindByUriByPrincipalForbiddenResource() { |
||||
$user = $this->createMock(IUser::class); |
||||
$this->userSession->expects($this->once()) |
||||
->method('getUser') |
||||
->with() |
||||
->will($this->returnValue($user)); |
||||
$this->groupManager->expects($this->once()) |
||||
->method('getUserGroupIds') |
||||
->with($user) |
||||
->will($this->returnValue(['group1', 'group2'])); |
||||
|
||||
$queryBuilder = $this->createMock(IQueryBuilder::class); |
||||
$stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class); |
||||
$expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class); |
||||
|
||||
$this->dbConnection->expects($this->at(0)) |
||||
->method('getQueryBuilder') |
||||
->with() |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->method('expr') |
||||
->will($this->returnValue($expr)); |
||||
$expr->method('eq') |
||||
->will($this->returnValueMap([ |
||||
['backend_id', 'createNamedParameter-1', null, 'WHERE_CLAUSE_1'], |
||||
['resource_id', 'createNamedParameter-2', null, 'WHERE_CLAUSE_2'], |
||||
])); |
||||
$queryBuilder->method('createNamedParameter') |
||||
->will($this->returnValueMap([ |
||||
['db', \PDO::PARAM_STR, null, 'createNamedParameter-1'], |
||||
['123', \PDO::PARAM_STR, null, 'createNamedParameter-2'], |
||||
])); |
||||
|
||||
$queryBuilder->expects($this->at(0)) |
||||
->method('select') |
||||
->with(['id', 'backend_id', 'resource_id', 'email', 'displayname', 'group_restrictions']) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(1)) |
||||
->method('from') |
||||
->with($this->expectedDbTable) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(4)) |
||||
->method('where') |
||||
->with('WHERE_CLAUSE_1') |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(7)) |
||||
->method('andWhere') |
||||
->with('WHERE_CLAUSE_2') |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(8)) |
||||
->method('execute') |
||||
->with() |
||||
->will($this->returnValue($stmt)); |
||||
|
||||
$stmt->expects($this->at(0)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue([ |
||||
'id' => 0, |
||||
'backend_id' => 'db', |
||||
'resource_id' => '123', |
||||
'email' => 'foo@bar.com', |
||||
'displayname' => 'Resource 123', |
||||
'group_restrictions' => '["group3"]', |
||||
])); |
||||
|
||||
$actual = $this->principalBackend->findByUri('principal:' . $this->principalPrefix . '/db-123', $this->principalPrefix); |
||||
$this->assertEquals(null, $actual); |
||||
} |
||||
|
||||
public function testFindByUriByPrincipalNotFound() { |
||||
$user = $this->createMock(IUser::class); |
||||
$this->userSession->expects($this->once()) |
||||
->method('getUser') |
||||
->with() |
||||
->will($this->returnValue($user)); |
||||
$this->groupManager->expects($this->once()) |
||||
->method('getUserGroupIds') |
||||
->with($user) |
||||
->will($this->returnValue(['group1', 'group2'])); |
||||
|
||||
$queryBuilder = $this->createMock(IQueryBuilder::class); |
||||
$stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class); |
||||
$expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class); |
||||
|
||||
$this->dbConnection->expects($this->at(0)) |
||||
->method('getQueryBuilder') |
||||
->with() |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->method('expr') |
||||
->will($this->returnValue($expr)); |
||||
$expr->method('eq') |
||||
->will($this->returnValueMap([ |
||||
['backend_id', 'createNamedParameter-1', null, 'WHERE_CLAUSE_1'], |
||||
['resource_id', 'createNamedParameter-2', null, 'WHERE_CLAUSE_2'], |
||||
])); |
||||
$queryBuilder->method('createNamedParameter') |
||||
->will($this->returnValueMap([ |
||||
['db', \PDO::PARAM_STR, null, 'createNamedParameter-1'], |
||||
['123', \PDO::PARAM_STR, null, 'createNamedParameter-2'], |
||||
])); |
||||
|
||||
$queryBuilder->expects($this->at(0)) |
||||
->method('select') |
||||
->with(['id', 'backend_id', 'resource_id', 'email', 'displayname', 'group_restrictions']) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(1)) |
||||
->method('from') |
||||
->with($this->expectedDbTable) |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(4)) |
||||
->method('where') |
||||
->with('WHERE_CLAUSE_1') |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(7)) |
||||
->method('andWhere') |
||||
->with('WHERE_CLAUSE_2') |
||||
->will($this->returnValue($queryBuilder)); |
||||
$queryBuilder->expects($this->at(8)) |
||||
->method('execute') |
||||
->with() |
||||
->will($this->returnValue($stmt)); |
||||
|
||||
$stmt->expects($this->at(0)) |
||||
->method('fetch') |
||||
->with(\PDO::FETCH_ASSOC) |
||||
->will($this->returnValue(null)); |
||||
|
||||
$actual = $this->principalBackend->findByUri('principal:' . $this->principalPrefix . '/db-123', $this->principalPrefix); |
||||
$this->assertEquals(null, $actual); |
||||
} |
||||
|
||||
public function testFindByUriByUnknownUri() { |
||||
$user = $this->createMock(IUser::class); |
||||
$this->userSession->expects($this->once()) |
||||
->method('getUser') |
||||
->with() |
||||
->will($this->returnValue($user)); |
||||
$this->groupManager->expects($this->once()) |
||||
->method('getUserGroupIds') |
||||
->with($user) |
||||
->will($this->returnValue(['group1', 'group2'])); |
||||
|
||||
$actual = $this->principalBackend->findByUri('foobar:blub', $this->principalPrefix); |
||||
$this->assertEquals(null, $actual); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,35 @@ |
||||
<?php |
||||
/** |
||||
* @copyright Copyright (c) 2018, Georg Ehrke |
||||
* |
||||
* @author Georg Ehrke <oc.list@georgehrke.com> |
||||
* |
||||
* @license AGPL-3.0 |
||||
* |
||||
* This code is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License, version 3, |
||||
* as published by the Free Software Foundation. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License, version 3, |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
||||
* |
||||
*/ |
||||
namespace OCA\DAV\Tests\unit\CalDAV\ResourceBooking; |
||||
|
||||
use OCA\DAV\CalDAV\ResourceBooking\ResourcePrincipalBackend; |
||||
|
||||
Class ResourcePrincipalBackendTest extends AbstractPrincipalBackendTest { |
||||
public function setUp() { |
||||
parent::setUp(); |
||||
|
||||
$this->principalBackend = new ResourcePrincipalBackend($this->dbConnection, |
||||
$this->userSession, $this->groupManager, $this->logger); |
||||
$this->expectedDbTable = 'calendar_resources_cache'; |
||||
$this->principalPrefix = 'principals/calendar-resources'; |
||||
} |
||||
} |
||||
@ -0,0 +1,35 @@ |
||||
<?php |
||||
/** |
||||
* @copyright Copyright (c) 2018, Georg Ehrke |
||||
* |
||||
* @author Georg Ehrke <oc.list@georgehrke.com> |
||||
* |
||||
* @license AGPL-3.0 |
||||
* |
||||
* This code is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License, version 3, |
||||
* as published by the Free Software Foundation. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License, version 3, |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
||||
* |
||||
*/ |
||||
namespace OCA\DAV\Tests\unit\CalDAV\ResourceBooking; |
||||
|
||||
use OCA\DAV\CalDAV\ResourceBooking\RoomPrincipalBackend; |
||||
|
||||
Class RoomPrincipalBackendTest extends AbstractPrincipalBackendTest { |
||||
public function setUp() { |
||||
parent::setUp(); |
||||
|
||||
$this->principalBackend = new RoomPrincipalBackend($this->dbConnection, |
||||
$this->userSession, $this->groupManager, $this->logger); |
||||
$this->expectedDbTable = 'calendar_rooms_cache'; |
||||
$this->principalPrefix = 'principals/calendar-rooms'; |
||||
} |
||||
} |
||||
Loading…
Reference in new issue