3737
3838use OC \Files \Storage \Temporary ;
3939use OCP \IConfig ;
40+ use OCP \IUser ;
4041use OCP \Share \IShare ;
4142
4243/**
@@ -55,6 +56,8 @@ class VersioningTest extends \Test\TestCase {
5556 * @var \OC\Files\View
5657 */
5758 private $ rootView ;
59+ private $ user1 ;
60+ private $ user2 ;
5861
5962 public static function setUpBeforeClass (): void {
6063 parent ::setUpBeforeClass ();
@@ -102,6 +105,13 @@ protected function setUp(): void {
102105 if (!$ this ->rootView ->file_exists (self ::USERS_VERSIONS_ROOT )) {
103106 $ this ->rootView ->mkdir (self ::USERS_VERSIONS_ROOT );
104107 }
108+
109+ $ this ->user1 = $ this ->createMock (IUser::class);
110+ $ this ->user1 ->method ('getUID ' )
111+ ->willReturn (self ::TEST_VERSIONS_USER );
112+ $ this ->user2 = $ this ->createMock (IUser::class);
113+ $ this ->user2 ->method ('getUID ' )
114+ ->willReturn (self ::TEST_VERSIONS_USER2 );
105115 }
106116
107117 protected function tearDown (): void {
@@ -130,7 +140,7 @@ public function testGetExpireList($versions, $sizeOfAllDeletedFiles) {
130140 $ startTime = 5000000 ;
131141
132142 $ testClass = new VersionStorageToTest ();
133- list ( $ deleted , $ size) = $ testClass ->callProtectedGetExpireList ($ startTime , $ versions );
143+ [ $ deleted , $ size] = $ testClass ->callProtectedGetExpireList ($ startTime , $ versions );
134144
135145 // we should have deleted 16 files each of the size 1
136146 $ this ->assertEquals ($ sizeOfAllDeletedFiles , $ size );
@@ -670,14 +680,56 @@ public function testRestoreNoPermission() {
670680
671681 $ firstVersion = current ($ versions );
672682
673- $ this ->assertFalse (\OCA \Files_Versions \Storage::rollback ('folder/test.txt ' , $ firstVersion ['version ' ]), 'Revert did not happen ' );
683+ $ this ->assertFalse (\OCA \Files_Versions \Storage::rollback ('folder/test.txt ' , $ firstVersion ['version ' ], $ this -> user2 ), 'Revert did not happen ' );
674684
675685 $ this ->loginAsUser (self ::TEST_VERSIONS_USER );
676686
677687 \OC ::$ server ->getShareManager ()->deleteShare ($ share );
678688 $ this ->assertEquals ('test file ' , $ file ->getContent (), 'File content has not changed ' );
679689 }
680690
691+ public function testRestoreMovedShare () {
692+ $ this ->loginAsUser (self ::TEST_VERSIONS_USER );
693+
694+ $ userHome = \OC ::$ server ->getUserFolder (self ::TEST_VERSIONS_USER );
695+ $ node = $ userHome ->newFolder ('folder ' );
696+ $ file = $ node ->newFile ('test.txt ' );
697+
698+ $ userHome2 = \OC ::$ server ->getUserFolder (self ::TEST_VERSIONS_USER2 );
699+ $ userHome2 ->newFolder ('subfolder ' );
700+
701+ $ share = \OC ::$ server ->getShareManager ()->newShare ();
702+ $ share ->setNode ($ node )
703+ ->setShareType (\OCP \Share::SHARE_TYPE_USER )
704+ ->setSharedBy (self ::TEST_VERSIONS_USER )
705+ ->setSharedWith (self ::TEST_VERSIONS_USER2 )
706+ ->setPermissions (\OCP \Constants::PERMISSION_ALL );
707+ $ share = \OC ::$ server ->getShareManager ()->createShare ($ share );
708+ $ shareManager = \OC ::$ server ->getShareManager ();
709+ $ shareManager ->acceptShare ($ share , self ::TEST_VERSIONS_USER2 );
710+
711+ $ share ->setTarget ("subfolder/folder " );
712+ $ shareManager ->moveShare ($ share , self ::TEST_VERSIONS_USER2 );
713+
714+ $ versions = $ this ->createAndCheckVersions (
715+ \OC \Files \Filesystem::getView (),
716+ 'folder/test.txt '
717+ );
718+
719+ $ file ->putContent ('test file ' );
720+
721+ $ this ->loginAsUser (self ::TEST_VERSIONS_USER2 );
722+
723+ $ firstVersion = current ($ versions );
724+
725+ $ this ->assertTrue (\OCA \Files_Versions \Storage::rollback ('folder/test.txt ' , $ firstVersion ['version ' ], $ this ->user1 ));
726+
727+ $ this ->loginAsUser (self ::TEST_VERSIONS_USER );
728+
729+ \OC ::$ server ->getShareManager ()->deleteShare ($ share );
730+ $ this ->assertEquals ('version 2 ' , $ file ->getContent (), 'File content has not changed ' );
731+ }
732+
681733 /**
682734 * @param string $hookName name of hook called
683735 * @param string $params variable to receive parameters provided by hook
@@ -738,7 +790,7 @@ private function doTestRestore() {
738790 $ params = array ();
739791 $ this ->connectMockHooks ('rollback ' , $ params );
740792
741- $ this ->assertTrue (\OCA \Files_Versions \Storage::rollback ('sub/test.txt ' , $ t2 ));
793+ $ this ->assertTrue (\OCA \Files_Versions \Storage::rollback ('sub/test.txt ' , $ t2, $ this -> user1 ));
742794 $ expectedParams = array (
743795 'path ' => '/sub/test.txt ' ,
744796 );
@@ -873,7 +925,7 @@ private function createAndCheckVersions(\OC\Files\View $view, $path) {
873925 $ this ->loginAsUser (self ::TEST_VERSIONS_USER );
874926
875927 // need to scan for the versions
876- list ( $ rootStorage ,) = $ this ->rootView ->resolvePath (self ::TEST_VERSIONS_USER . '/files_versions ' );
928+ [ $ rootStorage ,] = $ this ->rootView ->resolvePath (self ::TEST_VERSIONS_USER . '/files_versions ' );
877929 $ rootStorage ->getScanner ()->scan ('files_versions ' );
878930
879931 $ versions = \OCA \Files_Versions \Storage::getVersions (
0 commit comments