passbolt-styleguide
Version:
Passbolt styleguide contains common styling assets used by the different sites, plugin, etc.
949 lines (835 loc) • 75.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 4.10.0
*/
import EntitySchema from "../abstract/entitySchema";
import * as assertEntityProperty from "../../../../../test/assert/assertEntityProperty";
import ResourceFormEntity from "./resourceFormEntity";
import EntityValidationError from "../abstract/entityValidationError";
import { defaultResourceFormDto } from "./resourceFormEntity.test.data";
import { defaultSecretDataV5DefaultDto } from "../secretData/secretDataV5DefaultEntity.test.data";
import { resourceTypesCollectionDto } from "../resourceType/resourceTypesCollection.test.data";
import ResourceTypesCollection from "../resourceType/resourceTypesCollection";
import {
resourceTypePasswordAndDescriptionDto,
resourceTypePasswordStringDto,
resourceTypeV5CustomFieldsDto,
resourceTypeV5DefaultDto,
resourceTypeV5DefaultTotpDto,
resourceTypeV5TotpDto,
resourceTypeV5StandaloneNoteDto,
TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION,
TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP,
TEST_RESOURCE_TYPE_PASSWORD_STRING,
TEST_RESOURCE_TYPE_TOTP,
TEST_RESOURCE_TYPE_V5_DEFAULT,
TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP,
TEST_RESOURCE_TYPE_V5_PASSWORD_STRING,
TEST_RESOURCE_TYPE_V5_TOTP,
TEST_RESOURCE_TYPE_V5_STANDALONE_NOTE,
} from "../resourceType/resourceTypeEntity.test.data";
import {
defaultSecretDataV5DefaultTotpEntityDto,
minimalSecretDataV5DefaultTotpEntityDto,
} from "../secretData/secretDataV5DefaultTotpEntity.test.data";
import { defaultTotpDto } from "../totp/totpDto.test.data";
import {
defaultSecretDataV5PasswordStringDto,
minimalDefaultSecretDataV5PasswordStringDto,
} from "../secretData/secretDataV5PasswordStringEntity.test.data";
import {
defaultSecretDataV4DefaultData,
minimalDefaultSecretDataV4DefaultData,
} from "../secretData/secretDataV4DefaultEntity.test.data";
import {
defaultSecretDataV4DefaultTotpEntityDto,
minimalSecretDataV4DefaultTotpEntityDto,
} from "../secretData/secretDataV4DefaultTotpEntity.test.data";
import SecretDataEntity, { SECRET_DATA_OBJECT_TYPE } from "../secretData/secretDataEntity";
import { ResourceEditCreateFormEnumerationTypes } from "../../resource/ResourceEditCreateFormEnumerationTypes";
import TotpEntity from "../totp/totpEntity";
import ResourceMetadataEntity from "./metadata/resourceMetadataEntity";
import { defaultResourceMetadataDto } from "./metadata/resourceMetadataEntity.test.data";
import { defaultCustomFieldsCollection } from "../customField/customFieldsCollection.test.data";
import { defaultSecretDataV5StandaloneTotpDto } from "../secretData/secretDataV5StandaloneTotpEntity.test.data";
import { defaultSecretDataV4StandaloneTotpDto } from "../secretData/secretDataV4StandaloneTotpEntity.test.data";
import { defaultSecretDataV4PasswordStringDto } from "../secretData/secretDataV4PasswordStringEntity.test.data";
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_TOTP_SLUG,
} from "../resourceType/resourceTypeSchemasDefinition";
import SecretDataV5DefaultEntity from "../secretData/secretDataV5DefaultEntity";
import SecretDataV5DefaultTotpEntity from "../secretData/secretDataV5DefaultTotpEntity";
import SecretDataV5StandaloneTotpEntity from "../secretData/secretDataV5StandaloneTotpEntity";
import SecretDataV5PasswordStringEntity from "../secretData/secretDataV5PasswordStringEntity";
import SecretDataV4DefaultEntity from "../secretData/secretDataV4DefaultEntity";
import SecretDataV4DefaultTotpEntity from "../secretData/secretDataV4DefaultTotpEntity";
import SecretDataV4StandaloneTotpEntity from "../secretData/secretDataV4StandaloneTotpEntity";
import secretDataV4PasswordStringEntity from "../secretData/secretDataV4PasswordStringEntity";
import SecretDataV5StandaloneCustomFieldsCollection from "../secretData/secretDataV5StandaloneCustomFieldsCollection";
import ResourceTypeEntity from "../resourceType/resourceTypeEntity";
import CustomFieldEntity from "../customField/customFieldEntity";
import { emptyCustomFieldDto } from "../customField/customFieldEntity.test.data";
import { defaultSecretDataV5StandaloneNoteDto } from "../secretData/secretDataV5StandaloneNoteEntity.test.data";
describe("Resource Form entity", () => {
describe("ResourceFormEntity::getSchema", () => {
it("schema must validate", () => {
EntitySchema.validateSchema(ResourceFormEntity.name, ResourceFormEntity.getSchema());
});
it("validates metadata property", () => {
const dto = defaultResourceFormDto();
const successScenarios = [{ scenario: "valid metadata object", value: defaultResourceMetadataDto() }];
const failScenarios = [{ scenario: "invalid metadata type: integer", value: 42 }];
assertEntityProperty.assertAssociation(ResourceFormEntity, "metadata", dto, successScenarios, failScenarios);
assertEntityProperty.requiredInSchema(ResourceFormEntity, "metadata");
});
it("validates secret property", () => {
const dto = defaultResourceFormDto();
const successScenarios = [
//v4
{ scenario: "valid secret: SecretDataV4DefaultEntity", value: defaultSecretDataV5DefaultDto() },
{ scenario: "valid secret: SecretDataV4DefaultTotpEntity", value: defaultSecretDataV4DefaultTotpEntityDto() },
{ scenario: "valid secret: SecretDataV4StandaloneTotpEntity", value: defaultSecretDataV4StandaloneTotpDto() },
{ scenario: "valid secret: SecretDataV4PasswordStringEntity", value: defaultSecretDataV4PasswordStringDto() },
//v5
{ scenario: "valid secret: SecretDataV5DefaultEntity", value: defaultSecretDataV5DefaultDto() },
{ scenario: "valid secret: SecretDataV5DefaultTotpEntity", value: defaultSecretDataV5DefaultTotpEntityDto() },
{ scenario: "valid secret: SecretDataV5StandaloneTotpEntity", value: defaultSecretDataV5StandaloneTotpDto() },
{ scenario: "valid secret: SecretDataV5PasswordStringEntity", value: defaultSecretDataV5PasswordStringDto() },
{
scenario: "valid secret: SecretDataV5StandaloneCustomFieldsCollection",
value: defaultCustomFieldsCollection(),
},
];
const failScenarios = [{ scenario: "invalid secret type: integer", value: 42 }];
assertEntityProperty.assertAssociation(ResourceFormEntity, "secret", dto, successScenarios, failScenarios);
assertEntityProperty.requiredInSchema(ResourceFormEntity, "secret");
});
it("validates resource_type_id property", () => {
assertEntityProperty.string(ResourceFormEntity, "resource_type_id");
assertEntityProperty.uuid(ResourceFormEntity, "resource_type_id");
assertEntityProperty.required(ResourceFormEntity, "resource_type_id");
});
});
describe("::constructor", () => {
it("constructor returns validation error if dto required fields are missing", () => {
expect.assertions(2);
try {
new ResourceFormEntity({});
} catch (error) {
expect(error instanceof EntityValidationError).toBe(true);
expect(error.details).toStrictEqual({
secret: { required: "The secret is required." },
resource_type_id: { required: "The resource_type_id is required." },
});
}
});
it("works if minimal DTO is provided for a resource v5 default", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto();
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("works if complete DTO is provided for a resource v5 default", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto({ secret: defaultSecretDataV5DefaultDto() });
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("works if minimal DTO is provided for a resource v5 default totp", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP,
secret: minimalSecretDataV5DefaultTotpEntityDto(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("works if complete DTO is provided for a resource v5 default totp", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP,
secret: defaultSecretDataV5DefaultTotpEntityDto(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("works if minimal DTO is provided for a resource v5 totp", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_V5_TOTP,
secret: { object_type: SECRET_DATA_OBJECT_TYPE, totp: defaultTotpDto() },
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("works if complete DTO is provided for a resource v5 standalone note", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_V5_STANDALONE_NOTE,
secret: defaultSecretDataV5StandaloneNoteDto(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("works if minimal DTO is provided for a resource v5 password string", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_V5_PASSWORD_STRING,
secret: minimalDefaultSecretDataV5PasswordStringDto(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("works if complete DTO is provided for a resource v5 password string", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_V5_PASSWORD_STRING,
secret: defaultSecretDataV5PasswordStringDto(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("works if minimal DTO is provided for a resource v4 default", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION,
secret: minimalDefaultSecretDataV4DefaultData({ description: "" }),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("works if complete DTO is provided for a resource v4 default", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION,
secret: defaultSecretDataV4DefaultData(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("works if minimal DTO is provided for a resource v4 default totp", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP,
secret: minimalSecretDataV4DefaultTotpEntityDto(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("works if complete DTO is provided for a resource v4 default totp", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP,
secret: defaultSecretDataV4DefaultTotpEntityDto(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("works if minimal DTO is provided for a resource v4 totp", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_TOTP,
secret: { totp: defaultTotpDto() },
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("works if minimal DTO is provided for a resource v4 password string", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_PASSWORD_STRING,
secret: { password: "password" },
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
});
describe("::getSecretEntityClassByResourceType", () => {
it("should return the right secret entity", () => {
const scenarios = [
{ slug: RESOURCE_TYPE_V5_DEFAULT_SLUG, expectation: SecretDataV5DefaultEntity },
{ slug: RESOURCE_TYPE_V5_DEFAULT_TOTP_SLUG, expectation: SecretDataV5DefaultTotpEntity },
{ slug: RESOURCE_TYPE_V5_TOTP_SLUG, expectation: SecretDataV5StandaloneTotpEntity },
{ slug: RESOURCE_TYPE_V5_PASSWORD_STRING_SLUG, expectation: SecretDataV5PasswordStringEntity },
{ slug: RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION_SLUG, expectation: SecretDataV4DefaultEntity },
{ slug: RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP_SLUG, expectation: SecretDataV4DefaultTotpEntity },
{ slug: RESOURCE_TYPE_TOTP_SLUG, expectation: SecretDataV4StandaloneTotpEntity },
{ slug: RESOURCE_TYPE_PASSWORD_STRING_SLUG, expectation: secretDataV4PasswordStringEntity },
{ slug: RESOURCE_TYPE_V5_CUSTOM_FIELDS_SLUG, expectation: SecretDataV5StandaloneCustomFieldsCollection },
{ slug: "something-else", expectation: null },
];
expect.assertions(scenarios.length);
const resourceForm = new ResourceFormEntity(defaultResourceFormDto(), { validate: false });
for (let i = 0; i < scenarios.length; i++) {
const { slug, expectation } = scenarios[i];
expect(resourceForm.getSecretEntityClassByResourceType(slug)).toStrictEqual(expectation);
}
});
});
describe("::associations", () => {
it("associations should have metadata and secret", () => {
expect.assertions(1);
expect(ResourceFormEntity.associations).toStrictEqual({
metadata: ResourceMetadataEntity,
secret: SecretDataEntity,
});
});
});
describe("::isResourceTypeHasSecretProperty", () => {
it("should return true if the entity has a password", () => {
expect.assertions(1);
const resourceForm = new ResourceFormEntity(defaultResourceFormDto(), { validate: false });
const resourceTypes = new ResourceTypeEntity(resourceTypeV5DefaultDto());
expect(resourceForm.isResourceTypeHasSecretProperty(resourceTypes, "secret.password")).toStrictEqual(true);
});
it("should return true if the entity has a totp", () => {
expect.assertions(1);
const resourceForm = new ResourceFormEntity(defaultResourceFormDto(), { validate: false });
const resourceTypes = new ResourceTypeEntity(resourceTypeV5DefaultTotpDto());
expect(resourceForm.isResourceTypeHasSecretProperty(resourceTypes, "secret.totp")).toStrictEqual(true);
});
it("should return true if the entity has a secure note", () => {
expect.assertions(1);
const resourceForm = new ResourceFormEntity(defaultResourceFormDto(), { validate: false });
const resourceTypes = new ResourceTypeEntity(resourceTypeV5DefaultDto());
expect(resourceForm.isResourceTypeHasSecretProperty(resourceTypes, "secret.description")).toStrictEqual(true);
});
it("should return true if the entity has custom fields", () => {
expect.assertions(1);
const resourceForm = new ResourceFormEntity(defaultResourceFormDto(), { validate: false });
const resourceTypes = new ResourceTypeEntity(resourceTypeV5CustomFieldsDto());
expect(resourceForm.isResourceTypeHasSecretProperty(resourceTypes, "secret.custom_fields")).toStrictEqual(true);
});
it("should return true if the entity has standalone note", () => {
expect.assertions(1);
const resourceForm = new ResourceFormEntity(defaultResourceFormDto(), { validate: false });
const resourceTypes = new ResourceTypeEntity(resourceTypeV5StandaloneNoteDto());
expect(resourceForm.isResourceTypeHasSecretProperty(resourceTypes, "secret.description")).toStrictEqual(true);
});
it("should return false if the entity has not the target secret", () => {
expect.assertions(1);
const resourceForm = new ResourceFormEntity(defaultResourceFormDto(), { validate: false });
const resourceTypes = new ResourceTypeEntity(resourceTypeV5TotpDto());
expect(resourceForm.isResourceTypeHasSecretProperty(resourceTypes, "other")).toStrictEqual(false);
});
});
describe("::addSecret", () => {
it("add secret password on v5 totp", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_V5_TOTP,
secret: { object_type: SECRET_DATA_OBJECT_TYPE, totp: defaultTotpDto() },
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.addSecret(ResourceEditCreateFormEnumerationTypes.PASSWORD);
resourceDto.secret.password = "";
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("add secret note on v5 totp", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_V5_TOTP,
secret: { object_type: SECRET_DATA_OBJECT_TYPE, totp: defaultTotpDto() },
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.addSecret(ResourceEditCreateFormEnumerationTypes.NOTE);
resourceDto.secret.description = "";
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("add secret custom fields on v5 totp", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_V5_TOTP,
secret: { object_type: SECRET_DATA_OBJECT_TYPE, totp: defaultTotpDto() },
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.addSecret(ResourceEditCreateFormEnumerationTypes.CUSTOM_FIELDS);
resourceDto.secret.custom_fields = [CustomFieldEntity.createFromDefault().toDto()];
resourceDto.secret.custom_fields[0].id = resourceFormEntity.secret.customFields.items[0]._props.id;
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("add secret note on v5 default", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto();
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.addSecret(ResourceEditCreateFormEnumerationTypes.NOTE);
resourceDto.secret.description = "";
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_V5_DEFAULT);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("add secret custom fields on v5 default", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto();
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.addSecret(ResourceEditCreateFormEnumerationTypes.CUSTOM_FIELDS);
resourceDto.secret.custom_fields = [CustomFieldEntity.createFromDefault().toDto()];
resourceDto.secret.custom_fields[0].id = resourceFormEntity.secret.customFields.items[0]._props.id;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_V5_DEFAULT);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("add secret totp on v5 default", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto();
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const totpEntity = TotpEntity.createFromDefault({}, { validate: false });
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.addSecret(ResourceEditCreateFormEnumerationTypes.TOTP, { validate: false });
resourceDto.secret.totp = totpEntity.toDto();
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("add secret note on a resource v5 password string", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_V5_PASSWORD_STRING,
secret: minimalDefaultSecretDataV5PasswordStringDto(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.addSecret(ResourceEditCreateFormEnumerationTypes.NOTE);
resourceDto.secret.description = "";
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_V5_DEFAULT);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("add secret totp on a resource v5 password string", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_V5_PASSWORD_STRING,
secret: minimalDefaultSecretDataV5PasswordStringDto(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const totpEntity = TotpEntity.createFromDefault({}, { validate: false });
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.addSecret(ResourceEditCreateFormEnumerationTypes.TOTP, { validate: false });
resourceDto.secret.totp = totpEntity.toDto();
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("add secret custom fields on a resource v5 password string", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_V5_PASSWORD_STRING,
secret: minimalDefaultSecretDataV5PasswordStringDto(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.addSecret(ResourceEditCreateFormEnumerationTypes.CUSTOM_FIELDS);
resourceDto.secret.custom_fields = [CustomFieldEntity.createFromDefault().toDto()];
resourceDto.secret.custom_fields[0].id = resourceFormEntity.secret.customFields.items[0]._props.id;
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_V5_DEFAULT);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("add secret note on resource v4 default", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION,
secret: minimalDefaultSecretDataV4DefaultData(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.addSecret(ResourceEditCreateFormEnumerationTypes.NOTE);
resourceDto.secret.description = "";
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("add secret totp on resource v4 default", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION,
secret: minimalDefaultSecretDataV4DefaultData({ description: "" }),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const totpEntity = TotpEntity.createFromDefault({}, { validate: false });
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.addSecret(ResourceEditCreateFormEnumerationTypes.TOTP, { validate: false });
resourceDto.secret.totp = totpEntity.toDto();
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP;
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("add secret note on a resource v4 totp", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_TOTP,
secret: { totp: defaultTotpDto() },
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.addSecret(ResourceEditCreateFormEnumerationTypes.NOTE);
resourceDto.secret.description = "";
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("add secret password on a resource v4 totp", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_TOTP,
secret: { totp: defaultTotpDto() },
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.addSecret(ResourceEditCreateFormEnumerationTypes.PASSWORD);
resourceDto.secret.password = "";
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("add secret totp on a resource v4 password string", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_PASSWORD_STRING,
secret: { password: "password" },
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const totpEntity = TotpEntity.createFromDefault({}, { validate: false });
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.addSecret(ResourceEditCreateFormEnumerationTypes.TOTP, { validate: false });
resourceDto.secret.totp = totpEntity.toDto();
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP;
resourceDto.secret.description = resourceDto.metadata.description;
resourceDto.metadata.description = null;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("add secret unknown should do nothing", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto();
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.addSecret("unknown");
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("throw an error if add secret is not a string", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto();
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
expect(() => resourceFormEntity.addSecret({})).toThrow(TypeError);
});
});
describe("::deleteSecret", () => {
it("delete secret password on v5 default totp with password and totp", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP,
secret: minimalSecretDataV5DefaultTotpEntityDto(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.deleteSecret(ResourceEditCreateFormEnumerationTypes.PASSWORD);
delete resourceDto.secret.password;
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_V5_TOTP;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_V5_TOTP;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_V5_TOTP);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("delete secret note on v5 default totp with totp and note", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP,
secret: { object_type: SECRET_DATA_OBJECT_TYPE, totp: defaultTotpDto(), description: "" },
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, {
resourceTypes: resourceTypesCollection,
validate: false,
});
resourceFormEntity.deleteSecret(ResourceEditCreateFormEnumerationTypes.PASSWORD, { validate: false });
resourceFormEntity.deleteSecret(ResourceEditCreateFormEnumerationTypes.NOTE);
delete resourceDto.secret.description;
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_V5_TOTP;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_V5_TOTP;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_V5_TOTP);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("delete secret note on v5 default totp with password, note and totp", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP,
secret: defaultSecretDataV5DefaultTotpEntityDto(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.deleteSecret(ResourceEditCreateFormEnumerationTypes.NOTE);
delete resourceDto.secret.description;
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("delete secret totp on v5 default totp with password and totp", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP,
secret: minimalSecretDataV5DefaultTotpEntityDto(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.deleteSecret(ResourceEditCreateFormEnumerationTypes.TOTP);
delete resourceDto.secret.totp;
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_V5_DEFAULT;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_V5_DEFAULT);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("delete secret note on v5 default", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto();
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.deleteSecret(ResourceEditCreateFormEnumerationTypes.NOTE);
delete resourceDto.secret.description;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_V5_DEFAULT);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("delete secret password on v5 default should create a standalone note", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({ secret: defaultSecretDataV5DefaultDto() });
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, {
validate: false,
resourceTypes: resourceTypesCollection,
});
resourceFormEntity.deleteSecret(ResourceEditCreateFormEnumerationTypes.PASSWORD, { validate: false });
delete resourceDto.secret.password;
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_V5_STANDALONE_NOTE;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_V5_STANDALONE_NOTE;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_V5_STANDALONE_NOTE);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("delete secret password on v4 default totp with password and totp", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP,
secret: minimalSecretDataV4DefaultTotpEntityDto(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.deleteSecret(ResourceEditCreateFormEnumerationTypes.PASSWORD);
delete resourceDto.secret.password;
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_TOTP;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_TOTP;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_TOTP);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("delete secret note on v4 default totp with totp and note", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP,
secret: { totp: defaultTotpDto(), description: "" },
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, {
resourceTypes: resourceTypesCollection,
validate: false,
});
resourceFormEntity.deleteSecret(ResourceEditCreateFormEnumerationTypes.PASSWORD, { validate: false });
resourceFormEntity.deleteSecret(ResourceEditCreateFormEnumerationTypes.NOTE);
delete resourceDto.secret.description;
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_TOTP;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_TOTP;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_TOTP);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("delete secret note on v4 default totp with password, note and totp", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP,
secret: defaultSecretDataV4DefaultTotpEntityDto(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.deleteSecret(ResourceEditCreateFormEnumerationTypes.NOTE);
delete resourceDto.secret.description;
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("delete secret totp on v4 default totp with password and totp", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_PASSWORD_DESCRIPTION_TOTP,
secret: minimalSecretDataV4DefaultTotpEntityDto(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.deleteSecret(ResourceEditCreateFormEnumerationTypes.TOTP);
delete resourceDto.secret.totp;
resourceDto.resource_type_id = TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION;
resourceDto.metadata.resource_type_id = TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("delete secret note on v4 default", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION,
secret: defaultSecretDataV4DefaultData(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.deleteSecret(ResourceEditCreateFormEnumerationTypes.NOTE);
delete resourceDto.secret.description;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("delete secret password on v4 default", () => {
expect.assertions(2);
const resourceDto = defaultResourceFormDto({
resource_type_id: TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION,
secret: defaultSecretDataV4DefaultData(),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.deleteSecret(ResourceEditCreateFormEnumerationTypes.PASSWORD, { validate: false });
delete resourceDto.secret.password;
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_PASSWORD_AND_DESCRIPTION);
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("delete secret unknown should do nothing", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto();
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
resourceFormEntity.deleteSecret("unknown");
expect(resourceFormEntity.toDto()).toEqual(resourceDto);
});
it("throw an error if delete secret is not a string", () => {
expect.assertions(1);
const resourceDto = defaultResourceFormDto();
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, { resourceTypes: resourceTypesCollection });
expect(() => resourceFormEntity.deleteSecret({})).toThrow(TypeError);
});
it("delete custom_field on v5 default totp", () => {
expect.assertions(5);
const custom_fields = defaultCustomFieldsCollection();
const resourceDto = defaultResourceFormDto({
metadata: defaultResourceMetadataDto(),
secret: defaultSecretDataV5DefaultTotpEntityDto({ custom_fields }),
});
const resourceTypeDtos = resourceTypesCollectionDto();
const resourceTypesCollection = new ResourceTypesCollection(resourceTypeDtos);
const resourceFormEntity = new ResourceFormEntity(resourceDto, {
validate: false,
resourceTypes: resourceTypesCollection,
});
expect(resourceFormEntity.metadata._customFields).toBeFalsy();
expect(resourceFormEntity.secret._customFields).toBeTruthy();
resourceFormEntity.deleteSecret(ResourceEditCreateFormEnumerationTypes.CUSTOM_FIELDS, { validate: false });
expect(resourceFormEntity.resourceTypeId).toEqual(TEST_RESOURCE_TYPE_V5_DEFAULT_TOTP);
expect(resourceFormEntity.secret._customFields).toBeFalsy();
expect(resourceFormEntity.metadata._customFields).toBeFalsy();
});
it("delete custom_field on v5 default", () => {
expect.assertions(5);
const custom_fields = defaultCustomFieldsCollection();
const resourceDto = defaultResourceFormDto({
metadata: defaultResourceMetadataDto(),
secret: defaultSecretDataV5DefaultDto({ custom_fields }),
});
const resourceTypeDtos = resourceTypesCollection