@ -104,6 +104,9 @@ class View extends \Test\TestCase {
$this -> userObject -> delete ();
$this -> groupObject -> delete ();
$mountProviderCollection = \OC :: $server -> getMountProviderCollection ();
\Test\TestCase :: invokePrivate ( $mountProviderCollection , 'providers' , [[]]);
parent :: tearDown ();
}
@ -1486,6 +1489,112 @@ class View extends \Test\TestCase {
$this -> assertEquals ( $shouldEmit , $result );
}
/**
* Create test movable mount points
*
* @ param array $mountPoints array of mount point locations
* @ return array array of MountPoint objects
*/
private function createTestMovableMountPoints ( $mountPoints ) {
$mounts = [];
foreach ( $mountPoints as $mountPoint ) {
$storage = $this -> getMockBuilder ( '\OC\Files\Storage\Temporary' )
-> setMethods ([])
-> getMock ();
$mounts [] = $this -> getMock (
'\Test\TestMoveableMountPoint' ,
[ 'moveMount' ],
[ $storage , $mountPoint ]
);
}
$mountProvider = $this -> getMock ( '\OCP\Files\Config\IMountProvider' );
$mountProvider -> expects ( $this -> any ())
-> method ( 'getMountsForUser' )
-> will ( $this -> returnValue ( $mounts ));
$mountProviderCollection = \OC :: $server -> getMountProviderCollection ();
$mountProviderCollection -> registerProvider ( $mountProvider );
return $mounts ;
}
/**
* Test mount point move
*/
public function testMountPointMove () {
$this -> loginAsUser ( $this -> user );
list ( $mount1 , $mount2 ) = $this -> createTestMovableMountPoints ([
$this -> user . '/files/mount1' ,
$this -> user . '/files/mount2' ,
]);
$mount1 -> expects ( $this -> once ())
-> method ( 'moveMount' )
-> will ( $this -> returnValue ( true ));
$mount2 -> expects ( $this -> once ())
-> method ( 'moveMount' )
-> will ( $this -> returnValue ( true ));
$view = new \OC\Files\View ( '/' . $this -> user . '/files/' );
$view -> mkdir ( 'sub' );
$this -> assertTrue ( $view -> rename ( 'mount1' , 'renamed_mount' ), 'Can rename mount point' );
$this -> assertTrue ( $view -> rename ( 'mount2' , 'sub/moved_mount' ), 'Can move a mount point into a subdirectory' );
}
/**
* Test that moving a mount point into another is forbidden
*/
public function testMoveMountPointIntoAnother () {
$this -> loginAsUser ( $this -> user );
list ( $mount1 , $mount2 ) = $this -> createTestMovableMountPoints ([
$this -> user . '/files/mount1' ,
$this -> user . '/files/mount2' ,
]);
$mount1 -> expects ( $this -> never ())
-> method ( 'moveMount' );
$mount2 -> expects ( $this -> never ())
-> method ( 'moveMount' );
$view = new \OC\Files\View ( '/' . $this -> user . '/files/' );
$this -> assertFalse ( $view -> rename ( 'mount1' , 'mount2' ), 'Cannot overwrite another mount point' );
$this -> assertFalse ( $view -> rename ( 'mount1' , 'mount2/sub' ), 'Cannot move a mount point into another' );
}
/**
* Test that moving a mount point into a shared folder is forbidden
*/
public function testMoveMountPointIntoSharedFolder () {
$this -> loginAsUser ( $this -> user );
list ( $mount1 ) = $this -> createTestMovableMountPoints ([
$this -> user . '/files/mount1' ,
]);
$mount1 -> expects ( $this -> never ())
-> method ( 'moveMount' );
$view = new \OC\Files\View ( '/' . $this -> user . '/files/' );
$view -> mkdir ( 'shareddir' );
$view -> mkdir ( 'shareddir/sub' );
$view -> mkdir ( 'shareddir/sub2' );
$fileId = $view -> getFileInfo ( 'shareddir' ) -> getId ();
$userObject = \OC :: $server -> getUserManager () -> createUser ( 'test2' , 'IHateNonMockableStaticClasses' );
$this -> assertTrue ( \OCP\Share :: shareItem ( 'folder' , $fileId , \OCP\Share :: SHARE_TYPE_USER , 'test2' , \OCP\Constants :: PERMISSION_READ ));
$this -> assertFalse ( $view -> rename ( 'mount1' , 'shareddir' ), 'Cannot overwrite shared folder' );
$this -> assertFalse ( $view -> rename ( 'mount1' , 'shareddir/sub' ), 'Cannot move mount point into shared folder' );
$this -> assertFalse ( $view -> rename ( 'mount1' , 'shareddir/sub/sub2' ), 'Cannot move mount point into shared subfolder' );
$this -> assertTrue ( \OCP\Share :: unshare ( 'folder' , $fileId , \OCP\Share :: SHARE_TYPE_USER , 'test2' ));
$userObject -> delete ();
}
public function basicOperationProviderForLocks () {
return [
@ -2042,23 +2151,9 @@ class View extends \Test\TestCase {
public function testLockMoveMountPoint () {
$this -> loginAsUser ( 'test' );
$subStorage = $this -> getMockBuilder ( '\OC\Files\Storage\Temporary' )
-> setMethods ([])
-> getMock ();
$mount = $this -> getMock (
'\Test\TestMoveableMountPoint' ,
[ 'moveMount' ],
[ $subStorage , $this -> user . '/files/substorage' ]
);
$mountProvider = $this -> getMock ( '\OCP\Files\Config\IMountProvider' );
$mountProvider -> expects ( $this -> once ())
-> method ( 'getMountsForUser' )
-> will ( $this -> returnValue ([ $mount ]));
$mountProviderCollection = \OC :: $server -> getMountProviderCollection ();
$mountProviderCollection -> registerProvider ( $mountProvider );
list ( $mount ) = $this -> createTestMovableMountPoints ([
$this -> user . '/files/substorage' ,
]);
$view = new \OC\Files\View ( '/' . $this -> user . '/files/' );
$view -> mkdir ( 'subdir' );
@ -2109,8 +2204,6 @@ class View extends \Test\TestCase {
$this -> assertNull ( $this -> getFileLockType ( $view , $sourcePath , false ), 'Shared storage root not locked after operation' );
$this -> assertNull ( $this -> getFileLockType ( $view , $sourcePath , true ), 'Source path not locked after operation' );
$this -> assertNull ( $this -> getFileLockType ( $view , $targetPath , true ), 'Target path not locked after operation' );
\Test\TestCase :: invokePrivate ( $mountProviderCollection , 'providers' , [[]]);
}
/**