Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cypress/e2e/files/FilesUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,8 +260,8 @@ export function renameFile(fileName: string, newFileName: string) {
// intercept the move so we can wait for it
cy.intercept('MOVE', /\/(remote|public)\.php\/dav\/files\//).as('moveFile')

getRowForFile(fileName)
.find('[data-cy-files-list-row-name] input')
// Fresh top-level query avoids stale DOM when Vue re-renders the row after triggering rename
cy.get('[data-cy-files-list-row-name] input')
.type(`{selectAll}${newFileName}{enter}`)

cy.wait('@moveFile')
Expand Down
45 changes: 18 additions & 27 deletions cypress/e2e/files/files-renaming.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ describe('files: Rename nodes', { testIsolation: true }, () => {

triggerActionForFile('file.txt', 'rename')

getRowForFile('file.txt')
.findByRole('textbox', { name: 'Filename' })
cy.findByRole('textbox', { name: 'Filename' })
.should('be.visible')
.type('{selectAll}other.txt')
cy.findByRole('textbox', { name: 'Filename' })
.should(haveValidity(''))
.type('{enter}')

Expand All @@ -52,8 +52,7 @@ describe('files: Rename nodes', { testIsolation: true }, () => {

triggerActionForFile('file.txt', 'rename')

getRowForFile('file.txt')
.findByRole('textbox', { name: 'Filename' })
cy.findByRole('textbox', { name: 'Filename' })
.should('be.visible')
.should((el) => {
const input = el.get(0) as HTMLInputElement
Expand All @@ -68,11 +67,11 @@ describe('files: Rename nodes', { testIsolation: true }, () => {

triggerActionForFile('file.txt', 'rename')

getRowForFile('file.txt')
.findByRole('textbox', { name: 'Filename' })
cy.findByRole('textbox', { name: 'Filename' })
.should('be.visible')
.type('{selectAll}.htaccess')
// See validity
// See validity
cy.findByRole('textbox', { name: 'Filename' })
.should(haveValidity(/reserved name/i))
})

Expand All @@ -96,8 +95,7 @@ describe('files: Rename nodes', { testIsolation: true }, () => {

// Start the renaming
triggerActionForFile('file.txt', 'rename')
getRowForFile('file.txt')
.findByRole('textbox', { name: 'Filename' })
cy.findByRole('textbox', { name: 'Filename' })
.should('be.visible')
.type('{selectAll}new-name.txt{enter}')

Expand Down Expand Up @@ -132,10 +130,10 @@ describe('files: Rename nodes', { testIsolation: true }, () => {

triggerActionForFile('file.txt', 'rename')

getRowForFile('file.txt')
.findByRole('textbox', { name: 'Filename' })
cy.findByRole('textbox', { name: 'Filename' })
.should('be.visible')
.type('{selectAll}other.txt')
cy.findByRole('textbox', { name: 'Filename' })
.should(haveValidity(''))
.type('{esc}')

Expand All @@ -153,8 +151,7 @@ describe('files: Rename nodes', { testIsolation: true }, () => {

triggerActionForFile('file.txt', 'rename')

getRowForFile('file.txt')
.findByRole('textbox', { name: 'Filename' })
cy.findByRole('textbox', { name: 'Filename' })
.should('be.visible')
.type('{enter}')

Expand Down Expand Up @@ -206,11 +203,9 @@ describe('files: Rename nodes', { testIsolation: true }, () => {
getRowForFile('file.txt').should('be.visible')

triggerActionForFile('file.txt', 'rename')
getRowForFile('file.txt')
.findByRole('textbox', { name: 'Filename' })
cy.findByRole('textbox', { name: 'Filename' })
.should('be.visible')
.type('{selectAll}file.md')
.type('{enter}')
.type('{selectAll}file.md{enter}')

// See warning dialog
cy.findByRole('dialog', { name: 'Change file extension' })
Expand All @@ -226,11 +221,9 @@ describe('files: Rename nodes', { testIsolation: true }, () => {
getRowForFile('file.txt').should('be.visible')

triggerActionForFile('file.txt', 'rename')
getRowForFile('file.txt')
.findByRole('textbox', { name: 'Filename' })
cy.findByRole('textbox', { name: 'Filename' })
.should('be.visible')
.type('{selectAll}document.md')
.type('{enter}')
.type('{selectAll}document.md{enter}')

// See warning dialog
cy.findByRole('dialog', { name: 'Change file extension' })
Expand All @@ -246,11 +239,9 @@ describe('files: Rename nodes', { testIsolation: true }, () => {
getRowForFile('file.txt').should('be.visible')

triggerActionForFile('file.txt', 'rename')
getRowForFile('file.txt')
.findByRole('textbox', { name: 'Filename' })
cy.findByRole('textbox', { name: 'Filename' })
.should('be.visible')
.type('{selectAll}file')
.type('{enter}')
.type('{selectAll}file{enter}')

cy.findByRole('dialog', { name: 'Change file extension' })
.should('be.visible')
Expand All @@ -272,10 +263,10 @@ describe('files: Rename nodes', { testIsolation: true }, () => {
getRowForFile('folder.2024').should('be.visible')

triggerActionForFile('folder.2024', 'rename')
getRowForFile('folder.2024')
.findByRole('textbox', { name: 'Folder name' })
cy.findByRole('textbox', { name: 'Folder name' })
.should('be.visible')
.type('{selectAll}folder.2025')
cy.findByRole('textbox', { name: 'Folder name' })
.should(haveValidity(''))
.type('{enter}')

Expand Down
17 changes: 8 additions & 9 deletions cypress/e2e/files_versions/filesVersionsUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,21 @@ export function openVersionsPanel(fileName: string) {
cy.intercept('PROPFIND', '**/dav/versions/*/versions/**').as('getVersions')

triggerActionForFile(basename(fileName), 'details')
cy.get('[data-cy-sidebar]')
.as('sidebar')
.should('be.visible')
cy.get('@sidebar')
.find('[aria-controls="tab-files_versions"]')
.click()
cy.get('[data-cy-sidebar]').should('be.visible')
// Fresh query for the tab button avoids stale DOM if the sidebar re-renders after opening
cy.get('[data-cy-sidebar] [aria-controls="tab-files_versions"]').click()

// Wait for the versions list to be fetched
// Wait for the versions list to be fetched and rendered
cy.wait('@getVersions')
cy.get('#tab-files_versions').should('be.visible', { timeout: 10000 })
cy.get('#tab-files_versions [data-files-versions-version]').should('have.length.at.least', 1)
}

export function toggleVersionMenu(index: number) {
cy.get('#tab-files_versions [data-files-versions-version]')
// Query the button directly in a single selector to avoid stale DOM from chaining
// .find('button') off a .eq() result when the versions list re-renders
cy.get('#tab-files_versions [data-files-versions-version] button')
.eq(index)
.find('button')
.click()
}

Expand Down
1 change: 1 addition & 0 deletions tests/lib/Files/Cache/CacheTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -800,6 +800,7 @@ public function testExtended(): void {

$entries = $this->cache->getFolderContents('');
$this->assertCount(4, $entries);
usort($entries, fn ($a, $b) => $a->getName() <=> $b->getName());

$this->assertEquals('foo1', $entries[0]->getName());
$this->assertEquals('foo2', $entries[1]->getName());
Expand Down
Loading