From 80d797edf3538fb26f139b4f50fd1eec939a0a3b Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Thu, 25 Jul 2024 01:23:59 +0200 Subject: [PATCH] fix: Ensure displayname is a string Signed-off-by: Ferdinand Thiessen --- apps/files/src/services/Files.ts | 9 ++++++++- cypress/e2e/files/files_sorting.cy.ts | 25 +++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/apps/files/src/services/Files.ts b/apps/files/src/services/Files.ts index dc83f16187b25..10e553592fe24 100644 --- a/apps/files/src/services/Files.ts +++ b/apps/files/src/services/Files.ts @@ -14,7 +14,14 @@ import logger from '../logger.js' * Slim wrapper over `@nextcloud/files` `davResultToNode` to allow using the function with `Array.map` * @param node The node returned by the webdav library */ -export const resultToNode = (node: FileStat): File | Folder => davResultToNode(node) +export const resultToNode = (node: FileStat): File | Folder => { + // TODO remove this hack with nextcloud-files v3.7 + // just needed because of a bug in the webdav client + if (node.props?.displayname !== undefined) { + node.props.displayname = String(node.props.displayname) + } + return davResultToNode(node) +} export const getContents = (path = '/'): CancelablePromise => { const controller = new AbortController() diff --git a/cypress/e2e/files/files_sorting.cy.ts b/cypress/e2e/files/files_sorting.cy.ts index 925f2f7f590d8..250c5f195a60a 100644 --- a/cypress/e2e/files/files_sorting.cy.ts +++ b/cypress/e2e/files/files_sorting.cy.ts @@ -41,6 +41,31 @@ describe('Files: Sorting the file list', { testIsolation: true }, () => { }) }) + /** + * Regression test of https://github.com/nextcloud/server/issues/45829 + */ + it('Filesnames with numbers are sorted by name ascending by default', () => { + cy.uploadContent(currentUser, new Blob(), 'text/plain', '/name.txt') + .uploadContent(currentUser, new Blob(), 'text/plain', '/name_03.txt') + .uploadContent(currentUser, new Blob(), 'text/plain', '/name_02.txt') + .uploadContent(currentUser, new Blob(), 'text/plain', '/name_01.txt') + cy.login(currentUser) + cy.visit('/apps/files') + + cy.get('[data-cy-files-list-row]').each(($row, index) => { + switch (index) { + case 0: expect($row.attr('data-cy-files-list-row-name')).to.eq('name.txt') + break + case 1: expect($row.attr('data-cy-files-list-row-name')).to.eq('name_01.txt') + break + case 2: expect($row.attr('data-cy-files-list-row-name')).to.eq('name_02.txt') + break + case 3: expect($row.attr('data-cy-files-list-row-name')).to.eq('name_03.txt') + break + } + }) + }) + it('Can sort by size', () => { cy.uploadContent(currentUser, new Blob(), 'text/plain', '/1 tiny.txt') .uploadContent(currentUser, new Blob(['a'.repeat(1024)]), 'text/plain', '/z big.txt')