2015-08-09 22:19:35 +03:00
|
|
|
<?php
|
2015-08-11 16:43:44 +03:00
|
|
|
/**
|
|
|
|
* @author Joas Schilling <nickvergessen@owncloud.com>
|
|
|
|
*
|
|
|
|
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
|
|
|
* @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\Files_Sharing\Tests\API;
|
2015-08-09 22:19:35 +03:00
|
|
|
|
|
|
|
use OCA\Files_Sharing\API\Sharees;
|
|
|
|
use OCA\Files_sharing\Tests\TestCase;
|
|
|
|
|
|
|
|
class ShareesTest extends TestCase {
|
2015-08-11 16:43:44 +03:00
|
|
|
/** @var Sharees */
|
|
|
|
protected $sharees;
|
2015-08-09 22:19:35 +03:00
|
|
|
|
2015-08-11 16:43:44 +03:00
|
|
|
/** @var \OCP\IUserManager|\PHPUnit_Framework_MockObject_MockObject */
|
|
|
|
protected $userManager;
|
2015-08-09 22:19:35 +03:00
|
|
|
|
2015-08-11 16:43:44 +03:00
|
|
|
/** @var \OCP\IGroupManager|\PHPUnit_Framework_MockObject_MockObject */
|
|
|
|
protected $groupManager;
|
2015-08-09 22:19:35 +03:00
|
|
|
|
2015-08-11 17:31:54 +03:00
|
|
|
/** @var \OCP\Contacts\IManager|\PHPUnit_Framework_MockObject_MockObject */
|
|
|
|
protected $contactsManager;
|
|
|
|
|
2015-08-11 16:43:44 +03:00
|
|
|
/** @var \OCP\IUserSession|\PHPUnit_Framework_MockObject_MockObject */
|
|
|
|
protected $session;
|
2015-08-09 22:19:35 +03:00
|
|
|
|
2015-08-11 16:43:44 +03:00
|
|
|
protected function setUp() {
|
|
|
|
parent::setUp();
|
2015-08-09 22:19:35 +03:00
|
|
|
|
2015-08-11 16:43:44 +03:00
|
|
|
$this->userManager = $this->getMockBuilder('OCP\IUserManager')
|
|
|
|
->disableOriginalConstructor()
|
|
|
|
->getMock();
|
2015-08-09 22:19:35 +03:00
|
|
|
|
2015-08-11 16:43:44 +03:00
|
|
|
$this->groupManager = $this->getMockBuilder('OCP\IGroupManager')
|
|
|
|
->disableOriginalConstructor()
|
|
|
|
->getMock();
|
2015-08-09 22:19:35 +03:00
|
|
|
|
2015-08-11 17:31:54 +03:00
|
|
|
$this->contactsManager = $this->getMockBuilder('OCP\Contacts\IManager')
|
|
|
|
->disableOriginalConstructor()
|
|
|
|
->getMock();
|
|
|
|
|
2015-08-11 16:43:44 +03:00
|
|
|
$this->session = $this->getMockBuilder('OCP\IUserSession')
|
|
|
|
->disableOriginalConstructor()
|
|
|
|
->getMock();
|
2015-08-09 22:19:35 +03:00
|
|
|
|
2015-08-11 16:43:44 +03:00
|
|
|
$this->sharees = new Sharees(
|
|
|
|
$this->groupManager,
|
|
|
|
$this->userManager,
|
2015-08-11 17:31:54 +03:00
|
|
|
$this->contactsManager,
|
2015-08-11 16:43:44 +03:00
|
|
|
$this->getMockBuilder('OCP\IAppConfig')->disableOriginalConstructor()->getMock(),
|
|
|
|
$this->session,
|
|
|
|
$this->getMockBuilder('OCP\IURLGenerator')->disableOriginalConstructor()->getMock()
|
|
|
|
);
|
2015-08-09 22:19:35 +03:00
|
|
|
}
|
|
|
|
|
2015-08-11 16:43:44 +03:00
|
|
|
protected function getUserMock($uid, $displayName) {
|
|
|
|
$user = $this->getMockBuilder('OCP\IUser')
|
|
|
|
->disableOriginalConstructor()
|
|
|
|
->getMock();
|
2015-08-09 22:19:35 +03:00
|
|
|
|
2015-08-11 16:43:44 +03:00
|
|
|
$user->expects($this->any())
|
|
|
|
->method('getUID')
|
|
|
|
->willReturn($uid);
|
2015-08-09 22:19:35 +03:00
|
|
|
|
2015-08-11 16:43:44 +03:00
|
|
|
$user->expects($this->any())
|
|
|
|
->method('getDisplayName')
|
|
|
|
->willReturn($displayName);
|
2015-08-09 22:19:35 +03:00
|
|
|
|
2015-08-11 16:43:44 +03:00
|
|
|
return $user;
|
2015-08-09 22:19:35 +03:00
|
|
|
}
|
|
|
|
|
2015-08-11 17:22:05 +03:00
|
|
|
protected function getGroupMock($gid) {
|
|
|
|
$group = $this->getMockBuilder('OCP\IGroup')
|
|
|
|
->disableOriginalConstructor()
|
|
|
|
->getMock();
|
|
|
|
|
|
|
|
$group->expects($this->any())
|
|
|
|
->method('getGID')
|
|
|
|
->willReturn($gid);
|
|
|
|
|
|
|
|
return $group;
|
|
|
|
}
|
|
|
|
|
2015-08-11 16:43:44 +03:00
|
|
|
public function dataGetUsers() {
|
|
|
|
return [
|
|
|
|
['test', false, [], [], []],
|
|
|
|
['test', true, [], [], []],
|
|
|
|
[
|
|
|
|
'test',
|
|
|
|
false,
|
|
|
|
[],
|
|
|
|
[
|
|
|
|
$this->getUserMock('test1', 'Test One'),
|
|
|
|
],
|
|
|
|
[
|
|
|
|
['label' => 'Test One', 'value' => ['shareType' => \OCP\Share::SHARE_TYPE_USER, 'shareWith' => 'test1']],
|
|
|
|
]
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'test',
|
|
|
|
false,
|
|
|
|
[],
|
|
|
|
[
|
|
|
|
$this->getUserMock('test1', 'Test One'),
|
|
|
|
$this->getUserMock('test2', 'Test Two'),
|
|
|
|
],
|
|
|
|
[
|
|
|
|
['label' => 'Test One', 'value' => ['shareType' => \OCP\Share::SHARE_TYPE_USER, 'shareWith' => 'test1']],
|
|
|
|
['label' => 'Test Two', 'value' => ['shareType' => \OCP\Share::SHARE_TYPE_USER, 'shareWith' => 'test2']],
|
|
|
|
]
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'test',
|
|
|
|
true,
|
|
|
|
['abc', 'xyz'],
|
|
|
|
[
|
|
|
|
['abc', 'test', -1, 0, ['test1' => 'Test One']],
|
|
|
|
['xyz', 'test', -1, 0, []],
|
|
|
|
],
|
|
|
|
[
|
|
|
|
['label' => 'Test One', 'value' => ['shareType' => \OCP\Share::SHARE_TYPE_USER, 'shareWith' => 'test1']],
|
|
|
|
]
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'test',
|
|
|
|
true,
|
|
|
|
['abc', 'xyz'],
|
|
|
|
[
|
|
|
|
['abc', 'test', -1, 0, [
|
|
|
|
'test1' => 'Test One',
|
|
|
|
'test2' => 'Test Two',
|
|
|
|
]],
|
|
|
|
['xyz', 'test', -1, 0, [
|
|
|
|
'test1' => 'Test One',
|
|
|
|
'test2' => 'Test Two',
|
|
|
|
]],
|
|
|
|
],
|
|
|
|
[
|
|
|
|
['label' => 'Test One', 'value' => ['shareType' => \OCP\Share::SHARE_TYPE_USER, 'shareWith' => 'test1']],
|
|
|
|
['label' => 'Test Two', 'value' => ['shareType' => \OCP\Share::SHARE_TYPE_USER, 'shareWith' => 'test2']],
|
|
|
|
]
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'test',
|
|
|
|
true,
|
|
|
|
['abc', 'xyz'],
|
|
|
|
[
|
|
|
|
['abc', 'test', -1, 0, [
|
|
|
|
'test1' => 'Test One',
|
|
|
|
]],
|
|
|
|
['xyz', 'test', -1, 0, [
|
|
|
|
'test2' => 'Test Two',
|
|
|
|
]],
|
|
|
|
],
|
|
|
|
[
|
|
|
|
['label' => 'Test One', 'value' => ['shareType' => \OCP\Share::SHARE_TYPE_USER, 'shareWith' => 'test1']],
|
|
|
|
['label' => 'Test Two', 'value' => ['shareType' => \OCP\Share::SHARE_TYPE_USER, 'shareWith' => 'test2']],
|
|
|
|
]
|
|
|
|
],
|
|
|
|
];
|
2015-08-09 22:19:35 +03:00
|
|
|
}
|
|
|
|
|
2015-08-11 16:43:44 +03:00
|
|
|
/**
|
|
|
|
* @dataProvider dataGetUsers
|
|
|
|
*
|
|
|
|
* @param string $searchTerm
|
|
|
|
* @param bool $shareWithGroupOnly
|
|
|
|
* @param array $groupResponse
|
|
|
|
* @param array $userResponse
|
|
|
|
* @param array $expected
|
|
|
|
*/
|
|
|
|
public function testGetUsers($searchTerm, $shareWithGroupOnly, $groupResponse, $userResponse, $expected) {
|
|
|
|
if (!$shareWithGroupOnly) {
|
|
|
|
$this->userManager->expects($this->once())
|
|
|
|
->method('searchDisplayName')
|
|
|
|
->with($searchTerm)
|
|
|
|
->willReturn($userResponse);
|
|
|
|
} else {
|
2015-08-11 17:22:05 +03:00
|
|
|
$user = $this->getUserMock('admin', 'Administrator');
|
2015-08-11 16:43:44 +03:00
|
|
|
$this->session->expects($this->any())
|
|
|
|
->method('getUser')
|
2015-08-11 17:22:05 +03:00
|
|
|
->willReturn($user);
|
2015-08-11 16:43:44 +03:00
|
|
|
|
|
|
|
$this->groupManager->expects($this->once())
|
|
|
|
->method('getUserGroupIds')
|
2015-08-11 17:22:05 +03:00
|
|
|
->with($user)
|
2015-08-11 16:43:44 +03:00
|
|
|
->willReturn($groupResponse);
|
|
|
|
|
|
|
|
$this->groupManager->expects($this->exactly(sizeof($groupResponse)))
|
|
|
|
->method('displayNamesInGroup')
|
|
|
|
->with($this->anything(), $searchTerm)
|
|
|
|
->willReturnMap($userResponse);
|
|
|
|
}
|
|
|
|
|
|
|
|
$users = $this->invokePrivate($this->sharees, 'getUsers', [$searchTerm, $shareWithGroupOnly]);
|
|
|
|
|
|
|
|
$this->assertEquals($expected, $users);
|
2015-08-09 22:19:35 +03:00
|
|
|
}
|
|
|
|
|
2015-08-11 17:22:05 +03:00
|
|
|
public function dataGetGroups() {
|
|
|
|
return [
|
|
|
|
['test', false, [], [], []],
|
|
|
|
[
|
|
|
|
'test', false,
|
|
|
|
[$this->getGroupMock('test1')],
|
|
|
|
[],
|
|
|
|
[['label' => 'test1', 'value' => ['shareType' => \OCP\Share::SHARE_TYPE_GROUP, 'shareWith' => 'test1']]],
|
|
|
|
],
|
|
|
|
['test', true, [], [], []],
|
|
|
|
[
|
|
|
|
'test', true,
|
|
|
|
[
|
|
|
|
$this->getGroupMock('test1'),
|
|
|
|
$this->getGroupMock('test2'),
|
|
|
|
],
|
|
|
|
[$this->getGroupMock('test1')],
|
|
|
|
[['label' => 'test1', 'value' => ['shareType' => \OCP\Share::SHARE_TYPE_GROUP, 'shareWith' => 'test1']]],
|
|
|
|
],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider dataGetGroups
|
|
|
|
*
|
|
|
|
* @param string $searchTerm
|
|
|
|
* @param bool $shareWithGroupOnly
|
|
|
|
* @param array $groupResponse
|
|
|
|
* @param array $userGroupsResponse
|
|
|
|
* @param array $expected
|
|
|
|
*/
|
|
|
|
public function testGetGroups($searchTerm, $shareWithGroupOnly, $groupResponse, $userGroupsResponse, $expected) {
|
|
|
|
$this->groupManager->expects($this->once())
|
|
|
|
->method('search')
|
|
|
|
->with($searchTerm)
|
|
|
|
->willReturn($groupResponse);
|
|
|
|
|
|
|
|
if ($shareWithGroupOnly) {
|
|
|
|
$user = $this->getUserMock('admin', 'Administrator');
|
|
|
|
$this->session->expects($this->any())
|
|
|
|
->method('getUser')
|
|
|
|
->willReturn($user);
|
|
|
|
|
|
|
|
$numGetUserGroupsCalls = empty($groupResponse) ? 0 : 1;
|
|
|
|
$this->groupManager->expects($this->exactly($numGetUserGroupsCalls))
|
|
|
|
->method('getUserGroups')
|
|
|
|
->with($user)
|
|
|
|
->willReturn($userGroupsResponse);
|
|
|
|
}
|
|
|
|
|
|
|
|
$users = $this->invokePrivate($this->sharees, 'getGroups', [$searchTerm, $shareWithGroupOnly]);
|
|
|
|
|
|
|
|
$this->assertEquals($expected, $users);
|
|
|
|
}
|
|
|
|
|
2015-08-11 17:31:54 +03:00
|
|
|
public function dataGetRemote() {
|
|
|
|
return [
|
|
|
|
['test', [], []],
|
|
|
|
[
|
|
|
|
'test@remote',
|
|
|
|
[],
|
|
|
|
[
|
|
|
|
['label' => 'test@remote', 'value' => ['shareType' => \OCP\Share::SHARE_TYPE_REMOTE, 'shareWith' => 'test@remote']],
|
|
|
|
],
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'test',
|
|
|
|
[
|
|
|
|
[
|
|
|
|
'FN' => 'User3 @ Localhost',
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'FN' => 'User2 @ Localhost',
|
|
|
|
'CLOUD' => [
|
|
|
|
],
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'FN' => 'User @ Localhost',
|
|
|
|
'CLOUD' => [
|
|
|
|
'username@localhost',
|
|
|
|
],
|
|
|
|
],
|
|
|
|
],
|
|
|
|
[
|
|
|
|
['label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => \OCP\Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost']],
|
|
|
|
],
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'test@remote',
|
|
|
|
[
|
|
|
|
[
|
|
|
|
'FN' => 'User3 @ Localhost',
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'FN' => 'User2 @ Localhost',
|
|
|
|
'CLOUD' => [
|
|
|
|
],
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'FN' => 'User @ Localhost',
|
|
|
|
'CLOUD' => [
|
|
|
|
'username@localhost',
|
|
|
|
],
|
|
|
|
],
|
|
|
|
],
|
|
|
|
[
|
|
|
|
['label' => 'test@remote', 'value' => ['shareType' => \OCP\Share::SHARE_TYPE_REMOTE, 'shareWith' => 'test@remote']],
|
|
|
|
['label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => \OCP\Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost']],
|
|
|
|
],
|
|
|
|
],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider dataGetRemote
|
|
|
|
*
|
|
|
|
* @param string $searchTerm
|
|
|
|
* @param array $contacts
|
|
|
|
* @param array $expected
|
|
|
|
*/
|
|
|
|
public function testGetRemote($searchTerm, $contacts, $expected) {
|
|
|
|
$this->contactsManager->expects($this->any())
|
|
|
|
->method('search')
|
|
|
|
->with($searchTerm, ['CLOUD', 'FN'])
|
|
|
|
->willReturn($contacts);
|
|
|
|
|
|
|
|
$users = $this->invokePrivate($this->sharees, 'getRemote', [$searchTerm]);
|
|
|
|
|
|
|
|
$this->assertEquals($expected, $users);
|
|
|
|
}
|
|
|
|
|
2015-08-11 16:43:44 +03:00
|
|
|
// public function testArguments() {
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// public function testsOnlyUsers() {
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// public function testOnlyGroups() {
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// public function testRemoteAddress() {
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// public function testRemoteFromContacts() {
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// public function testAll() {
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// public function testSorting() {
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// public function testPagination() {
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// public function testShareWithinGroup() {
|
|
|
|
//
|
|
|
|
// }
|
2015-08-09 22:19:35 +03:00
|
|
|
}
|