UNPKG

passbolt-styleguide

Version:

Passbolt styleguide contains common styling assets used by the different sites, plugin, etc.

212 lines (173 loc) 7.87 kB
/** * 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 { v4 as uuid } from "uuid"; import { pingOneSsoSettingsEntityDto } from "./PingOneSsoSettingsEntity.test.data"; import PingOneSsoSettingsFormEntity from "./PingOneSsoSettingsFormEntity"; import PingOneSsoSettingsEntity from "./PingOneSsoSettingsEntity"; import EntityValidationError from "../abstract/entityValidationError"; import { defaultPingOneSsoSettingsDto } from "./SsoSettingsEntity.test.data"; import * as assertEntityProperty from "../../../../../test/assert/assertEntityProperty"; describe("PingOneSsoSettingsFormEntity", () => { describe("::constructor", () => { it("should create a new PingOneSsoSettingsFormEntity with valid data", () => { expect.assertions(5); const dto = defaultPingOneSsoSettingsDto(); const formEntity = new PingOneSsoSettingsFormEntity(dto); expect(formEntity.url).toStrictEqual(dto.url); expect(formEntity.environment_id).toStrictEqual(dto.environment_id); expect(formEntity.client_id).toStrictEqual(dto.client_id); expect(formEntity.client_secret).toStrictEqual(dto.client_secret); expect(formEntity.email_claim).toStrictEqual(dto.email_claim); }); it("should throw if required fields are missing", () => { expect.assertions(1); expect(() => new PingOneSsoSettingsFormEntity({})).toThrow(EntityValidationError); }); it("should create a new PingOneSsoSettingsFormEntity with an id", () => { expect.assertions(1); const id = uuid(); const dto = defaultPingOneSsoSettingsDto({ id }); const formEntity = new PingOneSsoSettingsFormEntity(dto); expect(formEntity.id).toStrictEqual(id); }); it("should not throw without validation", () => { expect.assertions(1); expect(() => new PingOneSsoSettingsFormEntity({}, { validate: false })).not.toThrow(); }); }); describe("::ENTITY_NAME", () => { it("should return the entity name", () => { expect.assertions(1); expect(PingOneSsoSettingsFormEntity.ENTITY_NAME).toStrictEqual("PingOneSsoSettingsForm"); }); }); describe("::SCOPE", () => { it("should return the scope", () => { expect.assertions(1); expect(PingOneSsoSettingsFormEntity.SCOPE).toStrictEqual("openid profile email"); }); }); describe("::provider", () => { it("should return the PingOne provider id", () => { expect.assertions(1); const formEntity = new PingOneSsoSettingsFormEntity(defaultPingOneSsoSettingsDto()); expect(formEntity.provider).toStrictEqual(PingOneSsoSettingsEntity.PROVIDER_ID); }); }); describe("::toFormDto", () => { it("should return a flat DTO with id and all data fields", () => { expect.assertions(1); const id = uuid(); const dto = defaultPingOneSsoSettingsDto({ id }); const formEntity = new PingOneSsoSettingsFormEntity(dto); expect(formEntity.toFormDto()).toStrictEqual({ id, url: dto.url, environment_id: dto.environment_id, client_id: dto.client_id, client_secret: dto.client_secret, email_claim: dto.email_claim, }); }); }); describe("::toEntityDto", () => { it("should return a DTO with the entity format", () => { expect.assertions(1); const dto = defaultPingOneSsoSettingsDto(); const formEntity = new PingOneSsoSettingsFormEntity(dto); expect(formEntity.toEntityDto()).toStrictEqual({ provider: PingOneSsoSettingsEntity.PROVIDER_ID, data: { url: dto.url, environment_id: dto.environment_id, client_id: dto.client_id, client_secret: dto.client_secret, email_claim: dto.email_claim, }, }); }); }); describe("::fromEntityDto", () => { it("should create a PingOneSsoSettingsFormEntity from an entity DTO", () => { expect.assertions(6); const apiDto = pingOneSsoSettingsEntityDto(); const formEntity = PingOneSsoSettingsFormEntity.fromEntityDto(apiDto); expect(formEntity.id).toStrictEqual(apiDto.id); expect(formEntity.url).toStrictEqual(apiDto.data.url); expect(formEntity.environment_id).toStrictEqual(apiDto.data.environment_id); expect(formEntity.client_id).toStrictEqual(apiDto.data.client_id); expect(formEntity.client_secret).toStrictEqual(apiDto.data.client_secret); expect(formEntity.email_claim).toStrictEqual(apiDto.data.email_claim); }); }); describe("::createDefault", () => { it("should create a PingOneSsoSettingsFormEntity without validation", () => { expect.assertions(1); expect(() => PingOneSsoSettingsFormEntity.createDefault()).not.toThrow(); }); it("should accept default config values", () => { expect.assertions(2); const formEntity = PingOneSsoSettingsFormEntity.createDefault({ url: "https://auth.pingone.eu", email_claim: "email", }); expect(formEntity.url).toStrictEqual("https://auth.pingone.eu"); expect(formEntity.email_claim).toStrictEqual("email"); }); }); describe("::getSchema", () => { it("validates environment_id property", () => { assertEntityProperty.string(PingOneSsoSettingsFormEntity, "environment_id"); assertEntityProperty.minLength(PingOneSsoSettingsFormEntity, "environment_id", 1); assertEntityProperty.required(PingOneSsoSettingsFormEntity, "environment_id"); }); it("validates url property", () => { assertEntityProperty.string(PingOneSsoSettingsFormEntity, "url"); assertEntityProperty.enumeration(PingOneSsoSettingsFormEntity, "url", PingOneSsoSettingsEntity.SUPPORTED_URLS, [ "https://auth.pingone.de", "https://login.microsoftonline.com", "https://accounts.google.com", "http://auth.pingone.com", "not a url", "", ]); assertEntityProperty.required(PingOneSsoSettingsFormEntity, "url"); }); it("validates client_id property", () => { assertEntityProperty.string(PingOneSsoSettingsFormEntity, "client_id"); assertEntityProperty.minLength(PingOneSsoSettingsFormEntity, "client_id", 1); assertEntityProperty.required(PingOneSsoSettingsFormEntity, "client_id"); }); it("validates client_secret property", () => { assertEntityProperty.string(PingOneSsoSettingsFormEntity, "client_secret"); assertEntityProperty.minLength(PingOneSsoSettingsFormEntity, "client_secret", 1); assertEntityProperty.required(PingOneSsoSettingsFormEntity, "client_secret"); }); it("validates email_claim property", () => { assertEntityProperty.string(PingOneSsoSettingsFormEntity, "email_claim"); assertEntityProperty.minLength(PingOneSsoSettingsFormEntity, "email_claim", 1); assertEntityProperty.required(PingOneSsoSettingsFormEntity, "email_claim"); }); }); describe("::validate", () => { it("should return an empty EntityValidationError when data is valid", () => { expect.assertions(2); const dto = defaultPingOneSsoSettingsDto(); const formEntity = new PingOneSsoSettingsFormEntity(dto); const result = formEntity.validate(); expect(result).toBeInstanceOf(EntityValidationError); expect(result.hasErrors()).toStrictEqual(false); }); }); });