aboutsummaryrefslogtreecommitdiffstats
path: root/cypress/support/component.ts
diff options
context:
space:
mode:
Diffstat (limited to 'cypress/support/component.ts')
-rw-r--r--cypress/support/component.ts94
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))
})
})