зеркало из https://github.com/nextcloud/text.git
fix: workspace with alternative file names
Signed-off-by: Max <max@nextcloud.com>
This commit is contained in:
Родитель
7782f4ddfb
Коммит
d3315bf32a
|
@ -32,10 +32,9 @@ describe('Workspace', function() {
|
|||
|
||||
beforeEach(function() {
|
||||
cy.login(randUser, 'password')
|
||||
cy.visit('/apps/files')
|
||||
// isolate tests - each happens in it's own folder
|
||||
cy.createFolder(Cypress.currentTest.title)
|
||||
cy.openFile(Cypress.currentTest.title)
|
||||
cy.visit(`apps/files?dir=/${encodeURIComponent(Cypress.currentTest.title)}`)
|
||||
})
|
||||
|
||||
it('adds a Readme.md', function() {
|
||||
|
@ -105,6 +104,31 @@ describe('Workspace', function() {
|
|||
})
|
||||
})
|
||||
|
||||
it('takes README.md into account', function() {
|
||||
cy.uploadFile('test.md', 'text/markdown', `${Cypress.currentTest.title}/README.md`)
|
||||
cy.reload()
|
||||
cy.get('#fileList').should('contain', 'README.md')
|
||||
cy.get('#rich-workspace .ProseMirror')
|
||||
.should('contain', 'Hello world')
|
||||
})
|
||||
|
||||
it('takes localized file name into account', function() {
|
||||
cy.nextcloudUpdateUser(randUser, 'password', 'language', 'de_DE')
|
||||
cy.uploadFile('test.md', 'text/markdown', `${Cypress.currentTest.title}/Anleitung.md`)
|
||||
cy.reload()
|
||||
cy.get('#fileList').should('contain', 'Anleitung.md')
|
||||
cy.get('#rich-workspace .ProseMirror')
|
||||
.should('contain', 'Hello world')
|
||||
})
|
||||
|
||||
it('ignores localized file name in other language', function() {
|
||||
cy.nextcloudUpdateUser(randUser, 'password', 'language', 'fr')
|
||||
cy.uploadFile('test.md', 'text/markdown', `${Cypress.currentTest.title}/Anleitung.md`)
|
||||
cy.reload()
|
||||
cy.get('#fileList').should('contain', 'Anleitung.md')
|
||||
cy.get('.empty-workspace').should('contain', 'Ajoutez des notes, listes ou liens')
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
const menuButton = (name) => {
|
||||
|
|
|
@ -62,6 +62,22 @@ Cypress.Commands.add('nextcloudCreateUser', (user, password) => {
|
|||
})
|
||||
})
|
||||
|
||||
Cypress.Commands.add('nextcloudUpdateUser', (user, password, key, value) => {
|
||||
cy.request({
|
||||
method: 'PUT',
|
||||
url: `${Cypress.env('baseUrl')}/ocs/v2.php/cloud/users/${user}`,
|
||||
form: true,
|
||||
body: { key, value },
|
||||
auth: { user, pass: password },
|
||||
headers: {
|
||||
'OCS-ApiRequest': 'true',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
}
|
||||
}).then(response => {
|
||||
cy.log(`Updated user ${user} ${key} to ${value}`, response.status)
|
||||
})
|
||||
})
|
||||
|
||||
Cypress.Commands.add('nextcloudDeleteUser', (user) => {
|
||||
cy.clearCookies()
|
||||
cy.request({
|
||||
|
@ -100,11 +116,9 @@ Cypress.Commands.add('uploadFile', (fileName, mimeType, target) => {
|
|||
})
|
||||
|
||||
Cypress.Commands.add('createFolder', dirName => {
|
||||
cy.get('#controls .actions > .button.new').click()
|
||||
cy.get('#controls .actions .newFileMenu a[data-action="folder"]').click()
|
||||
cy.get('#controls .actions .newFileMenu a[data-action="folder"] input[type="text"]').type(dirName)
|
||||
cy.get('#controls .actions .newFileMenu a[data-action="folder"] input.icon-confirm').click()
|
||||
cy.log('Created folder', dirName)
|
||||
cy.window().then( win => {
|
||||
win.OC.Files.getClient().createDirectory(dirName)
|
||||
})
|
||||
})
|
||||
|
||||
Cypress.Commands.add('openFile', fileName => {
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -41,6 +41,7 @@ use Sabre\DAV\ServerPlugin;
|
|||
|
||||
class WorkspacePlugin extends ServerPlugin {
|
||||
public const WORKSPACE_PROPERTY = '{http://nextcloud.org/ns}rich-workspace';
|
||||
public const WORKSPACE_FILE_PROPERTY = '{http://nextcloud.org/ns}rich-workspace-file';
|
||||
|
||||
/** @var Server */
|
||||
private $server;
|
||||
|
@ -112,6 +113,22 @@ class WorkspacePlugin extends ServerPlugin {
|
|||
}
|
||||
return '';
|
||||
});
|
||||
$propFind->handle(self::WORKSPACE_FILE_PROPERTY, function () use ($node) {
|
||||
/** @var Folder[] $nodes */
|
||||
$nodes = $this->rootFolder->getUserFolder($this->userId)->getById($node->getId());
|
||||
if (count($nodes) > 0) {
|
||||
/** @var File $file */
|
||||
try {
|
||||
$file = $this->workspaceService->getFile($nodes[0]);
|
||||
if ($file instanceof File) {
|
||||
return $file->getFileInfo()->getName();
|
||||
}
|
||||
} catch (StorageNotAvailableException $e) {
|
||||
// If a storage is not available we can for the propfind response assume that there is no rich workspace present
|
||||
}
|
||||
}
|
||||
return '';
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -151,20 +151,42 @@ const FilesWorkspacePlugin = {
|
|||
priority: 10,
|
||||
})
|
||||
|
||||
fileList.filesClient.addFileInfoParser((_response, data) => {
|
||||
const dir = (data.mimetype === 'httpd/unix-directory')
|
||||
? data.path + (data.path.endsWith('/') ? '' : '/') + data.name
|
||||
: data.path
|
||||
if (dir !== fileList.getCurrentDirectory()) {
|
||||
return
|
||||
}
|
||||
const PROPERTY_WORKSPACE_FILE = `{${OC.Files.Client.NS_NEXTCLOUD}}rich-workspace-file`
|
||||
|
||||
const oldGetWebdavProperties = fileList._getWebdavProperties
|
||||
fileList._getWebdavProperties = function() {
|
||||
return [
|
||||
...oldGetWebdavProperties.apply(this, arguments),
|
||||
PROPERTY_WORKSPACE_FILE,
|
||||
]
|
||||
}
|
||||
|
||||
let filename = null
|
||||
|
||||
fileList.filesClient.addFileInfoParser((response, data) => {
|
||||
if (data.mimetype === 'httpd/unix-directory') {
|
||||
this.vm.folder = { ...data }
|
||||
const props = response.propStat[0].properties
|
||||
filename = props[PROPERTY_WORKSPACE_FILE]
|
||||
const dir = (data.mimetype === 'httpd/unix-directory')
|
||||
? data.path + (data.path.endsWith('/') ? '' : '/') + data.name
|
||||
: data.path
|
||||
if (dir === fileList.getCurrentDirectory()) {
|
||||
this.vm.folder = {
|
||||
...data,
|
||||
}
|
||||
}
|
||||
}
|
||||
if (data.mimetype === 'text/markdown' && data.name === 'Readme.md') {
|
||||
this.vm.file = { ...data }
|
||||
if (data.mimetype === 'text/markdown') {
|
||||
const name = filename || 'Readme.md'
|
||||
if (data.name === name) {
|
||||
this.vm.file = {
|
||||
...data,
|
||||
id: parseInt(data.id),
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
},
|
||||
|
||||
render(fileList) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче