Browse Source
apply group restrictions to resources
apply group restrictions to resources
Signed-off-by: Georg Ehrke <developer@georgehrke.com>pull/9773/head
No known key found for this signature in database
GPG Key ID: 9D98FD9380A1CB43
9 changed files with 1108 additions and 31 deletions
-
2apps/dav/lib/CalDAV/Plugin.php
-
104apps/dav/lib/CalDAV/ResourceBooking/AbstractPrincipalBackend.php
-
7apps/dav/lib/CalDAV/ResourceBooking/ResourcePrincipalBackend.php
-
7apps/dav/lib/CalDAV/ResourceBooking/RoomPrincipalBackend.php
-
4apps/dav/lib/RootCollection.php
-
15apps/dav/tests/unit/CalDAV/PluginTest.php
-
930apps/dav/tests/unit/CalDAV/ResourceBooking/AbstractPrincipalBackendTest.php
-
35apps/dav/tests/unit/CalDAV/ResourceBooking/ResourcePrincipalBackendTest.php
-
35apps/dav/tests/unit/CalDAV/ResourceBooking/RoomPrincipalBackendTest.php
@ -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'; |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue