3737
3838use OC \Files \Storage \Temporary ;
3939use OCP \IConfig ;
40+ use OCP \IUser ;
41+ use OCP \Share \IShare ;
4042
4143/**
4244 * Class Test_Files_versions
@@ -54,6 +56,8 @@ class VersioningTest extends \Test\TestCase {
5456 * @var \OC\Files\View
5557 */
5658 private $ rootView ;
59+ private $ user1 ;
60+ private $ user2 ;
5761
5862 public static function setUpBeforeClass () {
5963 parent ::setUpBeforeClass ();
@@ -102,6 +106,13 @@ protected function setUp() {
102106 if (!$ this ->rootView ->file_exists (self ::USERS_VERSIONS_ROOT )) {
103107 $ this ->rootView ->mkdir (self ::USERS_VERSIONS_ROOT );
104108 }
109+
110+ $ this ->user1 = $ this ->createMock (IUser::class);
111+ $ this ->user1 ->method ('getUID ' )
112+ ->willReturn (self ::TEST_VERSIONS_USER );
113+ $ this ->user2 = $ this ->createMock (IUser::class);
114+ $ this ->user2 ->method ('getUID ' )
115+ ->willReturn (self ::TEST_VERSIONS_USER2 );
105116 }
106117
107118 protected function tearDown () {
@@ -130,7 +141,7 @@ public function testGetExpireList($versions, $sizeOfAllDeletedFiles) {
130141 $ startTime = 5000000 ;
131142
132143 $ testClass = new VersionStorageToTest ();
133- list ( $ deleted , $ size) = $ testClass ->callProtectedGetExpireList ($ startTime , $ versions );
144+ [ $ deleted , $ size] = $ testClass ->callProtectedGetExpireList ($ startTime , $ versions );
134145
135146 // we should have deleted 16 files each of the size 1
136147 $ this ->assertEquals ($ sizeOfAllDeletedFiles , $ size );
@@ -665,14 +676,56 @@ public function testRestoreNoPermission() {
665676
666677 $ firstVersion = current ($ versions );
667678
668- $ this ->assertFalse (\OCA \Files_Versions \Storage::rollback ('folder/test.txt ' , $ firstVersion ['version ' ]), 'Revert did not happen ' );
679+ $ this ->assertFalse (\OCA \Files_Versions \Storage::rollback ('folder/test.txt ' , $ firstVersion ['version ' ], $ this -> user2 ), 'Revert did not happen ' );
669680
670681 $ this ->loginAsUser (self ::TEST_VERSIONS_USER );
671682
672683 \OC ::$ server ->getShareManager ()->deleteShare ($ share );
673684 $ this ->assertEquals ('test file ' , $ file ->getContent (), 'File content has not changed ' );
674685 }
675686
687+ public function testRestoreMovedShare () {
688+ $ this ->loginAsUser (self ::TEST_VERSIONS_USER );
689+
690+ $ userHome = \OC ::$ server ->getUserFolder (self ::TEST_VERSIONS_USER );
691+ $ node = $ userHome ->newFolder ('folder ' );
692+ $ file = $ node ->newFile ('test.txt ' );
693+
694+ $ userHome2 = \OC ::$ server ->getUserFolder (self ::TEST_VERSIONS_USER2 );
695+ $ userHome2 ->newFolder ('subfolder ' );
696+
697+ $ share = \OC ::$ server ->getShareManager ()->newShare ();
698+ $ share ->setNode ($ node )
699+ ->setShareType (\OCP \Share::SHARE_TYPE_USER )
700+ ->setSharedBy (self ::TEST_VERSIONS_USER )
701+ ->setSharedWith (self ::TEST_VERSIONS_USER2 )
702+ ->setPermissions (\OCP \Constants::PERMISSION_ALL );
703+ $ share = \OC ::$ server ->getShareManager ()->createShare ($ share );
704+ $ shareManager = \OC ::$ server ->getShareManager ();
705+ $ shareManager ->acceptShare ($ share , self ::TEST_VERSIONS_USER2 );
706+
707+ $ share ->setTarget ("subfolder/folder " );
708+ $ shareManager ->moveShare ($ share , self ::TEST_VERSIONS_USER2 );
709+
710+ $ versions = $ this ->createAndCheckVersions (
711+ \OC \Files \Filesystem::getView (),
712+ 'folder/test.txt '
713+ );
714+
715+ $ file ->putContent ('test file ' );
716+
717+ $ this ->loginAsUser (self ::TEST_VERSIONS_USER2 );
718+
719+ $ firstVersion = current ($ versions );
720+
721+ $ this ->assertTrue (\OCA \Files_Versions \Storage::rollback ('folder/test.txt ' , $ firstVersion ['version ' ], $ this ->user1 ));
722+
723+ $ this ->loginAsUser (self ::TEST_VERSIONS_USER );
724+
725+ \OC ::$ server ->getShareManager ()->deleteShare ($ share );
726+ $ this ->assertEquals ('version 2 ' , $ file ->getContent (), 'File content has not changed ' );
727+ }
728+
676729 /**
677730 * @param string $hookName name of hook called
678731 * @param string $params variable to receive parameters provided by hook
@@ -733,7 +786,7 @@ private function doTestRestore() {
733786 $ params = array ();
734787 $ this ->connectMockHooks ('rollback ' , $ params );
735788
736- $ this ->assertTrue (\OCA \Files_Versions \Storage::rollback ('sub/test.txt ' , $ t2 ));
789+ $ this ->assertTrue (\OCA \Files_Versions \Storage::rollback ('sub/test.txt ' , $ t2, $ this -> user1 ));
737790 $ expectedParams = array (
738791 'path ' => '/sub/test.txt ' ,
739792 );
@@ -867,7 +920,7 @@ private function createAndCheckVersions(\OC\Files\View $view, $path) {
867920 $ this ->loginAsUser (self ::TEST_VERSIONS_USER );
868921
869922 // need to scan for the versions
870- list ( $ rootStorage ,) = $ this ->rootView ->resolvePath (self ::TEST_VERSIONS_USER . '/files_versions ' );
923+ [ $ rootStorage ,] = $ this ->rootView ->resolvePath (self ::TEST_VERSIONS_USER . '/files_versions ' );
871924 $ rootStorage ->getScanner ()->scan ('files_versions ' );
872925
873926 $ versions = \OCA \Files_Versions \Storage::getVersions (
0 commit comments