passbolt-styleguide
Version:
Passbolt styleguide contains common styling assets used by the different sites, plugin, etc.
285 lines (236 loc) • 9.1 kB
JavaScript
/**
* Passbolt ~ Open source password manager for teams
* Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.passbolt.com Passbolt(tm)
* @since 3.6.0
*/
import {fireEvent, render, waitFor} from "@testing-library/react";
import React from "react";
import SelectAccountRecoveryOrganizationKey from "./SelectAccountRecoveryOrganizationKey";
import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
const GENERATE_TAB_INDEX = 1;
/**
* The SelectAccountRecoveryOrganizationKeyPage component represented as a page
*/
export default class SelectAccountRecoveryOrganizationKeyPage {
/**
* Default constructor
* @param appContext An app context
* @param props Props to attach
*/
constructor(props) {
this._page = render(
<MockTranslationProvider>
<SelectAccountRecoveryOrganizationKey {...props} />
</MockTranslationProvider>
);
}
/**
* Returns the Select Account Recovery Organization Key Dialog
*/
get selectAccountRecoveryOrganizationKeyDialog() {
return this._page.container.querySelector('.organization-recover-key-dialog');
}
/**
* Returns the dialog close element
*/
get closeButton() {
return this._page.container.querySelector('.dialog-close');
}
/**
* Returns the title element
*/
get title() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .dialog-header-title');
}
/**
* Returns all the available tabs
*/
get tabs() {
return this._page.container.querySelectorAll('.organization-recover-key-dialog.dialog-wrapper .tab');
}
/**
* Get the title in the tab "Import"
*/
get imoprtKeyTitle() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .form-content.import-organization-key label[for="organization-recover-form-key"]');
}
/**
* Get the textarea in the tab "Import"
*/
get importKeyTextArea() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .form-content.import-organization-key #organization-recover-form-key');
}
/**
* Get the file input in the tab "Import"
*/
get browseInput() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .form-content.import-organization-key input[type="file"]');
}
/**
* Get the text in the pro tip box
*/
get proTipDescription() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .message.notice').textContent;
}
/**
* Get the link found in the pro tip box
*/
get proTipLink() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .message.notice a[href]');
}
/**
* Get the "Apply" button
*/
get applyButton() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .submit-wrapper button[type="submit"]');
}
/**
* Get the HTML element that holds the error message of the "Import" form
*/
get importErrorMessage() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .form-content.import-organization-key .error-message');
}
get nameField() {
return this._page.container.querySelector('#generate-organization-key-form-name');
}
get emailField() {
return this._page.container.querySelector('#generate-organization-key-form-email');
}
get algorithmField() {
return this._page.container.querySelector('#generate-organization-key-form-algorithm');
}
get keySizeField() {
return this._page.container.querySelector('#generate-organization-key-form-key-size');
}
get passphraseField() {
return this._page.container.querySelector('#generate-organization-key-form-password');
}
get showPassphraseButton() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .form-content.generate-organization-key .password-view');
}
get securityToken() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .form-content.generate-organization-key .security-token');
}
get passphraseStrength() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .form-content.generate-organization-key .password-complexity');
}
get warningImportInstead() {
return this._page.container.querySelector('#generate-organization-key-setting-overridden-banner');
}
get cancelButton() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .cancel');
}
get generateButton() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .submit-wrapper button[type="submit"]');
}
get generateTab() {
return this._page.container.querySelectorAll('.organization-recover-key-dialog.dialog-wrapper .tabs .tab a')[GENERATE_TAB_INDEX];
}
get algorithmTooltip() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .form-content.generate-organization-key [for="generate-organization-key-form-algorithm"] .tooltip .tooltip-text');
}
get keySizeTooltip() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .form-content.generate-organization-key [for="generate-organization-key-form-keySize"] .tooltip .tooltip-text');
}
get nameFieldError() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .form-content.generate-organization-key .name.error-message');
}
get emailFieldError() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .form-content.generate-organization-key .email.error-message');
}
get passphraseFieldError() {
return this._page.container.querySelector('.organization-recover-key-dialog.dialog-wrapper .form-content.generate-organization-key .password.error-message');
}
/**
* Returns the password warning mesage input element
*/
get passwordWarningMessage() {
return this._page.container.querySelector('.password.warning-message');
}
/**
* Returns true if the page object exists in the container
*/
exists() {
return this.selectAccountRecoveryOrganizationKeyDialog !== null;
}
/**
* Returns true if the current selected tab is the "Import" one
* @returns bool
*/
isImportKeyTabSelected() {
return this._page.container.querySelector(".organization-recover-key-dialog.dialog-wrapper .tabs-active-content form .import-organization-key") !== null;
}
/**
* Returns true if the current selected tab is the "Generate" one
* @returns bool
*/
isGenerateTabSeletect() {
return this._page.container.querySelector(".organization-recover-key-dialog.dialog-wrapper .tabs-active-content .generate-organization-key") !== null;
}
/**
* Return true if the given field is marked as required
* @return bool
*/
isFieldRequired(field) {
return field.className.indexOf("required") !== -1;
}
/**
* Simulates a user having selected a file from the OS.
*
* @param {string} fileContent
* @param {function} waitForCallback
*/
async userHasSelectedAFile(fileContent, waitForCallback) {
fireEvent.change(this.browseInput, {
target: {
files: [new File([fileContent], 'file.txt', {type: 'plain/text'})],
},
});
await waitFor(waitForCallback);
}
/**
* Simulates a click on the "Apply" button
* @param {function} waitForCallback
*/
async applyChanges(waitForCallback) {
const leftClick = {button: 0};
fireEvent.click(this.applyButton, leftClick);
await waitFor(waitForCallback);
}
async clickOnGenerateTab(waitForCallback) {
const leftClick = {button: 0};
fireEvent.click(this.generateTab, leftClick);
await waitFor(waitForCallback);
}
async toggleShowPassword(waitForCallback) {
const leftClick = {button: 0};
fireEvent.click(this.showPassphraseButton, leftClick);
await waitFor(waitForCallback);
}
async clickOnGenerateButton(waitForCallback) {
const leftClick = {button: 0};
fireEvent.click(this.generateButton, leftClick);
await waitFor(waitForCallback);
}
async type(text, element) {
fireEvent.input(element, {
target: {
value: text
}
});
await waitFor(() => {
if (element.value !== text) {
throw new Error("The field has not changed yet.");
}
});
jest.runAllTimers();
}
}