diff options
author | Ferdinand Thiessen <opensource@fthiessen.de> | 2023-10-30 00:46:32 +0100 |
---|---|---|
committer | Ferdinand Thiessen <opensource@fthiessen.de> | 2023-11-05 20:17:00 +0100 |
commit | 9cabaaee8edb2bc76f819fc4e581ea8bdd114725 (patch) | |
tree | 5b0312b115b5b7557df3da5de04f0365df857fa6 /cypress/e2e/core | |
parent | b989596726503fba5b82a830d7d3d98123e3cbeb (diff) | |
download | nextcloud-server-9cabaaee8edb2bc76f819fc4e581ea8bdd114725.tar.gz nextcloud-server-9cabaaee8edb2bc76f819fc4e581ea8bdd114725.zip |
chore(cypress): Migrate header contacts menu tests from Behat to Cypress
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Diffstat (limited to 'cypress/e2e/core')
-rw-r--r-- | cypress/e2e/core/header_contacts-menu.cy.ts | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/cypress/e2e/core/header_contacts-menu.cy.ts b/cypress/e2e/core/header_contacts-menu.cy.ts new file mode 100644 index 00000000000..d4c8ffe7b1b --- /dev/null +++ b/cypress/e2e/core/header_contacts-menu.cy.ts @@ -0,0 +1,154 @@ +/** + * @copyright Copyright (c) 2023 Ferdinand Thiessen <opensource@fthiessen.de> + * + * @author Ferdinand Thiessen <opensource@fthiessen.de> + * + * @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/>. + * + */ + +import { User } from '@nextcloud/cypress' +import { clearState, getNextcloudHeader } from '../../support/commonUtils' + +// eslint-disable-next-line n/no-extraneous-import +import randomString from 'crypto-random-string' + +const admin = new User('admin', 'admin') + +const getContactsMenu = () => getNextcloudHeader().find('#header-menu-contactsmenu') +const getContactsMenuToggle = () => getNextcloudHeader().find('#contactsmenu .header-menu__trigger') +const getContactsSearch = () => getContactsMenu().find('#contactsmenu__menu__search') + +describe('Header: Contacts menu', { testIsolation: true }, () => { + let user: User + + beforeEach(() => { + // clear user and group state + clearState() + // ensure the contacts menu is not restricted + cy.runOccCommand('config:app:set --value no core shareapi_restrict_user_enumeration_to_group') + // create a new user for testing the contacts + cy.createRandomUser().then(($user) => { + user = $user + }) + + // Given I am logged in as the admin + cy.login(admin) + cy.visit('/') + }) + + it('Other users are seen in the contacts menu', () => { + // When I open the Contacts menu + getContactsMenuToggle().click() + // I see that the Contacts menu is shown + getContactsMenu().should('exist') + // I see that the contact user in the Contacts menu is shown + getContactsMenu().contains('li.contact', user.userId).should('be.visible') + // I see that the contact "admin" in the Contacts menu is not shown + getContactsMenu().contains('li.contact', admin.userId).should('not.exist') + }) + + it('Just added users are seen in the contacts menu', () => { + // I create a new user + const newUserName = randomString(7) + // we can not use createRandomUser as it will invalidate the session + cy.runOccCommand(`user:add --password-from-env '${newUserName}'`, { env: { OC_PASS: '1234567' } }) + // I open the Contacts menu + getContactsMenuToggle().click() + // I see that the Contacts menu is shown + getContactsMenu().should('exist') + // I see that the contact user in the Contacts menu is shown + getContactsMenu().contains('li.contact', user.userId).should('be.visible') + // I see that the contact of the new user in the Contacts menu is shown + getContactsMenu().contains('li.contact', newUserName).should('be.visible') + // I see that the contact "admin" in the Contacts menu is not shown + getContactsMenu().contains('li.contact', admin.userId).should('not.exist') + }) + + it('Search for other users in the contacts menu', () => { + cy.createRandomUser().then((otherUser) => { + // Given I am logged in as the admin + cy.login(admin) + cy.visit('/') + + // I open the Contacts menu + getContactsMenuToggle().click() + // I see that the Contacts menu is shown + getContactsMenu().should('exist') + // I see that the contact user in the Contacts menu is shown + getContactsMenu().contains('li.contact', user.userId).should('be.visible') + // I see that the contact of the new user in the Contacts menu is shown + getContactsMenu().contains('li.contact', otherUser.userId).should('be.visible') + + // I see that the Contacts menu search input is shown + getContactsSearch().should('exist') + // I search for the otherUser + getContactsSearch().type(otherUser.userId) + // I see that the contact otherUser in the Contacts menu is shown + getContactsMenu().contains('li.contact', otherUser.userId).should('be.visible') + // I see that the contact user in the Contacts menu is not shown + getContactsMenu().contains('li.contact', user.userId).should('not.exist') + // I see that the contact "admin" in the Contacts menu is not shown + getContactsMenu().contains('li.contact', admin.userId).should('not.exist') + }) + }) + + it('Search for unknown users in the contacts menu', () => { + // I open the Contacts menu + getContactsMenuToggle().click() + // I see that the Contacts menu is shown + getContactsMenu().should('exist') + // I see that the contact user in the Contacts menu is shown + getContactsMenu().contains('li.contact', user.userId).should('be.visible') + + // I see that the Contacts menu search input is shown + getContactsSearch().should('exist') + // I search for an unknown user + getContactsSearch().type('surely-unknown-user') + // I see that the no results message in the Contacts menu is shown + getContactsMenu().find('ul li').should('have.length', 0) + // I see that the contact user in the Contacts menu is not shown + getContactsMenu().contains('li.contact', user.userId).should('not.exist') + // I see that the contact "admin" in the Contacts menu is not shown + getContactsMenu().contains('li.contact', admin.userId).should('not.exist') + }) + + it('Users from other groups are not seen in the contacts menu when autocompletion is restricted within the same group', () => { + // I enable restricting username autocompletion to groups + cy.runOccCommand('config:app:set --value yes core shareapi_restrict_user_enumeration_to_group') + // I open the Contacts menu + getContactsMenuToggle().click() + // I see that the Contacts menu is shown + getContactsMenu().should('exist') + // I see that the contact user in the Contacts menu is not shown + getContactsMenu().contains('li.contact', user.userId).should('not.exist') + // I see that the contact "admin" in the Contacts menu is not shown + getContactsMenu().contains('li.contact', admin.userId).should('not.exist') + + // I close the Contacts menu + getContactsMenuToggle().click() + // I disable restricting username autocompletion to groups + cy.runOccCommand('config:app:set --value no core shareapi_restrict_user_enumeration_to_group') + // I open the Contacts menu + getContactsMenuToggle().click() + // I see that the Contacts menu is shown + getContactsMenu().should('exist') + // I see that the contact user in the Contacts menu is shown + getContactsMenu().contains('li.contact', user.userId).should('be.visible') + // I see that the contact "admin" in the Contacts menu is not shown + getContactsMenu().contains('li.contact', admin.userId).should('not.exist') + }) +}) |