]> source.dussan.org Git - nextcloud-server.git/commitdiff
Return tags after rename
authorVincent Petry <pvince81@owncloud.com>
Mon, 12 Jan 2015 13:01:04 +0000 (14:01 +0100)
committerVincent Petry <pvince81@owncloud.com>
Mon, 12 Jan 2015 17:14:17 +0000 (18:14 +0100)
To make it possible for the web UI to correctly display the tag/favorite
information after a rename, this information is now returned in the
rename response

apps/files/lib/app.php
apps/files/tests/ajax_rename.php

index c21e44bff4e8ef3de2604f512b4c570b74b72b72..e1aeb4d42238108419245236992b5096316846f4 100644 (file)
@@ -104,9 +104,10 @@ class App {
                ) {
                        // successful rename
                        $meta = $this->view->getFileInfo($normalizedNewPath);
-                       $fileinfo = \OCA\Files\Helper::formatFileInfo($meta);
+                       $meta = \OCA\Files\Helper::populateTags(array($meta));
+                       $fileInfo = \OCA\Files\Helper::formatFileInfo(current($meta));
                        $result['success'] = true;
-                       $result['data'] = $fileinfo;
+                       $result['data'] = $fileInfo;
                } else {
                        // rename failed
                        $result['data'] = array(
index 1cfecf9e58c43b8a5fbd9a8a7991d09f78da3efd..2ffba19e54bedc8be44a6ebeabe05798df7678c9 100644 (file)
@@ -117,11 +117,80 @@ class Test_OC_Files_App_Rename extends \Test\TestCase {
                $this->assertEquals(18, $result['data']['size']);
                $this->assertEquals('httpd/unix-directory', $result['data']['mimetype']);
                $this->assertEquals('abcdef', $result['data']['etag']);
+               $this->assertFalse(isset($result['data']['tags']));
                $icon = \OC_Helper::mimetypeIcon('dir');
                $icon = substr($icon, 0, -3) . 'svg';
                $this->assertEquals($icon, $result['data']['icon']);
        }
 
+       /**
+        * test rename of file with tag
+        */
+       function testRenameFileWithTag() {
+               $taggerMock = $this->getMock('\OCP\ITags');
+               $taggerMock->expects($this->any())
+                       ->method('getTagsForObjects')
+                       ->with(array(123))
+                       ->will($this->returnValue(array(123 => array('tag1', 'tag2'))));
+               $tagManagerMock = $this->getMock('\OCP\ITagManager');
+               $tagManagerMock->expects($this->any())
+                       ->method('load')
+                       ->with('files')
+                       ->will($this->returnValue($taggerMock));
+               $oldTagManager = \OC::$server->query('TagManager');
+               \OC::$server->registerService('TagManager', function ($c) use ($tagManagerMock) {
+                       return $tagManagerMock;
+               });
+
+               $dir = '/';
+               $oldname = 'oldname.txt';
+               $newname = 'newname.txt';
+
+               $this->viewMock->expects($this->any())
+                       ->method('file_exists')
+                       ->with($this->anything())
+                       ->will($this->returnValueMap(array(
+                               array('/', true),
+                               array('/oldname.txt', true)
+                               )));
+
+
+               $this->viewMock->expects($this->any())
+                       ->method('getFileInfo')
+                       ->will($this->returnValue(new \OC\Files\FileInfo(
+                               '/new_name.txt',
+                               new \OC\Files\Storage\Local(array('datadir' => '/')),
+                               '/',
+                               array(
+                               'fileid' => 123,
+                               'type' => 'file',
+                               'mimetype' => 'text/plain',
+                               'mtime' => 0,
+                               'permissions' => 31,
+                               'size' => 18,
+                               'etag' => 'abcdef',
+                               'directory' => '/',
+                               'name' => 'new_name.txt',
+                       ), null)));
+
+               $result = $this->files->rename($dir, $oldname, $newname);
+
+               $this->assertTrue($result['success']);
+               $this->assertEquals(123, $result['data']['id']);
+               $this->assertEquals('new_name.txt', $result['data']['name']);
+               $this->assertEquals(18, $result['data']['size']);
+               $this->assertEquals('text/plain', $result['data']['mimetype']);
+               $this->assertEquals('abcdef', $result['data']['etag']);
+               $this->assertEquals(array('tag1', 'tag2'), $result['data']['tags']);
+               $icon = \OC_Helper::mimetypeIcon('text');
+               $icon = substr($icon, 0, -3) . 'svg';
+               $this->assertEquals($icon, $result['data']['icon']);
+
+               \OC::$server->registerService('TagManager', function ($c) use ($oldTagManager) {
+                       return $oldTagManager;
+               });
+       }
+
        /**
         * Test rename inside a folder that doesn't exist any more
         */