|  |  | @ -611,162 +611,6 @@ class Test_Share extends \Test\TestCase { | 
			
		
	
		
			
				
					|  |  |  | 		); | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	public function testShareWithGroup() { | 
			
		
	
		
			
				
					|  |  |  | 		// Invalid shares
 | 
			
		
	
		
			
				
					|  |  |  | 		$message = 'Sharing test.txt failed, because the group foobar does not exist'; | 
			
		
	
		
			
				
					|  |  |  | 		try { | 
			
		
	
		
			
				
					|  |  |  | 			OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, 'foobar', \OCP\Constants::PERMISSION_READ); | 
			
		
	
		
			
				
					|  |  |  | 			$this->fail('Exception was expected: '.$message); | 
			
		
	
		
			
				
					|  |  |  | 		} catch (Exception $exception) { | 
			
		
	
		
			
				
					|  |  |  | 			$this->assertEquals($message, $exception->getMessage()); | 
			
		
	
		
			
				
					|  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  | 		$policy = \OC::$server->getAppConfig()->getValue('core', 'shareapi_only_share_with_group_members', 'no'); | 
			
		
	
		
			
				
					|  |  |  | 		\OC::$server->getAppConfig()->setValue('core', 'shareapi_only_share_with_group_members', 'yes'); | 
			
		
	
		
			
				
					|  |  |  | 		$message = 'Sharing test.txt failed, because '.$this->user1.' is not a member of the group '.$this->group2; | 
			
		
	
		
			
				
					|  |  |  | 		try { | 
			
		
	
		
			
				
					|  |  |  | 			OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group2, \OCP\Constants::PERMISSION_READ); | 
			
		
	
		
			
				
					|  |  |  | 			$this->fail('Exception was expected: '.$message); | 
			
		
	
		
			
				
					|  |  |  | 		} catch (Exception $exception) { | 
			
		
	
		
			
				
					|  |  |  | 			$this->assertEquals($message, $exception->getMessage()); | 
			
		
	
		
			
				
					|  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  | 		\OC::$server->getAppConfig()->setValue('core', 'shareapi_only_share_with_group_members', $policy); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Valid share
 | 
			
		
	
		
			
				
					|  |  |  | 		$this->shareUserOneTestFileWithGroupOne(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// check if only the group share was created and not a single db-entry for each user
 | 
			
		
	
		
			
				
					|  |  |  | 		$statement = \OCP\DB::prepare('select `id` from `*PREFIX*share`'); | 
			
		
	
		
			
				
					|  |  |  | 		$query = $statement->execute(); | 
			
		
	
		
			
				
					|  |  |  | 		$result = $query->fetchAll(); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertSame(1, count($result)); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Attempt to share again
 | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user1); | 
			
		
	
		
			
				
					|  |  |  | 		$message = 'Sharing test.txt failed, because this item is already shared with '.$this->group1; | 
			
		
	
		
			
				
					|  |  |  | 		try { | 
			
		
	
		
			
				
					|  |  |  | 			OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ); | 
			
		
	
		
			
				
					|  |  |  | 			$this->fail('Exception was expected: '.$message); | 
			
		
	
		
			
				
					|  |  |  | 		} catch (Exception $exception) { | 
			
		
	
		
			
				
					|  |  |  | 			$this->assertEquals($message, $exception->getMessage()); | 
			
		
	
		
			
				
					|  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Attempt to share back to owner of group share
 | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user2); | 
			
		
	
		
			
				
					|  |  |  | 		$message = 'Sharing failed, because the user '.$this->user1.' is the original sharer'; | 
			
		
	
		
			
				
					|  |  |  | 		try { | 
			
		
	
		
			
				
					|  |  |  | 			OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, \OCP\Constants::PERMISSION_READ); | 
			
		
	
		
			
				
					|  |  |  | 			$this->fail('Exception was expected: '.$message); | 
			
		
	
		
			
				
					|  |  |  | 		} catch (Exception $exception) { | 
			
		
	
		
			
				
					|  |  |  | 			$this->assertEquals($message, $exception->getMessage()); | 
			
		
	
		
			
				
					|  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Attempt to share back to group
 | 
			
		
	
		
			
				
					|  |  |  | 		$message = 'Sharing test.txt failed, because this item is already shared with '.$this->group1; | 
			
		
	
		
			
				
					|  |  |  | 		try { | 
			
		
	
		
			
				
					|  |  |  | 			OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ); | 
			
		
	
		
			
				
					|  |  |  | 			$this->fail('Exception was expected: '.$message); | 
			
		
	
		
			
				
					|  |  |  | 		} catch (Exception $exception) { | 
			
		
	
		
			
				
					|  |  |  | 			$this->assertEquals($message, $exception->getMessage()); | 
			
		
	
		
			
				
					|  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Attempt to share back to member of group
 | 
			
		
	
		
			
				
					|  |  |  | 		$message ='Sharing test.txt failed, because this item is already shared with '.$this->user3; | 
			
		
	
		
			
				
					|  |  |  | 		try { | 
			
		
	
		
			
				
					|  |  |  | 			OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ); | 
			
		
	
		
			
				
					|  |  |  | 			$this->fail('Exception was expected: '.$message); | 
			
		
	
		
			
				
					|  |  |  | 		} catch (Exception $exception) { | 
			
		
	
		
			
				
					|  |  |  | 			$this->assertEquals($message, $exception->getMessage()); | 
			
		
	
		
			
				
					|  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Unshare
 | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user1); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1)); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Valid share with same person - user then group
 | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE | \OCP\Constants::PERMISSION_SHARE)); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE)); | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user2); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE | \OCP\Constants::PERMISSION_SHARE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS)); | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user3); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS)); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Valid reshare
 | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user2); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, \OCP\Constants::PERMISSION_READ)); | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user4); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Unshare from user only
 | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user1); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2)); | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user2); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS)); | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user4); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Valid share with same person - group then user
 | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user1); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE)); | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user2); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS)); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Unshare from group only
 | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user1); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1)); | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user2); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS)); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Attempt user specific target conflict
 | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user3); | 
			
		
	
		
			
				
					|  |  |  | 		\OCP\Util::connectHook('OCP\\Share', 'post_shared', 'DummyHookListener', 'listen'); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE)); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(OCP\Share::SHARE_TYPE_GROUP, DummyHookListener::$shareType); | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user2); | 
			
		
	
		
			
				
					|  |  |  | 		$to_test = OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(2, count($to_test)); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertTrue(in_array('test.txt', $to_test)); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertTrue(in_array('test1.txt', $to_test)); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Valid reshare
 | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE)); | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user4); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array('test1.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Remove user from group
 | 
			
		
	
		
			
				
					|  |  |  | 		OC_Group::removeFromGroup($this->user2, $this->group1); | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user2); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user4); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array(), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Add user to group
 | 
			
		
	
		
			
				
					|  |  |  | 		OC_Group::addToGroup($this->user4, $this->group1); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Unshare from self
 | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertTrue(OCP\Share::unshareFromSelf('test', 'test.txt')); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array(), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user2); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Unshare from self via source
 | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user1); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertTrue(OCP\Share::unshareFromSelf('test', 'share.txt', true)); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array(), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		// Remove group
 | 
			
		
	
		
			
				
					|  |  |  | 		OC_Group::deleteGroup($this->group1); | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user4); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array(), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); | 
			
		
	
		
			
				
					|  |  |  | 		OC_User::setUserId($this->user3); | 
			
		
	
		
			
				
					|  |  |  | 		$this->assertEquals(array(), OCP\Share::getItemsShared('test')); | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	/** | 
			
		
	
		
			
				
					|  |  |  | 	 * Test that unsharing from group will also delete all | 
			
		
	
		
			
				
					|  |  |  | 	 * child entries | 
			
		
	
	
		
			
				
					|  |  | 
 |