passbolt-styleguide
Version:
Passbolt styleguide contains common styling assets used by the different sites, plugin, etc.
206 lines (168 loc) • 8.61 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.3.0
*/
import EntitySchema from "../abstract/entitySchema";
import * as assertEntityProperty from "../../../../../test/assert/assertEntityProperty";
import { SECRET_DATA_OBJECT_TYPE } from "./secretDataEntity";
import SecretDataV5StandaloneCustomFieldsCollection from "./secretDataV5StandaloneCustomFieldsCollection";
import { defaultCustomFieldsCollection } from "../customField/customFieldsCollection.test.data";
import {
defaultSecretDataV5StandaloneCustomFieldsCollectionDtos,
minimalSecretDataV5StandaloneCustomFieldsCollectionDtos,
} from "./secretDataV5StandaloneCustomFieldsCollection.test.data";
import { defaultCustomField } from "../customField/customFieldEntity.test.data";
import { v4 as uuidv4 } from "uuid";
import CustomFieldEntity from "../customField/customFieldEntity";
describe("SecretDataV5StandaloneCustomFieldsCollection", () => {
describe("::getSchema", () => {
it("schema must validate", () => {
EntitySchema.validateSchema(
SecretDataV5StandaloneCustomFieldsCollection.name,
SecretDataV5StandaloneCustomFieldsCollection.getSchema(),
);
});
it("validates object_type property", () => {
assertEntityProperty.enumeration(
SecretDataV5StandaloneCustomFieldsCollection,
"object_type",
[SECRET_DATA_OBJECT_TYPE],
["any other values"],
);
});
it("validates custom_fields property", () => {
const dto = defaultSecretDataV5StandaloneCustomFieldsCollectionDtos();
const successScenarios = [{ scenario: "valid custom fields", value: defaultCustomFieldsCollection() }];
const failScenarios = [{ scenario: "invalid header type: integer", value: 42 }];
assertEntityProperty.required(SecretDataV5StandaloneCustomFieldsCollection, "custom_fields");
assertEntityProperty.assertAssociation(
SecretDataV5StandaloneCustomFieldsCollection,
"custom_fields",
dto,
successScenarios,
failScenarios,
);
});
});
describe("::constructor", () => {
it("constructor works if minimal valid DTO is provided", () => {
expect.assertions(2);
const dto = minimalSecretDataV5StandaloneCustomFieldsCollectionDtos();
const entity = new SecretDataV5StandaloneCustomFieldsCollection(dto);
expect(entity.objectType).toStrictEqual(dto.object_type);
expect(entity._customFields).toHaveLength(0);
});
it("constructor works if valid DTO is provided", () => {
expect.assertions(6);
const dto = defaultSecretDataV5StandaloneCustomFieldsCollectionDtos();
const entity = new SecretDataV5StandaloneCustomFieldsCollection(dto);
expect(entity.objectType).toStrictEqual(dto.object_type);
expect(entity._customFields).toHaveLength(2);
expect(entity._customFields._items[0]._props.metadata_key).toStrictEqual("Key 0");
expect(entity._customFields._items[0].value).toStrictEqual("Value 0");
expect(entity._customFields._items[1]._props.metadata_key).toStrictEqual("Key 1");
expect(entity._customFields._items[1].value).toStrictEqual("Value 1");
});
});
describe("::getters", () => {
it("should return thethe customFields", () => {
expect.assertions(1);
const dto = defaultSecretDataV5StandaloneCustomFieldsCollectionDtos();
const entity = new SecretDataV5StandaloneCustomFieldsCollection(dto);
expect(entity.customFields.toDto()).toStrictEqual(dto.custom_fields);
});
});
describe("::toDto", () => {
it("should return the content of the customFields if any", () => {
expect.assertions(2);
const dto = defaultSecretDataV5StandaloneCustomFieldsCollectionDtos();
const entity = new SecretDataV5StandaloneCustomFieldsCollection(dto);
const entityDto = entity.toDto();
expect(entityDto.object_type).toStrictEqual(SECRET_DATA_OBJECT_TYPE);
expect(entityDto.custom_fields).toStrictEqual(dto.custom_fields);
});
});
describe("::createFromDefault", () => {
it("should return default data with 1 default element in the collection", () => {
expect.assertions(8);
const secret = SecretDataV5StandaloneCustomFieldsCollection.createFromDefault();
expect(secret.objectType).toStrictEqual(SECRET_DATA_OBJECT_TYPE);
expect(secret.customFields).toHaveLength(1);
expect(secret.customFields.items[0]).toBeInstanceOf(CustomFieldEntity);
const customFieldEntity = secret.customFields.items[0];
expect(customFieldEntity._props.type).toStrictEqual("text");
expect(customFieldEntity._props.metadata_key).toStrictEqual("");
expect(customFieldEntity._props.secret_value).toStrictEqual("");
expect(customFieldEntity._props.secret_key).toBeUndefined();
expect(customFieldEntity._props.metadata_value).toBeUndefined();
});
it("should return default data with the collection of the given element", () => {
expect.assertions(3);
const customFieldsCollectionDto = defaultCustomFieldsCollection();
const secret = SecretDataV5StandaloneCustomFieldsCollection.createFromDefault(customFieldsCollectionDto);
expect(secret.objectType).toStrictEqual(SECRET_DATA_OBJECT_TYPE);
expect(secret.customFields).toHaveLength(customFieldsCollectionDto.length);
expect(secret.customFields.items[0]).toBeInstanceOf(CustomFieldEntity);
});
});
describe("::getDefaultProp", () => {
it("should return nothing if the props is unknown", () => {
expect.assertions(1);
const prop = SecretDataV5StandaloneCustomFieldsCollection.getDefaultProp("test");
expect(prop).toBeUndefined();
});
it("should return an array with a single empty item", () => {
expect.assertions(7);
const customFieldsCollectionDto = SecretDataV5StandaloneCustomFieldsCollection.getDefaultProp("custom_fields");
expect(customFieldsCollectionDto).toBeInstanceOf(Array);
expect(customFieldsCollectionDto).toHaveLength(1);
const customFieldEntity = customFieldsCollectionDto[0];
expect(customFieldEntity.type).toStrictEqual("text");
expect(customFieldEntity.metadata_key).toStrictEqual("");
expect(customFieldEntity.secret_value).toStrictEqual("");
expect(customFieldEntity.secret_key).toBeUndefined();
expect(customFieldEntity.metadata_value).toBeUndefined();
});
});
describe("::areSecretsDifferent", () => {
it("should assert its parameters", () => {
expect.assertions(1);
const collection = new SecretDataV5StandaloneCustomFieldsCollection(
defaultSecretDataV5StandaloneCustomFieldsCollectionDtos(),
);
expect(() => collection.areSecretsDifferent(null)).toThrowError();
});
it("returns true if both collections have different size", () => {
expect.assertions(1);
const dtoA = defaultSecretDataV5StandaloneCustomFieldsCollectionDtos();
const dtoB = defaultSecretDataV5StandaloneCustomFieldsCollectionDtos();
dtoB.custom_fields.push(defaultCustomField());
const collectionA = new SecretDataV5StandaloneCustomFieldsCollection(dtoA);
expect(collectionA.areSecretsDifferent(dtoB)).toStrictEqual(true);
});
it("returns true if one item in the collection is different", () => {
expect.assertions(1);
const dtoA = defaultSecretDataV5StandaloneCustomFieldsCollectionDtos();
const dtoB = { ...dtoA };
dtoB.custom_fields = [...dtoA.custom_fields];
dtoB.custom_fields[1] = { ...dtoB.custom_fields[1], id: uuidv4() };
const collectionA = new SecretDataV5StandaloneCustomFieldsCollection(dtoA);
expect(collectionA.areSecretsDifferent(dtoB)).toStrictEqual(true);
});
it("returns false if collections are identical", () => {
expect.assertions(1);
const dtoA = defaultSecretDataV5StandaloneCustomFieldsCollectionDtos();
const collectionA = new SecretDataV5StandaloneCustomFieldsCollection(dtoA);
expect(collectionA.areSecretsDifferent(dtoA)).toStrictEqual(false);
});
});
});