From 5e81a9e53d03a93bb6cd99e2b677d9ae20183a86 Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Thu, 29 Jun 2023 00:08:21 +0200 Subject: [PATCH] fix: Add cypress test for changing password in the users list Signed-off-by: Ferdinand Thiessen --- cypress/e2e/settings/users.cy.ts | 82 +++++++++++++++++++++++++ cypress/support/commands.ts | 2 +- tests/acceptance/features/users.feature | 24 ++++---- 3 files changed, 95 insertions(+), 13 deletions(-) create mode 100644 cypress/e2e/settings/users.cy.ts diff --git a/cypress/e2e/settings/users.cy.ts b/cypress/e2e/settings/users.cy.ts new file mode 100644 index 00000000000..ba1f4449ea0 --- /dev/null +++ b/cypress/e2e/settings/users.cy.ts @@ -0,0 +1,82 @@ +/** + * @copyright Copyright (c) 2023 Ferdinand Thiessen + * + * @author Ferdinand Thiessen + * + * @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 . + * + */ + +import { User } from '@nextcloud/cypress' + +const admin = new User('admin', 'admin') +const jdoe = new User('jdoe', 'jdoe') + +describe('Setting: Users list', function() { + before(function() { + cy.createUser(jdoe) + cy.login(admin) + }) + + after(() => { + cy.deleteUser(jdoe) + }) + + it('Can change the password', function() { + // open the User settings + cy.visit('/settings/users') + + cy.get(`.user-list-grid .row[data-id="${jdoe.userId}"]`).within(($row) => { + // see that the list of users contains the user jdoe + cy.contains(jdoe.userId).should('exist') + // toggle the edit mode for the user jdoe + cy.get('.userActions button .icon-rename').click() + }) + + cy.get(`.user-list-grid .row[data-id="${jdoe.userId}"]`).within(($row) => { + // see that the edit mode is on + cy.wrap($row).should('have.class', 'row--editable') + // see that the password of user0 is "" + cy.get('input[type="password"]').should('exist').and('have.value', '') + // set the password for user0 to 123456 + cy.get('input[type="password"]').type('123456') + // When I set the password for user0 to 123456 + cy.get('input[type="password"]').should('have.value', '123456') + cy.get('.password button').click() + + // Ignore failure if modal is not shown + cy.once('fail', (error) => { + expect(error.name).to.equal('AssertionError') + expect(error).to.have.property('node', '.modal-container') + }) + // Make sure no confirmation modal is shown + cy.root().closest('body').find('.modal-container').then(($modal) => { + if ($modal.length > 0) { + cy.wrap($modal).find('input[type="password"]').type(admin.password) + cy.wrap($modal).find('button').contains('Confirm').click() + } + }) + + // see that the password cell for user user0 is done loading + cy.get('.user-row-text-field.icon-loading-small').should('exist') + cy.waitUntil(() => cy.get('.user-row-text-field.icon-loading-small').should('not.exist'), { timeout: 10000 }) + // password input is emptied on change + cy.get('input[type="password"]').should('have.value', '') + }) + // Success message is shown + cy.get('.toastify.toast-success').contains(/Password.+successfully.+changed/i).should('exist') + }) +}) diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts index 1a9999343d5..31e867a5caf 100644 --- a/cypress/support/commands.ts +++ b/cypress/support/commands.ts @@ -185,4 +185,4 @@ Cypress.Commands.add('resetUserTheming', (user?: User) => { Cypress.Commands.add('runOccCommand', (command: string) => { cy.exec(`docker exec --user www-data nextcloud-cypress-tests-server php ./occ ${command}`) -}) \ No newline at end of file +}) diff --git a/tests/acceptance/features/users.feature b/tests/acceptance/features/users.feature index adb48d658fd..3d223ee12cf 100644 --- a/tests/acceptance/features/users.feature +++ b/tests/acceptance/features/users.feature @@ -126,18 +126,18 @@ Feature: users # And I see that the displayName cell for user user0 is done loading # Then I see that the displayName of user0 is user1 - Scenario: change password - Given I act as Jane - And I am logged in as the admin - And I open the User settings - And I see that the list of users contains the user user0 - When I toggle the edit mode for the user user0 - Then I see that the edit mode is on for user user0 - And I see that the password of user0 is "" - When I set the password for user0 to 123456 - And I see that the password cell for user user0 is done loading - # password input is emptied on change - Then I see that the password of user0 is "" +# Scenario: change password +# Given I act as Jane +# And I am logged in as the admin +# And I open the User settings +# And I see that the list of users contains the user user0 +# When I toggle the edit mode for the user user0 +# Then I see that the edit mode is on for user user0 +# And I see that the password of user0 is "" +# When I set the password for user0 to 123456 +# And I see that the password cell for user user0 is done loading +# # password input is emptied on change +# Then I see that the password of user0 is "" # Scenario: change email # Given I act as Jane -- 2.39.5