/** * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ import type { User } from '@nextcloud/cypress' import { getRowForFile, navigateToFolder } from './FilesUtils' import { FilesNavigationPage } from '../../pages/FilesNavigation' import { FilesFilterPage } from '../../pages/FilesFilters' describe('files: Filter in files list', { testIsolation: true }, () => { const appNavigation = new FilesNavigationPage() const filesFilters = new FilesFilterPage() let user: User beforeEach(() => cy.createRandomUser().then(($user) => { user = $user cy.mkdir(user, '/folder') cy.uploadContent(user, new Blob([]), 'text/plain', '/file.txt') cy.uploadContent(user, new Blob([]), 'text/csv', '/spreadsheet.csv') cy.uploadContent(user, new Blob([]), 'text/plain', '/folder/text.txt') cy.login(user) cy.visit('/apps/files') })) it('filters current view by name', () => { // All are visible by default getRowForFile('folder').should('be.visible') getRowForFile('file.txt').should('be.visible') // Set up a search query appNavigation.searchInput() .type('folder') // See that only the folder is visible getRowForFile('folder').should('be.visible') getRowForFile('file.txt').should('not.exist') getRowForFile('spreadsheet.csv').should('not.exist') }) it('can reset name filter', () => { // All are visible by default getRowForFile('folder').should('be.visible') getRowForFile('file.txt').should('be.visible') // Set up a search query appNavigation.searchInput() .type('folder') // See that only the folder is visible getRowForFile('folder').should('be.visible') getRowForFile('file.txt').should('not.exist') // reset the filter appNavigation.searchInput().should('have.value', 'folder') appNavigation.searchClearButton().should('exist').click() appNavigation.searchInput().should('have.value', '') // All are visible again getRowForFile('folder').should('be.visible') getRowForFile('file.txt').should('be.visible') }) it('filters current view by type', () => { // All are visible by default getRowForFile('folder').should('be.visible') getRowForFile('file.txt').should('be.visible') getRowForFile('spreadsheet.csv').should('be.visible') filesFilters.filterContainter() .findByRole('button', { name: 'Type' }) .should('be.visible') .click() cy.findByRole('menuitemcheckbox', { name: 'Spreadsheets' }) .should('be.visible') .click() filesFilters.filterContainter() .findByRole('button', { name: 'Type' }) .should('be.visible') .click() // See that only the spreadsheet is visible getRowForFile('spreadsheet.csv').should('be.visible') getRowForFile('file.txt').should('not.exist') getRowForFile('folder').should('not.exist') }) it('can reset filter by type', () => { // All are visible by default getRowForFile('folder').should('be.visible') filesFilters.filterContainter() .findByRole('button', { name: 'Type' }) .should('be.visible') .click() cy.findByRole('menuitemcheckbox', { name: 'Spreadsheets' }) .should('be.visible') .click() filesFilters.filterContainter() .findByRole('button', { name: 'Type' }) .should('be.visible') .click() // See folder is not visible getRowForFile('folder').should('not.exist') // clear filter filesFilters.filterContainter() .findByRole('button', { name: 'Type' }) .should('be.visible') .click() cy.findByRole('menuitem', { name: /clear filter/i }) .should('be.visible') .click() filesFilters.filterContainter() .findByRole('button', { name: 'Type' }) .should('be.visible') .click() // See folder is visible again getRowForFile('folder').should('be.visible') }) it('can reset filter by clicking chip button', () => { // All are visible by default getRowForFile('folder').should('be.visible') filesFilters.filterContainter() .findByRole('button', { name: 'Type' }) .should('be.visible') .click() cy.findByRole('menuitemcheckbox', { name: 'Spreadsheets' }) .should('be.visible') .click() filesFilters.filterContainter() .findByRole('button', { name: 'Type' }) .should('be.visible') .click() // See folder is not visible getRowForFile('folder').should('not.exist') // clear filter filesFilters.removeFilter('Spreadsheets') // See folder is visible again getRowForFile('folder').should('be.visible') }) it('keeps name filter when changing the directory', () => { // All are visible by default getRowForFile('folder').should('be.visible') getRowForFile('file.txt').should('be.visible') // Set up a search query appNavigation.searchInput() .type('folder') // See that only the folder is visible getRowForFile('folder').should('be.visible') getRowForFile('file.txt').should('not.exist') // go to that folder navigateToFolder('folder') // see that the folder is also filtered getRowForFile('text.txt').should('not.exist') }) it('keeps type filter when changing the directory', () => { // All are visible by default getRowForFile('folder').should('be.visible') getRowForFile('file.txt').should('be.visible') filesFilters.filterContainter() .findByRole('button', { name: 'Type' }) .should('be.visible') .click() cy.findByRole('menuitemcheckbox', { name: 'Folders' }) .should('be.visible') .click() filesFilters.filterContainter() .findByRole('button', { name: 'Type' }) .click() // See that only the folder is visible getRowForFile('folder').should('be.visible') getRowForFile('file.txt').should('not.exist') // see filter is active filesFilters.activeFilters().contains(/Folder/).should('be.visible') // go to that folder navigateToFolder('folder') // see filter is still active filesFilters.activeFilters().contains(/Folder/).should('be.visible') // see that the folder is filtered getRowForFile('text.txt').should('not.exist') }) it('resets filter when changing the view', () => { // All are visible by default getRowForFile('folder').should('be.visible') getRowForFile('file.txt').should('be.visible') // Set up a search query appNavigation.searchInput() .type('folder') // See that only the folder is visible getRowForFile('folder').should('be.visible') getRowForFile('file.txt').should('not.exist') // go to other view appNavigation.views() .findByRole('link', { name: /Personal Files/i }) .click() // wait for view changed cy.url().should('match', /apps\/files\/personal/) // see that the folder is not filtered getRowForFile('folder').should('be.visible') getRowForFile('file.txt').should('be.visible') // see the filter bar is gone appNavigation.searchInput().should('have.value', '') }) })