diff options
Diffstat (limited to 'cypress/pages/UnifiedSearch.ts')
-rw-r--r-- | cypress/pages/UnifiedSearch.ts | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/cypress/pages/UnifiedSearch.ts b/cypress/pages/UnifiedSearch.ts new file mode 100644 index 00000000000..f6e0dd2e7a7 --- /dev/null +++ b/cypress/pages/UnifiedSearch.ts @@ -0,0 +1,75 @@ +/** + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +/** + * Page object model for the UnifiedSearch + */ +export class UnifiedSearchPage { + + toggleButton() { + return cy.findByRole('button', { name: 'Unified search' }) + } + + globalSearchButton() { + return cy.findByRole('button', { name: 'Search everywhere' }) + } + + localSearchInput() { + return cy.findByRole('textbox', { name: 'Search in current app' }) + } + + globalSearchInput() { + return cy.findByRole('textbox', { name: /Search apps, files/ }) + } + + globalSearchModal() { + // TODO: Broken in library + // return cy.findByRole('dialog', { name: 'Unified search' }) + return cy.get('#unified-search') + } + + // functions + + openLocalSearch() { + this.toggleButton() + .if('visible') + .click() + + this.localSearchInput().should('exist').and('not.have.css', 'display', 'none') + } + + /** + * Type in the local search (must be open before) + * Helper because the input field is overlayed by the global-search button -> cypress thinks the input is not visible + * + * @param text The text to type + * @param options Options as for `cy.type()` + */ + typeLocalSearch(text: string, options?: Partial<Omit<Cypress.TypeOptions, 'force'>>) { + return this.localSearchInput() + .type(text, { ...options, force: true }) + } + + openGlobalSearch() { + this.toggleButton() + .if('visible').click() + + this.globalSearchButton() + .if('visible').click() + } + + closeGlobalSearch() { + this.globalSearchModal() + .findByRole('button', { name: 'Close' }) + .click() + } + + getResults(category: string | RegExp) { + return this.globalSearchModal() + .findByRole('list', { name: category }) + .findAllByRole('listitem') + } + +} |