UNPKG

passbolt-styleguide

Version:

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

726 lines (658 loc) 33 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 4.1.0 */ import EntitySchema from "../../entity/abstract/entitySchema"; import ResourceTypesCollection from "./resourceTypesCollection"; import { resourceTypesCollectionDto, buildDefineNumberOfResourceTypesDtos, resourceTypesV4CollectionDto, resourceTypesV5CollectionDto, } from "./resourceTypesCollection.test.data"; import { TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION, TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP, TEST_RESOURCE_TYPE_PASSWORD_STRING, TEST_RESOURCE_TYPE_TOTP, resourceTypePasswordStringDto, TEST_RESOURCE_TYPE_V5_PASSWORD_STRING, TEST_RESOURCE_TYPE_V5_DEFAULT, TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP, TEST_RESOURCE_TYPE_V5_TOTP, resourceTypePasswordAndDescriptionDto, resourceTypeTotpDto, resourceTypeV5TotpDto, resourceTypeV5DefaultDto, TEST_RESOURCE_TYPE_V5_STANDALONE_NOTE, } from "./resourceTypeEntity.test.data"; import CollectionValidationError from "../../entity/abstract/collectionValidationError"; import { v4 as uuid } from "uuid"; import { RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION_SLUG, RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP_SLUG, RESOURCE_TYPE_PASSWORD_STRING_SLUG, RESOURCE_TYPE_TOTP_SLUG, RESOURCE_TYPE_V5_CUSTOM_FIELDS_SLUG, RESOURCE_TYPE_V5_DEFAULT_SLUG, RESOURCE_TYPE_V5_DEFAULT_TOTP_SLUG, RESOURCE_TYPE_V5_PASSWORD_STRING_SLUG, RESOURCE_TYPE_V5_STANDALONE_NOTE_SLUG, RESOURCE_TYPE_V5_TOTP_SLUG, } from "./resourceTypeSchemasDefinition"; import { RESOURCE_TYPE_VERSION_4, RESOURCE_TYPE_VERSION_5 } from "../metadata/metadataTypesSettingsEntity"; describe("ResourceTypesCollection", () => { describe("::getSchema", () => { it("schema must validate", () => { EntitySchema.validateSchema(ResourceTypesCollection.name, ResourceTypesCollection.getSchema()); }); }); describe("::constructor", () => { it("constructor works if valid minimal DTO is provided", () => { expect.assertions(1); const resourceTypesDto = resourceTypesCollectionDto(); const resourceTypesCollection = new ResourceTypesCollection(resourceTypesDto); expect(resourceTypesCollection.toDto()).toEqual(resourceTypesDto); }); it("constructor works if valid DTO is provided with optional and non supported fields", () => { expect.assertions(1); const resourceTypesDto = resourceTypesCollectionDto(); const resourceTypesCollection = new ResourceTypesCollection(resourceTypesDto); expect(resourceTypesCollection.toDto()).toEqual(resourceTypesDto); }); it("constructor fails if reusing same resource type id", () => { expect.assertions(1); const resourceTypeDto = resourceTypePasswordStringDto(); const resourceTypesDto = [resourceTypeDto, resourceTypeDto]; expect(() => new ResourceTypesCollection(resourceTypesDto)).toThrow(CollectionValidationError); }); it("constructor fails if reusing same resource type slug", () => { expect.assertions(1); const resourceTypeDto1 = resourceTypePasswordStringDto(); const resourceTypeDto2 = resourceTypePasswordStringDto(); const resourceTypesDto = [resourceTypeDto1, resourceTypeDto2]; expect(() => new ResourceTypesCollection(resourceTypesDto)).toThrow(CollectionValidationError); }); it("constructor should be empty if no resource types are supported", () => { expect.assertions(1); const dto1 = resourceTypePasswordStringDto({ slug: "unsupported-slug" }); const dto2 = resourceTypePasswordStringDto({ slug: "unsupported-slug-2" }); const resourceTypesCollection = new ResourceTypesCollection([dto1, dto2]); expect(resourceTypesCollection.length).toStrictEqual(0); }); it("should, with enabling the ignore invalid option, ignore items which do not validate the build rules: must have unique slug", () => { expect.assertions(2); const resourceTypeDto1 = resourceTypePasswordStringDto(); const resourceTypeDto2 = resourceTypePasswordStringDto(); const resourceTypesDto = [resourceTypeDto1, resourceTypeDto2]; const options = { ignoreInvalidEntity: true }; const collection = new ResourceTypesCollection(resourceTypesDto, options); expect(collection).toHaveLength(1); expect(collection._items[0].toDto()).toStrictEqual(resourceTypeDto1); }); it("should, with enabling the ignore invalid option, ignore items which do not validate", () => { expect.assertions(2); const resourceTypeDto1 = resourceTypePasswordStringDto(); const resourceTypeDto2 = resourceTypePasswordStringDto({ id: "wrong-id", }); const resourceTypesDto = [resourceTypeDto1, resourceTypeDto2]; const options = { ignoreInvalidEntity: true }; const collection = new ResourceTypesCollection(resourceTypesDto, options); expect(collection).toHaveLength(1); expect(collection._items[0].toDto()).toStrictEqual(resourceTypeDto1); }); it("Check if resource type id is present or not in the collection", () => { const resourceTypesDto = resourceTypesCollectionDto(); expect.assertions(resourceTypesDto.length + 1); const resourceTypesCollection = new ResourceTypesCollection(resourceTypesDto); for (let i = 0; i < resourceTypesDto.length; i++) { expect(resourceTypesCollection.isResourceTypeIdPresent(resourceTypesDto[i].id)).toBeTruthy(); } expect(resourceTypesCollection.isResourceTypeIdPresent(uuid())).toBeFalsy(); }); }); describe("::filterByPasswordResourceTypes", () => { it("should filter the collection by resources types behaving like password.", () => { expect.assertions(9); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); resourceTypes.filterByPasswordResourceTypes(); expect(resourceTypes).toHaveLength(6); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_PASSWORD_STRING)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_PASSWORD_STRING)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_DEFAULT)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_TOTP)).toBeFalsy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_TOTP)).toBeFalsy(); }); }); describe("::filterByTOTPResourceTypes", () => { it("should filter the collection by resources types behaving like password.", () => { expect.assertions(9); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); resourceTypes.filterByTOTPResourceTypes(); expect(resourceTypes).toHaveLength(4); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_PASSWORD_STRING)).toBeFalsy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION)).toBeFalsy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_PASSWORD_STRING)).toBeFalsy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_DEFAULT)).toBeFalsy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_TOTP)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_TOTP)).toBeTruthy(); }); }); describe("::filterByResourceTypeVersion", () => { it("should filter the collection by resources types by the version 4.", () => { expect.assertions(9); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); resourceTypes.filterByResourceTypeVersion("v4"); expect(resourceTypes).toHaveLength(4); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_PASSWORD_STRING)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_PASSWORD_STRING)).toBeFalsy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_DEFAULT)).toBeFalsy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP)).toBeFalsy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_TOTP)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_TOTP)).toBeFalsy(); }); it("should filter the collection by resources types by the version 5.", () => { expect.assertions(10); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); resourceTypes.filterByResourceTypeVersion("v5"); expect(resourceTypes).toHaveLength(6); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_PASSWORD_STRING)).toBeFalsy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION)).toBeFalsy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP)).toBeFalsy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_PASSWORD_STRING)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_DEFAULT)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_TOTP)).toBeFalsy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_TOTP)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_STANDALONE_NOTE)).toBeTruthy(); }); }); describe("::getFirstById", () => { it("should get first resource types entity by id.", () => { expect.assertions(9); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_PASSWORD_STRING)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_TOTP)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_PASSWORD_STRING)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_DEFAULT)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP)).toBeTruthy(); expect(resourceTypes.getFirstById(TEST_RESOURCE_TYPE_V5_TOTP)).toBeTruthy(); expect(resourceTypes.getFirstById(uuid())).toBeFalsy(); }); }); describe("::getFirstBySlug", () => { it("should get first resource types entity by slug.", () => { expect.assertions(9); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); expect(resourceTypes.getFirstBySlug(RESOURCE_TYPE_PASSWORD_STRING_SLUG)).toBeTruthy(); expect(resourceTypes.getFirstBySlug(RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION_SLUG)).toBeTruthy(); expect(resourceTypes.getFirstBySlug(RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP_SLUG)).toBeTruthy(); expect(resourceTypes.getFirstBySlug(RESOURCE_TYPE_TOTP_SLUG)).toBeTruthy(); expect(resourceTypes.getFirstBySlug(RESOURCE_TYPE_V5_DEFAULT_SLUG)).toBeTruthy(); expect(resourceTypes.getFirstBySlug(RESOURCE_TYPE_V5_DEFAULT_TOTP_SLUG)).toBeTruthy(); expect(resourceTypes.getFirstBySlug(RESOURCE_TYPE_V5_PASSWORD_STRING_SLUG)).toBeTruthy(); expect(resourceTypes.getFirstBySlug(RESOURCE_TYPE_V5_TOTP_SLUG)).toBeTruthy(); expect(resourceTypes.getFirstBySlug("test")).toBeFalsy(); }); }); describe("::hasOneWithSlug", () => { it("should have one with slug.", () => { expect.assertions(9); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); expect(resourceTypes.hasOneWithSlug(RESOURCE_TYPE_PASSWORD_STRING_SLUG)).toBeTruthy(); expect(resourceTypes.hasOneWithSlug(RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION_SLUG)).toBeTruthy(); expect(resourceTypes.hasOneWithSlug(RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP_SLUG)).toBeTruthy(); expect(resourceTypes.hasOneWithSlug(RESOURCE_TYPE_TOTP_SLUG)).toBeTruthy(); expect(resourceTypes.hasOneWithSlug(RESOURCE_TYPE_V5_DEFAULT_SLUG)).toBeTruthy(); expect(resourceTypes.hasOneWithSlug(RESOURCE_TYPE_V5_DEFAULT_TOTP_SLUG)).toBeTruthy(); expect(resourceTypes.hasOneWithSlug(RESOURCE_TYPE_V5_PASSWORD_STRING_SLUG)).toBeTruthy(); expect(resourceTypes.hasOneWithSlug(RESOURCE_TYPE_V5_TOTP_SLUG)).toBeTruthy(); expect(resourceTypes.hasOneWithSlug("test")).toBeFalsy(); }); }); describe("::hasSomePasswordResourceTypes", () => { it("should have some password resource types.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); expect(resourceTypes.hasSomePasswordResourceTypes()).toBeTruthy(); }); it("should have some password resource types v5.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); expect(resourceTypes.hasSomePasswordResourceTypes(RESOURCE_TYPE_VERSION_5)).toBeTruthy(); }); it("should not have some password resource types.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesV5CollectionDto()); expect(resourceTypes.hasSomePasswordResourceTypes(RESOURCE_TYPE_VERSION_4)).toBeFalsy(); }); it("should not have some password resource types v5.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesV4CollectionDto()); expect(resourceTypes.hasSomePasswordResourceTypes(RESOURCE_TYPE_VERSION_5)).toBeFalsy(); }); }); describe("::hasSomeTotpResourceTypes", () => { it("should have some totp resource types.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); expect(resourceTypes.hasSomeTotpResourceTypes()).toBeTruthy(); }); it("should have some totp resource types v5.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); expect(resourceTypes.hasSomeTotpResourceTypes(RESOURCE_TYPE_VERSION_5)).toBeTruthy(); }); it("should not have some totp resource types.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesV5CollectionDto()); expect(resourceTypes.hasSomeTotpResourceTypes(RESOURCE_TYPE_VERSION_4)).toBeFalsy(); }); it("should not have some totp resource types v5.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesV4CollectionDto()); expect(resourceTypes.hasSomeTotpResourceTypes(RESOURCE_TYPE_VERSION_5)).toBeFalsy(); }); }); describe("::hasSomeCustomFieldsResourceTypes", () => { it("should not have some custom fields resource types.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); expect(resourceTypes.hasSomeCustomFieldsResourceTypes()).toBeFalsy(); }); it("should have some custom fields resource types v5.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); expect(resourceTypes.hasSomeCustomFieldsResourceTypes(RESOURCE_TYPE_VERSION_5)).toBeTruthy(); }); it("should not have some custom fields resource types.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesV5CollectionDto()); expect(resourceTypes.hasSomeCustomFieldsResourceTypes(RESOURCE_TYPE_VERSION_4)).toBeFalsy(); }); it("should not have some custom fields resource types.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesV4CollectionDto()); expect(resourceTypes.hasSomeCustomFieldsResourceTypes(RESOURCE_TYPE_VERSION_5)).toBeFalsy(); }); }); describe("::hasSomeNoteResourceTypes", () => { it("should have some note resource types.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); expect(resourceTypes.hasSomeNoteResourceTypes()).toBeTruthy(); }); it("should have some note resource types v5.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); expect(resourceTypes.hasSomeNoteResourceTypes(RESOURCE_TYPE_VERSION_5)).toBeTruthy(); }); it("should not have some note resource types.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesV5CollectionDto()); expect(resourceTypes.hasSomeNoteResourceTypes(RESOURCE_TYPE_VERSION_4)).toBeFalsy(); }); it("should not have some note resource types v5.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesV4CollectionDto()); expect(resourceTypes.hasSomeNoteResourceTypes(RESOURCE_TYPE_VERSION_5)).toBeFalsy(); }); }); describe("::hasSomeMetadataDescriptionResourceTypes", () => { it("should have some metadata description resource types.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); expect(resourceTypes.hasSomeMetadataDescriptionResourceTypes()).toBeTruthy(); }); it("should have some metadata description resource types v5.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); expect(resourceTypes.hasSomeMetadataDescriptionResourceTypes(RESOURCE_TYPE_VERSION_5)).toBeTruthy(); }); it("should not have some metadata description resource types.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesV5CollectionDto()); expect(resourceTypes.hasSomeMetadataDescriptionResourceTypes(RESOURCE_TYPE_VERSION_4)).toBeFalsy(); }); it("should not have some metadata description resource types v5.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesV4CollectionDto()); expect(resourceTypes.hasSomeMetadataDescriptionResourceTypes(RESOURCE_TYPE_VERSION_5)).toBeFalsy(); }); }); describe("::hasSomeOfVersion", () => { it("should have some v4 resource types.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesV4CollectionDto()); expect(resourceTypes.hasSomeOfVersion(RESOURCE_TYPE_VERSION_4)).toBeTruthy(); }); it("should not have some v4 resource types.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesV5CollectionDto()); expect(resourceTypes.hasSomeOfVersion(RESOURCE_TYPE_VERSION_4)).toBeFalsy(); }); it("should have some v5 resource types.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesV5CollectionDto()); expect(resourceTypes.hasSomeOfVersion(RESOURCE_TYPE_VERSION_5)).toBeTruthy(); }); it("should not have some v5 resource types.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesV4CollectionDto()); expect(resourceTypes.hasSomeOfVersion(RESOURCE_TYPE_VERSION_5)).toBeFalsy(); }); }); describe("::getResourceTypeMatchingResource", () => { it("should match v4 resource password with encrypted description for a resource with password.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { password: "", }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_4)).toStrictEqual( resourceTypeExpected, ); }); it("should match v4 resource password with encrypted description for a resource with encrypted description.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { description: "", }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_4)).toStrictEqual( resourceTypeExpected, ); }); it("should match v4 resource password with encrypted description for a resource with password and encrypted description.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { password: "", description: "", }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_4)).toStrictEqual( resourceTypeExpected, ); }); it("should match v4 resource password with encrypted description and totp for a resource with totp and encrypted description.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { totp: {}, description: "", }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_4)).toStrictEqual( resourceTypeExpected, ); }); it("should match v4 resource password with encrypted description and totp for a resource with totp and password.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { totp: {}, password: "", }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_4)).toStrictEqual( resourceTypeExpected, ); }); it("should match v4 resource password with encrypted description and totp for a resource with password with description encrypted and totp.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { totp: {}, password: "", description: "", }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_4)).toStrictEqual( resourceTypeExpected, ); }); it("should match v4 resource totp for a resource with totp.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { totp: {}, }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_TOTP_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_4)).toStrictEqual( resourceTypeExpected, ); }); it("should match nothing for a resource with totp and no resource type v4 totp.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection([ resourceTypePasswordStringDto(), resourceTypePasswordAndDescriptionDto(), resourceTypeV5TotpDto(), ]); const resourceDto = { secret: { totp: {}, }, }; expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_4)).toBeNull(); }); it("should match nothing for a resource with password and no resource type v4 password.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection([ resourceTypeTotpDto(), resourceTypeV5TotpDto(), resourceTypeV5DefaultDto(), ]); const resourceDto = { secret: { password: "", }, }; expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_4)).toBeNull(); }); it("should match v5 resource default for a resource with password.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { password: "", }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_V5_DEFAULT_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_5)).toStrictEqual( resourceTypeExpected, ); }); it("should match v5 standalone for a resource with note.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { description: "", }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_V5_STANDALONE_NOTE_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_5)).toStrictEqual( resourceTypeExpected, ); }); it("should match v5 default for a resource with password and note.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { password: "", description: "", }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_V5_DEFAULT_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_5)).toStrictEqual( resourceTypeExpected, ); }); it("should match v5 default for a resource with custom_fields and note.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { custom_fields: [{}], description: "", }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_V5_DEFAULT_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_5)).toStrictEqual( resourceTypeExpected, ); }); it("should match v5 resource default totp for a resource with totp and note.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { totp: {}, description: "", }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_V5_DEFAULT_TOTP_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_5)).toStrictEqual( resourceTypeExpected, ); }); it("should match v5 resource default totp for a resource with totp and password.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { totp: {}, password: "", }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_V5_DEFAULT_TOTP_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_5)).toStrictEqual( resourceTypeExpected, ); }); it("should match v5 resource default totp for a resource with totp and custom_fields.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { totp: {}, custom_fields: [{}], }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_V5_DEFAULT_TOTP_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_5)).toStrictEqual( resourceTypeExpected, ); }); it("should match v5 resource default totp for a resource with password with note and totp.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { totp: {}, password: "", description: "", }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_V5_DEFAULT_TOTP_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_5)).toStrictEqual( resourceTypeExpected, ); }); it("should match v5 resource totp for a resource with totp.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { totp: {}, }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_V5_TOTP_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_5)).toStrictEqual( resourceTypeExpected, ); }); it("should match v5 resource totp for a resource with totp.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection(resourceTypesCollectionDto()); const resourceDto = { secret: { custom_fields: [{}], }, }; const resourceTypeExpected = resourceTypes.getFirstBySlug(RESOURCE_TYPE_V5_CUSTOM_FIELDS_SLUG); expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_5)).toStrictEqual( resourceTypeExpected, ); }); it("should match nothing for a resource with totp and no resource type v5 totp.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection([resourceTypeTotpDto(), resourceTypeV5DefaultDto()]); const resourceDto = { secret: { totp: {}, }, }; expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_5)).toBeNull(); }); it("should match nothing for a resource with password and no resource type v5 password.", () => { expect.assertions(1); const resourceTypes = new ResourceTypesCollection([resourceTypeTotpDto(), resourceTypeV5TotpDto()]); const resourceDto = { secret: { password: "", }, }; expect(resourceTypes.getResourceTypeMatchingResource(resourceDto, RESOURCE_TYPE_VERSION_5)).toBeNull(); }); }); describe(":pushMany", () => { it("[performance] should ensure performance adding large dataset remains effective.", async () => { const count = 10_000; const dtos = buildDefineNumberOfResourceTypesDtos(count); const start = performance.now(); const collection = new ResourceTypesCollection(dtos); const time = performance.now() - start; expect(collection).toHaveLength(10); expect(time).toBeLessThan(5_000); }); }); });