import {isDefined, join, fieldDefinitions, $} from "../src/common"; import {getMemoryTemplateApi} from "./specHelpers"; import {fieldErrors} from "../src/templateApi/fields"; const getRecordTemplate = templateApi => $(templateApi.getNewRootLevel(), [ templateApi.getNewRecordTemplate ]); const getValidField = templateApi => { const field = templateApi.getNewField("string"); field.name = "forename"; field.label = "forename"; return field; }; const testMemberIsNotSet = membername => async () => { const {templateApi} = await getMemoryTemplateApi(); const field = getValidField(templateApi); field[membername] = ""; const errorsNotSet = templateApi.validateField([field])(field); expect(errorsNotSet.length).toBe(1); expect(errorsNotSet[0].error.includes("is not set")).toBeTruthy(); }; const testMemberIsNotDefined = membername => async () => { const {templateApi} = await getMemoryTemplateApi(); const field = getValidField(templateApi); delete field[membername]; const errorsNotSet = templateApi.validateField([field])(field); expect(errorsNotSet.length).toBe(1); expect(errorsNotSet[0].error.includes("is not set")).toBeTruthy(); }; describe("validateField", () => { it("should return error when name is not set", testMemberIsNotSet("name")); it("should return error when name is not defined", testMemberIsNotDefined("name")); it("should return error when type is not set", testMemberIsNotSet("type")); it("should return error when type is not defined", testMemberIsNotDefined("type")); it("should return error when label is not defined", testMemberIsNotDefined("label")); it("should return error when getInitialValue is not defined", testMemberIsNotDefined("getInitialValue")); it("should return error when getInitialValue is not set", testMemberIsNotSet("getInitialValue")); it("should return error when getUndefinedValue is not defined", testMemberIsNotDefined("getUndefinedValue")); it("should return error when getUndefinedValue is not set", testMemberIsNotSet("getUndefinedValue")); it("should return no errors when valid field is supplied", async () => { const {templateApi} = await getMemoryTemplateApi(); const field = getValidField(templateApi); const errors = templateApi.validateField([field])(field); expect(errors.length).toBe(0); }); it("should return error when field with same name exists already", async () => { const {templateApi} = await getMemoryTemplateApi(); const field1 = getValidField(templateApi); field1.name = "surname"; const field2 = getValidField(templateApi); field2.name = "surname"; const errors = templateApi.validateField([field1, field2])(field2); expect(errors.length).toBe(1); expect(errors[0].error).toBe("field name is duplicated"); expect(errors[0].field).toBe("name"); }); it("should return error when field is not one of allowed types", async () => { const {templateApi} = await getMemoryTemplateApi(); const field = getValidField(templateApi); field.type = "sometype"; const errors = templateApi.validateField([field])(field); expect(errors.length).toBe(1); expect(errors[0].error).toBe("type is unknown"); expect(errors[0].field).toBe("type"); }); }); describe("addField", () => { it("should throw exception when field is invalid", async () => { const {templateApi} = await getMemoryTemplateApi(); const record = getRecordTemplate(templateApi); const field = getValidField(templateApi); field.name = ""; expect(() => templateApi.addField(record, field)) .toThrow(new RegExp('^' + fieldErrors.AddFieldValidationFailed, 'i')); }); it("should add field when field is valid", async () => { const {templateApi} = await getMemoryTemplateApi(); const record = getRecordTemplate(templateApi); const field = getValidField(templateApi); field.name = "some_new_field"; templateApi.addField(record, field); expect(record.fields.length).toBe(1); expect(record.fields[0]).toBe(field); }); });