From 745f8df3416bbe18228934a3c3d648205ea16b4d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2026 09:51:52 +0000 Subject: [PATCH 1/3] Chore(deps-dev): Bump eslint-plugin-cypress from 3.6.0 to 7.0.2 Bumps [eslint-plugin-cypress](https://github.com/cypress-io/eslint-plugin-cypress) from 3.6.0 to 7.0.2. - [Release notes](https://github.com/cypress-io/eslint-plugin-cypress/releases) - [Commits](https://github.com/cypress-io/eslint-plugin-cypress/compare/v3.6.0...v7.0.2) --- updated-dependencies: - dependency-name: eslint-plugin-cypress dependency-version: 7.0.2 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package-lock.json | 43 +++++++++++-------------------------------- package.json | 2 +- 2 files changed, 12 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index ddcfacc1b..91e3eb72e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -62,7 +62,7 @@ "cypress": "^16.1.1", "cypress-split": "^1.25.0", "eslint": "^10.12.0", - "eslint-plugin-cypress": "^3.6.0", + "eslint-plugin-cypress": "^7.0.2", "jest": "^29.7.0", "jest-serializer-vue": "^3.1.0", "stylelint-webpack-plugin": "^5.1.0" @@ -11735,43 +11735,22 @@ } }, "node_modules/eslint-plugin-cypress": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-3.6.0.tgz", - "integrity": "sha512-7IAMcBbTVu5LpWeZRn5a9mQ30y4hKp3AfTz+6nSD/x/7YyLMoBI6X7XjDLYI6zFvuy4Q4QVGl563AGEXGW/aSA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-7.0.2.tgz", + "integrity": "sha512-bJ46P9NYdXpqiO5Tn7rB5qQJ4r0TwFq7r9ZsOhUTK7wqF8MwinrNj6gB9Tt0xkJdKQE5FI1w3KY8VmPShje3MA==", "dev": true, "license": "MIT", "dependencies": { - "globals": "^13.20.0" + "globals": "^17.12.0" }, "peerDependencies": { - "eslint": ">=7" - } - }, - "node_modules/eslint-plugin-cypress/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-cypress/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" + "@typescript-eslint/parser": ">=8", + "eslint": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "@typescript-eslint/parser": { + "optional": true + } } }, "node_modules/eslint-plugin-jsdoc": { diff --git a/package.json b/package.json index f2804fb5d..b4a32dbb0 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "cypress": "^16.1.1", "cypress-split": "^1.25.0", "eslint": "^10.12.0", - "eslint-plugin-cypress": "^3.6.0", + "eslint-plugin-cypress": "^7.0.2", "jest": "^29.7.0", "jest-serializer-vue": "^3.1.0", "stylelint-webpack-plugin": "^5.1.0" From 74a0c4733af5f626c5b926a931e61e6a451d7e5a Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Tue, 13 Oct 2026 13:47:26 +0200 Subject: [PATCH 2/3] ci(eslint): import eslint-plugin-cypress without /flat subpath Signed-off-by: Arthur Schiwon Assisted-by: Claude Code:claude-opus-5-5 --- eslint.config.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 15395620b..7bc0a922a 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ import { recommended } from '@nextcloud/eslint-config' -import pluginCypress from 'eslint-plugin-cypress/flat' +import pluginCypress from 'eslint-plugin-cypress' export default [ ...recommended, From f7c1e39a05a8a18bd614211ce6ad639d05fdd6cf Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Tue, 13 Oct 2026 14:01:15 +0200 Subject: [PATCH 3/3] test(cypress): fix eslint-plugin-cypress errors Signed-off-by: Arthur Schiwon Assisted-by: Claude Code:claude-opus-5-5 --- cypress/e2e/boardFeatures.js | 10 ++++------ cypress/e2e/cardActions.js | 7 +++---- cypress/e2e/cardFeatures.js | 27 ++++++++++++++------------- cypress/support/commands.js | 5 +++-- 4 files changed, 24 insertions(+), 25 deletions(-) diff --git a/cypress/e2e/boardFeatures.js b/cypress/e2e/boardFeatures.js index dad8be398..9a56265e2 100644 --- a/cypress/e2e/boardFeatures.js +++ b/cypress/e2e/boardFeatures.js @@ -196,9 +196,8 @@ describe('Board title editing', function() { cy.get('button:contains("Edit board")').click() - cy.get('.board-edit form input[type=text]') - .clear() - .type(updatedTitle) + cy.get('.board-edit form input[type=text]').clear() + cy.get('.board-edit form input[type=text]').type(updatedTitle) cy.get('.board-edit form button[title="Save board"]').click() @@ -233,9 +232,8 @@ describe('Board title editing', function() { cy.get('button:contains("Edit board")').click() - cy.get('.board-edit form input[type=text]') - .clear() - .type(boardBUpdatedTitle) + cy.get('.board-edit form input[type=text]').clear() + cy.get('.board-edit form input[type=text]').type(boardBUpdatedTitle) cy.get('.board-edit form button[title="Save board"]').click() diff --git a/cypress/e2e/cardActions.js b/cypress/e2e/cardActions.js index a09f9dd2a..de0d60830 100644 --- a/cypress/e2e/cardActions.js +++ b/cypress/e2e/cardActions.js @@ -49,9 +49,7 @@ describe('Card actions', function() { const myAction = { label: 'Test action', icon: 'icon-user', - callback(card) { - console.log('Called callback', card) - }, + callback() {}, } cy.spy(myAction, 'callback').as('myAction.callback') @@ -95,7 +93,8 @@ describe('Card actions', function() { cy.get('.v-popper__popper button:contains("Move/copy card")').click() cy.get('[data-cy="select-board"] .vs__dropdown-toggle').should('be.visible').click() cy.get('.vs__dropdown-menu span[title="MyTestBoard"]').should('be.visible').click() - cy.wait(3000) // wait for select component to load stacks + // eslint-disable-next-line cypress/no-unnecessary-waiting -- wait for select component to load stacks + cy.wait(3000) cy.get('[data-cy="select-stack"] .vs__dropdown-toggle').should('be.visible').click() cy.get('.vs__dropdown-menu span[title="TestList"]').should('be.visible').click() cy.get('.modal-container button:contains("Copy card")').click() diff --git a/cypress/e2e/cardFeatures.js b/cypress/e2e/cardFeatures.js index d625dc922..a49f6460d 100644 --- a/cypress/e2e/cardFeatures.js +++ b/cypress/e2e/cardFeatures.js @@ -149,10 +149,11 @@ describe('Card', function() { cy.get('[data-cy="action:add-card"]') .first().click() - // Somehow this avoids the electron crash + // eslint-disable-next-line cypress/no-unnecessary-waiting -- somehow this avoids the electron crash cy.wait(2000) - cy.get('.modal-mask.card-selector .card-title').should('be.visible').click().type(newCardTitle) + cy.get('.modal-mask.card-selector .card-title').should('be.visible').click() + cy.get('.modal-mask.card-selector .card-title').type(newCardTitle) cy.get('.modal-mask.card-selector .multiselect-board').should('be.visible').click() cy.get('.vs__dropdown-menu [data-cy="board-select-title"]:contains("' + boardData.title + '")').should('be.visible').click() @@ -274,8 +275,8 @@ describe('Card', function() { cy.get('.modal__card').should('be.visible') cy.get('.app-sidebar-header__mainname').contains('Hello world') cy.get('.modal__card .ProseMirror h1').contains('Hello world').should('be.visible') + cy.get('.modal__card .ProseMirror h1').click() cy.get('.modal__card .ProseMirror h1') - .click() .type(' writing more text{enter}- List item{enter}with entries{enter}{enter}Paragraph') cy.wait('@save', { timeout: 7000 }) @@ -284,7 +285,8 @@ describe('Card', function() { // Scroll to the bottom to ensure all content is loaded and visible cy.get('.modal__card .app-sidebar-tabs, .modal__card .app-sidebar__tab--active').first().scrollTo('bottom', { ensureScrollable: false }) - cy.contains('.modal__card .ProseMirror p', 'Paragraph').scrollIntoView().should('be.visible') + cy.contains('.modal__card .ProseMirror p', 'Paragraph').scrollIntoView() + cy.contains('.modal__card .ProseMirror p', 'Paragraph').should('be.visible') cy.get('.modal__card .ProseMirror h1').contains('Hello world writing more text').should('be.visible') cy.get('.modal__card .ProseMirror li').eq(0).contains('List item').should('be.visible') @@ -297,14 +299,14 @@ describe('Card', function() { cy.intercept({ method: 'GET', url: '**/apps/deck/boards/*' }).as('getBoard') cy.get('.card:contains("Hello world")').should('be.visible').click() cy.get('.modal__card').should('be.visible') - cy.get('.modal__card .ProseMirror h1') - .click() - .type('{enter}/create') + cy.get('.modal__card .ProseMirror h1').click() + cy.get('.modal__card .ProseMirror h1').type('{enter}/create') cy.get('.suggestion-list__item.is-selected').should('be.visible').contains('Create a new deck card') cy.get('.suggestion-list__item.is-selected .link-picker__item').click() cy.get('.reference-picker-modal--content .reference-picker').should('be.visible') cy.get('.reference-picker-modal--content .reference-picker').contains('Create a new card') - cy.get('.reference-picker-modal--content .reference-picker .card-title').should('be.visible').click().type(newCardTitle) + cy.get('.reference-picker-modal--content .reference-picker .card-title').should('be.visible').click() + cy.get('.reference-picker-modal--content .reference-picker .card-title').type(newCardTitle) cy.get('.reference-picker-modal--content .reference-picker .multiselect-board').should('be.visible').contains(boardData.title) cy.get('.reference-picker-modal--content .reference-picker .multiselect-list').should('be.visible').contains(boardData.stacks[0].title) cy.get('.reference-picker-modal--content .reference-picker button.button-vue--primary').should('be.visible').click() @@ -314,9 +316,8 @@ describe('Card', function() { cy.visit(`/apps/deck/board/${boardId}`) cy.reload() cy.get('.board .stack').eq(0).within(() => { - cy.get(`.card:contains("${newCardTitle}")`) - .scrollIntoView({ block: 'center' }) - .should('be.visible') + cy.get(`.card:contains("${newCardTitle}")`).scrollIntoView({ block: 'center' }) + cy.get(`.card:contains("${newCardTitle}")`).should('be.visible') }) }) }) @@ -388,7 +389,7 @@ describe('Card', function() { .first().click() cy.get(`.card:contains("${newCardTitle}")`).should('be.visible').click() - // Add delay to ensure the events are bound + // eslint-disable-next-line cypress/no-unnecessary-waiting -- ensure the events are bound cy.wait(1000) cy.get('#app-sidebar-vue [data-test="tag-selector"] .vs__dropdown-toggle').should('be.visible').click() @@ -400,8 +401,8 @@ describe('Card', function() { cy.get('.vs__selected .tag:contains("Action needed")') .parent().find('button').click() + cy.get(`.card:contains("${newCardTitle}")`).scrollIntoView({ block: 'center' }) cy.get(`.card:contains("${newCardTitle}")`) - .scrollIntoView({ block: 'center' }) .find('.labels li:contains("Later")') .should('be.visible') cy.get(`.card:contains("${newCardTitle}")`).find('.labels li:contains("Action needed")') diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 9f4cf13d6..5339b83ae 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -102,10 +102,11 @@ Cypress.Commands.add('shareBoardWithUi', (query, userId = query) => { cy.get('[aria-label="Open details"]').click() cy.get('.app-sidebar').should('be.visible') - // Add delay to ensure the events are bound + // eslint-disable-next-line cypress/no-unnecessary-waiting -- ensure the events are bound cy.wait(1000) - cy.get('.select input').click().type(`${query}`) + cy.get('.select input').click() + cy.get('.select input').type(`${query}`) cy.wait('@fetchRecipients', { timeout: 7000 }) cy.get('.vs__dropdown-menu .option').first().contains(query)