diff options
Diffstat (limited to 'cypress/support/component.ts')
-rw-r--r-- | cypress/support/component.ts | 94 |
1 files changed, 41 insertions, 53 deletions
diff --git a/cypress/support/component.ts b/cypress/support/component.ts index be4b8c94b1b..853609bb4dd 100644 --- a/cypress/support/component.ts +++ b/cypress/support/component.ts @@ -1,57 +1,45 @@ /** - * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com> - * - * @author John Molakvoæ <skjnldsv@protonmail.com> - * - * @license AGPL-3.0-or-later - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ -import { mount } from 'cypress/vue2' - -// Augment the Cypress namespace to include type definitions for -// your custom command. -// Alternatively, can be defined in cypress/support/component.d.ts -// with a <reference path="./component" /> at the top of your spec. -declare global { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace Cypress { - interface Chainable { - mount: typeof mount - } - } -} - -// Example use: -// cy.mount(MyComponent) -Cypress.Commands.add('mount', (component, optionsOrProps) => { - let instance = null - const oldMounted = component?.mounted || false - - // Override the mounted method to expose - // the component instance to cypress - component.mounted = function() { - // eslint-disable-next-line - instance = this - if (oldMounted) { - oldMounted() - } - } - - // Expose the component with cy.get('@component') - return mount(component, optionsOrProps).then(() => { - return cy.wrap(instance).as('component') + +import '@testing-library/cypress/add-commands' +import 'cypress-axe' + +// styles +import '../../apps/theming/css/default.css' +import '../../core/css/server.css' + +/* eslint-disable */ +import { mount } from '@cypress/vue2' + +Cypress.Commands.add('mount', (component, options = {}) => { + // Setup options object + options.extensions = options.extensions || {} + options.extensions.plugins = options.extensions.plugins || [] + options.extensions.components = options.extensions.components || {} + + return mount(component, options) +}) + +Cypress.Commands.add('mockInitialState', (app: string, key: string, value: unknown) => { + cy.document().then(($document) => { + const input = $document.createElement('input') + input.setAttribute('type', 'hidden') + input.setAttribute('id', `initial-state-${app}-${key}`) + input.setAttribute('value', btoa(JSON.stringify(value))) + $document.body.appendChild(input) + }) +}) + +Cypress.Commands.add('unmockInitialState', (app?: string, key?: string) => { + cy.window().then(($window) => { + // @ts-expect-error internal value + delete $window._nc_initial_state + }) + + cy.document().then(($document) => { + $document.querySelectorAll('body > input[type="hidden"]' + (app ? `[id="initial-state-${app}-${key}"]` : '')) + .forEach((node) => $document.body.removeChild(node)) }) }) |