aboutsummaryrefslogtreecommitdiffstats
path: root/cypress
diff options
context:
space:
mode:
authorFerdinand Thiessen <opensource@fthiessen.de>2024-08-22 21:49:06 +0200
committerFerdinand Thiessen <opensource@fthiessen.de>2024-10-15 18:20:16 +0200
commitef5a9cf00d0842e8e359ddf99a3f492421f09220 (patch)
treea238354977ee2da1ad9d7c9e2ad6d93fa8280d51 /cypress
parentcd3dc1719b8e84526f2c99634f0dc8bf16380579 (diff)
downloadnextcloud-server-ef5a9cf00d0842e8e359ddf99a3f492421f09220.tar.gz
nextcloud-server-ef5a9cf00d0842e8e359ddf99a3f492421f09220.zip
fix(files): Ensure renaming state is correctly reset
Problem: Is a node is renamed and the new name is out of the current visible list of nodes the component will be recycled, this means the props will change, so when the `onRename` functions is about to reset the state the `this.source` will point to a different node. To fix this, but also to separate business logic from visual representation, the logic is moved into the renaming store and the component is only responsible for rendering. Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Diffstat (limited to 'cypress')
-rw-r--r--cypress/e2e/files/files-renaming.cy.ts30
1 files changed, 29 insertions, 1 deletions
diff --git a/cypress/e2e/files/files-renaming.cy.ts b/cypress/e2e/files/files-renaming.cy.ts
index 9ac96a398b8..77f23a00459 100644
--- a/cypress/e2e/files/files-renaming.cy.ts
+++ b/cypress/e2e/files/files-renaming.cy.ts
@@ -4,7 +4,7 @@
*/
import type { User } from '@nextcloud/cypress'
-import { getRowForFile, haveValidity, triggerActionForFile } from './FilesUtils'
+import { getRowForFile, haveValidity, renameFile, triggerActionForFile } from './FilesUtils'
describe('files: Rename nodes', { testIsolation: true }, () => {
let user: User
@@ -115,4 +115,32 @@ describe('files: Rename nodes', { testIsolation: true }, () => {
.findByRole('img', { name: 'File is loading' })
.should('not.exist')
})
+
+ /**
+ * This is a regression test of: https://github.com/nextcloud/server/issues/47438
+ * The issue was that the renaming state was not reset when the new name moved the file out of the view of the current files list
+ * due to virtual scrolling the renaming state was not changed then by the UI events (as the component was taken out of DOM before any event handling).
+ */
+ it('correctly resets renaming state', () => {
+ for (let i = 1; i <= 20; i++) {
+ cy.uploadContent(user, new Blob([]), 'text/plain', `/file${i}.txt`)
+ }
+ cy.viewport(1200, 500) // 500px is smaller then 20 * 50 which is the place that the files take up
+ cy.login(user)
+ cy.visit('/apps/files')
+
+ getRowForFile('file.txt').should('be.visible')
+ // Z so it is shown last
+ renameFile('file.txt', 'zzz.txt')
+ // not visible any longer
+ getRowForFile('zzz.txt').should('not.be.visible')
+ // scroll file list to bottom
+ cy.get('[data-cy-files-list]').scrollTo('bottom')
+ cy.screenshot()
+ // The file is no longer in rename state
+ getRowForFile('zzz.txt')
+ .should('be.visible')
+ .findByRole('textbox', { name: 'Filename' })
+ .should('not.exist')
+ })
})