egroupware/api/tests/Vfs/SharingHooksTest.php

109 lines
3.1 KiB
PHP

<?php
/**
* Tests for updating / deleting shares if underlying file is renamed or deleted
*
* We create files and delete them through the VFS, then check to see if the share is
* correctly deleted too.
*
* @link http://www.egroupware.org
* @author Nathan Gray
* @copyright (c) 2020 Nathan Gray
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
*/
namespace EGroupware\Api\Vfs;
require_once __DIR__ . '/SharingBase.php';
use EGroupware\Api\Vfs;
class SharingHooksTest extends SharingBase
{
/**
* Test that deleting a file deletes the share
*/
public function testDeleteFileDeletesShare()
{
$target = Vfs::get_home_dir();
$this->files = $this->addFiles($target);
$test_file = $this->files[0];
// Make sure there are no leftover shares
Sharing::delete(array('share_path' => $test_file));
// Create share
$this->shares[] = $created_share = Sharing::create($test_file, Sharing::READONLY, '', '');
$this->assertEquals(Vfs::PREFIX . $test_file, $created_share['share_path']);
// Now delete the file
Vfs::remove($test_file);
// Check for share for that file
$read_share = $this->readShare($created_share['share_id']);
$this->assertEquals(array(), $read_share, "Expected not to find the share, but something was found");
}
/**
* Test that deleting a directory deletes shares on any file in that directory
*/
public function testDeleteDirectoryDeletesShare()
{
$target = Vfs::get_home_dir();
$this->files = $this->addFiles($target);
$test_file = $target . '/sub_dir/subdir_test_file.txt';
// Make sure there are no leftover shares
Sharing::delete(array('share_path' => $test_file));
// Create share
$this->shares[] = $created_share = Sharing::create($test_file, Sharing::READONLY, '', '');
$this->assertEquals(Vfs::PREFIX . $test_file, $created_share['share_path']);
// Now delete the parent directory
Vfs::remove($target . '/sub_dir');
// Check for share for that file
$read_share = $this->readShare($created_share['share_id']);
$this->assertEquals(array(), $read_share, "Expected not to find the share, but something was found");
}
/**
* Test renaming a file updates the share
*/
public function testRenameFileUpdatesShare()
{
$target = Vfs::get_home_dir();
$this->files = $this->addFiles($target);
$test_file = $this->files[0];
// Make sure there are no leftover shares
Sharing::delete(array('share_path' => $test_file));
// Create share
$this->shares[] = $created_share = Sharing::create($test_file, Sharing::READONLY, '', '');
$this->assertEquals(Vfs::PREFIX . $test_file, $created_share['share_path']);
// Now rename the file
$this->files[] = $moved = $target . '/moved.txt';
Vfs::rename($test_file, $moved);
// Check for share for that file
$read_share = $this->readShare($created_share['share_id']);
$this->assertEquals(Vfs::PREFIX . $moved, $read_share['share_path'], "Expected find the share with a different path");
$this->assertNotEquals(Vfs::PREFIX . $moved, $created_share['share_path'], "Expected find the share with a different path");
}
}