Merge pull request #7792 from nextcloud/stable12-7783-fix-empty-details-view-after-renaming-a-file
[stable12] Fix empty details view after renaming a file
This commit is contained in:
commit
2fa5466b6c
|
@ -2071,7 +2071,7 @@
|
||||||
|
|
||||||
function updateInList(fileInfo) {
|
function updateInList(fileInfo) {
|
||||||
self.updateRow(tr, fileInfo);
|
self.updateRow(tr, fileInfo);
|
||||||
self._updateDetailsView(fileInfo, false);
|
self._updateDetailsView(fileInfo.name, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: too many nested blocks, move parts into functions
|
// TODO: too many nested blocks, move parts into functions
|
||||||
|
|
|
@ -589,6 +589,12 @@ describe('OCA.Files.FileList tests', function() {
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
deferredRename = $.Deferred();
|
deferredRename = $.Deferred();
|
||||||
renameStub = sinon.stub(filesClient, 'move').returns(deferredRename.promise());
|
renameStub = sinon.stub(filesClient, 'move').returns(deferredRename.promise());
|
||||||
|
|
||||||
|
for (var i = 0; i < testFiles.length; i++) {
|
||||||
|
var file = testFiles[i];
|
||||||
|
file.path = '/some/subdir';
|
||||||
|
fileList.add(file, {silent: true});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
afterEach(function() {
|
afterEach(function() {
|
||||||
renameStub.restore();
|
renameStub.restore();
|
||||||
|
@ -596,9 +602,6 @@ describe('OCA.Files.FileList tests', function() {
|
||||||
|
|
||||||
function doCancelRename() {
|
function doCancelRename() {
|
||||||
var $input;
|
var $input;
|
||||||
for (var i = 0; i < testFiles.length; i++) {
|
|
||||||
fileList.add(testFiles[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// trigger rename prompt
|
// trigger rename prompt
|
||||||
fileList.rename('One.txt');
|
fileList.rename('One.txt');
|
||||||
|
@ -613,12 +616,6 @@ describe('OCA.Files.FileList tests', function() {
|
||||||
function doRename() {
|
function doRename() {
|
||||||
var $input;
|
var $input;
|
||||||
|
|
||||||
for (var i = 0; i < testFiles.length; i++) {
|
|
||||||
var file = testFiles[i];
|
|
||||||
file.path = '/some/subdir';
|
|
||||||
fileList.add(file, {silent: true});
|
|
||||||
}
|
|
||||||
|
|
||||||
// trigger rename prompt
|
// trigger rename prompt
|
||||||
fileList.rename('One.txt');
|
fileList.rename('One.txt');
|
||||||
$input = fileList.$fileList.find('input.filename');
|
$input = fileList.$fileList.find('input.filename');
|
||||||
|
@ -654,6 +651,36 @@ describe('OCA.Files.FileList tests', function() {
|
||||||
|
|
||||||
expect(notificationStub.calledOnce).toEqual(true);
|
expect(notificationStub.calledOnce).toEqual(true);
|
||||||
});
|
});
|
||||||
|
it('Shows renamed file details if rename ajax call suceeded', function() {
|
||||||
|
fileList.showDetailsView('One.txt');
|
||||||
|
|
||||||
|
expect($('#app-sidebar').hasClass('disappear')).toEqual(false);
|
||||||
|
expect(fileList._detailsView.getFileInfo().get('id')).toEqual(1);
|
||||||
|
expect(fileList._detailsView.getFileInfo().get('name')).toEqual('One.txt');
|
||||||
|
|
||||||
|
doRename();
|
||||||
|
|
||||||
|
deferredRename.resolve(201);
|
||||||
|
|
||||||
|
expect($('#app-sidebar').hasClass('disappear')).toEqual(false);
|
||||||
|
expect(fileList._detailsView.getFileInfo().get('id')).toEqual(1);
|
||||||
|
expect(fileList._detailsView.getFileInfo().get('name')).toEqual('Tu_after_three.txt');
|
||||||
|
});
|
||||||
|
it('Shows again file details if rename ajax call failed', function() {
|
||||||
|
fileList.showDetailsView('One.txt');
|
||||||
|
|
||||||
|
expect($('#app-sidebar').hasClass('disappear')).toEqual(false);
|
||||||
|
expect(fileList._detailsView.getFileInfo().get('id')).toEqual(1);
|
||||||
|
expect(fileList._detailsView.getFileInfo().get('name')).toEqual('One.txt');
|
||||||
|
|
||||||
|
doRename();
|
||||||
|
|
||||||
|
deferredRename.reject(403);
|
||||||
|
|
||||||
|
expect($('#app-sidebar').hasClass('disappear')).toEqual(false);
|
||||||
|
expect(fileList._detailsView.getFileInfo().get('id')).toEqual(1);
|
||||||
|
expect(fileList._detailsView.getFileInfo().get('name')).toEqual('One.txt');
|
||||||
|
});
|
||||||
it('Correctly updates file link after rename', function() {
|
it('Correctly updates file link after rename', function() {
|
||||||
var $tr;
|
var $tr;
|
||||||
doRename();
|
doRename();
|
||||||
|
@ -708,10 +735,6 @@ describe('OCA.Files.FileList tests', function() {
|
||||||
it('Validates the file name', function() {
|
it('Validates the file name', function() {
|
||||||
var $input, $tr;
|
var $input, $tr;
|
||||||
|
|
||||||
for (var i = 0; i < testFiles.length; i++) {
|
|
||||||
fileList.add(testFiles[i], {silent: true});
|
|
||||||
}
|
|
||||||
|
|
||||||
// trigger rename prompt
|
// trigger rename prompt
|
||||||
fileList.rename('One.txt');
|
fileList.rename('One.txt');
|
||||||
$input = fileList.$fileList.find('input.filename');
|
$input = fileList.$fileList.find('input.filename');
|
||||||
|
|
|
@ -23,6 +23,13 @@ Feature: app-files
|
||||||
When I open the details view for "welcome.txt"
|
When I open the details view for "welcome.txt"
|
||||||
Then I see that the details view for "All files" section is open
|
Then I see that the details view for "All files" section is open
|
||||||
|
|
||||||
|
Scenario: rename a file with the details view open
|
||||||
|
Given I am logged in
|
||||||
|
And I open the details view for "welcome.txt"
|
||||||
|
When I rename "welcome.txt" to "farewell.txt"
|
||||||
|
Then I see that the file list contains a file named "farewell.txt"
|
||||||
|
And I see that the file name shown in the details view is "farewell.txt"
|
||||||
|
|
||||||
Scenario: set a password to a shared link
|
Scenario: set a password to a shared link
|
||||||
Given I am logged in
|
Given I am logged in
|
||||||
And I share the link for "welcome.txt"
|
And I share the link for "welcome.txt"
|
||||||
|
|
|
@ -77,6 +77,15 @@ class FilesAppContext implements Context, ActorAwareInterface {
|
||||||
describedAs("Current section details view in Files app");
|
describedAs("Current section details view in Files app");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Locator
|
||||||
|
*/
|
||||||
|
public static function fileNameInCurrentSectionDetailsView() {
|
||||||
|
return Locator::forThe()->css(".fileName")->
|
||||||
|
descendantOf(self::currentSectionDetailsView())->
|
||||||
|
describedAs("File name in current section details view in Files app");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Locator
|
* @return Locator
|
||||||
*/
|
*/
|
||||||
|
@ -256,6 +265,14 @@ class FilesAppContext implements Context, ActorAwareInterface {
|
||||||
describedAs("Main link for file $fileName in Files app");
|
describedAs("Main link for file $fileName in Files app");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Locator
|
||||||
|
*/
|
||||||
|
public static function renameInputForFile($fileName) {
|
||||||
|
return Locator::forThe()->css("input.filename")->descendantOf(self::rowForFile($fileName))->
|
||||||
|
describedAs("Rename input for file $fileName in Files app");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Locator
|
* @return Locator
|
||||||
*/
|
*/
|
||||||
|
@ -287,6 +304,13 @@ class FilesAppContext implements Context, ActorAwareInterface {
|
||||||
return self::fileActionsMenuItemFor("Details");
|
return self::fileActionsMenuItemFor("Details");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Locator
|
||||||
|
*/
|
||||||
|
public static function renameMenuItem() {
|
||||||
|
return self::fileActionsMenuItemFor("Rename");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Locator
|
* @return Locator
|
||||||
*/
|
*/
|
||||||
|
@ -326,6 +350,17 @@ class FilesAppContext implements Context, ActorAwareInterface {
|
||||||
$this->actor->find(self::tabHeaderInCurrentSectionDetailsViewNamed($tabName), 10)->click();
|
$this->actor->find(self::tabHeaderInCurrentSectionDetailsViewNamed($tabName), 10)->click();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Given I rename :fileName1 to :fileName2
|
||||||
|
*/
|
||||||
|
public function iRenameTo($fileName1, $fileName2) {
|
||||||
|
$this->actor->find(self::fileActionsMenuButtonForFile($fileName1), 10)->click();
|
||||||
|
|
||||||
|
$this->actor->find(self::renameMenuItem(), 2)->click();
|
||||||
|
|
||||||
|
$this->actor->find(self::renameInputForFile($fileName1), 10)->setValue($fileName2 . "\r");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Given I mark :fileName as favorite
|
* @Given I mark :fileName as favorite
|
||||||
*/
|
*/
|
||||||
|
@ -436,6 +471,13 @@ class FilesAppContext implements Context, ActorAwareInterface {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then I see that the file list contains a file named :fileName
|
||||||
|
*/
|
||||||
|
public function iSeeThatTheFileListContainsAFileNamed($fileName) {
|
||||||
|
PHPUnit_Framework_Assert::assertNotNull($this->actor->find(self::rowForFile($fileName), 10));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Then I see that :fileName is marked as favorite
|
* @Then I see that :fileName is marked as favorite
|
||||||
*/
|
*/
|
||||||
|
@ -443,6 +485,14 @@ class FilesAppContext implements Context, ActorAwareInterface {
|
||||||
PHPUnit_Framework_Assert::assertNotNull($this->actor->find(self::favoritedStateIconForFile($fileName), 10));
|
PHPUnit_Framework_Assert::assertNotNull($this->actor->find(self::favoritedStateIconForFile($fileName), 10));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then I see that the file name shown in the details view is :fileName
|
||||||
|
*/
|
||||||
|
public function iSeeThatTheFileNameShownInTheDetailsViewIs($fileName) {
|
||||||
|
PHPUnit_Framework_Assert::assertEquals(
|
||||||
|
$this->actor->find(self::fileNameInCurrentSectionDetailsView(), 10)->getText(), $fileName);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Then I see that the input field for tags in the details view is shown
|
* @Then I see that the input field for tags in the details view is shown
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue