passbolt-styleguide
Version:
Passbolt styleguide contains common styling assets used by the different sites, plugin, etc.
101 lines (82 loc) • 4 kB
JavaScript
/**
* Passbolt ~ Open source password manager for teams
* Copyright (c) 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) Passbolt SA (https://www.passbolt.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.passbolt.com Passbolt(tm)
* @since 5.11.0
*/
import PingOneSsoProviderFormPage from "./PingOneSsoProviderForm.test.page";
import { defaultPingOneProps } from "./SsoProviderForm.test.data";
import EntityValidationError from "../../../../../shared/models/entity/abstract/entityValidationError";
import { waitForTrue } from "../../../../../../test/utils/waitFor";
beforeEach(() => {
jest.resetAllMocks();
});
describe("PingOneSsoProviderForm", () => {
it("Should display the form", () => {
expect.assertions(6);
const page = new PingOneSsoProviderFormPage(defaultPingOneProps());
expect(page.exists()).toStrictEqual(true);
expect(page.environmentId).toBeDefined();
expect(page.clientId).toBeDefined();
expect(page.clientSecret).toBeDefined();
expect(page.emailClaim).toBeDefined();
expect(page.scope.getAttribute("disabled")).toEqual("");
});
describe("Should handle errors", () => {
const rawErrors = {
environment_id: "environment_id should not be empty",
client_id: "client_id should not be empty",
client_secret: "client_secret should not be empty",
email_claim: "email_claim should not be empty",
};
const fieldMap = {
environment_id: "environmentId",
client_id: "clientId",
client_secret: "clientSecret",
email_claim: "emailClaim",
};
it("Should show the error in the form", () => {
expect.assertions(5);
const errors = new EntityValidationError();
Object.keys(rawErrors).forEach((key) => {
errors.addError(key, "format", rawErrors[key]);
});
const props = defaultPingOneProps();
props.adminSsoContext.getErrors = jest.fn().mockImplementation(() => errors);
const page = new PingOneSsoProviderFormPage(props);
expect(props.adminSsoContext.getErrors).toHaveBeenCalledTimes(1);
expect(page.environmentIdError.textContent).toStrictEqual(rawErrors.environment_id);
expect(page.clientIdError.textContent).toStrictEqual(rawErrors.client_id);
expect(page.clientSecretError.textContent).toStrictEqual(rawErrors.client_secret);
expect(page.emailClaimError.textContent).toStrictEqual(rawErrors.email_claim);
});
describe.each(Object.keys(rawErrors))("Should focus on the right erroneous field in the form", (fieldName) => {
it(`When ${fieldName} is erroneous`, async () => {
expect.assertions(4);
const errors = new EntityValidationError();
errors.addError(fieldName, "format", "field is erroneous");
const props = defaultPingOneProps();
const page = new PingOneSsoProviderFormPage(props);
const newProps = defaultPingOneProps();
newProps.adminSsoContext.getErrors = jest.fn().mockImplementation(() => errors);
newProps.adminSsoContext.consumeFocusOnError = jest.fn().mockImplementation(() => true);
// Re-render to trigger `componentDidUpdate`
page.render(newProps);
await waitForTrue(() => page.hasActiveElement);
// `getErrors` is called 2 times in `componentDidUpdate` and in `render`
expect(newProps.adminSsoContext.getErrors).toHaveBeenCalledTimes(2);
expect(newProps.adminSsoContext.consumeFocusOnError).toHaveBeenCalledTimes(1);
const targetElement = page[fieldMap[fieldName]];
expect(targetElement).toBeDefined();
expect(page.currentActiveElement).toStrictEqual(targetElement);
});
});
});
});