typix
Version:
A TypeScript library for validating object typings and values with custom rules, offering both strict type checking and value validation.
126 lines (115 loc) • 3.4 kB
JavaScript
const typix = require("../src/typix");
const mockOptions = {
fields: [
{ name: "ID", type: "number", validateValue: (value) => value !== -1 },
{ name: "NAME", type: "string" },
{ name: "AGE", type: "number" },
],
strict: true,
};
test("should validate a correct object", async () => {
const testData = {
ID: 1,
NAME: "CCORGZ",
AGE: 24,
};
const result = await typix.validate(mockOptions, testData);
expect(result.isValid).toBe(true);
expect(result.message).toBe("Field validations completed");
expect(result.expectedFields).toEqual([]);
});
test("should validate a wrong object with wrong ID typing", async () => {
const testData = {
ID: "1",
NAME: "CCORGZ",
AGE: 24,
};
const result = await typix.validate(mockOptions, testData);
expect(result.isValid).toBe(false);
expect(result.message).toBe("Field validations failed");
expect(result.expectedFields).toEqual([
{
field: "ID",
expectedType: "number",
receivedType: "string",
receivedValue: "1",
errorMessage: "Error on typing",
},
]);
});
test("should validate a wrong object with wrong ID value", async () => {
const testData = {
ID: -1,
NAME: "CCORGZ",
AGE: 24,
};
const result = await typix.validate(mockOptions, testData);
expect(result.isValid).toBe(false);
expect(result.message).toBe("Field validations failed");
expect(result.expectedFields).toEqual([
{
field: "ID",
expectedType: "number",
receivedType: "number",
receivedValue: -1,
errorMessage: "Error on value",
},
]);
});
test("should not validate a field when field strict is false", async () => {
const mockOptionsWithStrict = {
fields: [
{ name: "ID", type: "number" },
{ name: "NAME", type: "string", strict: false },
{ name: "AGE", type: "number" },
],
strict: true,
};
const testData = {
ID: 1,
NAME: undefined,
AGE: 24,
};
const result = await typix.validate(mockOptionsWithStrict, testData);
expect(result.isValid).toBe(true);
expect(result.message).toBe("Field validations completed");
expect(result.expectedFields).toEqual([]);
});
test("should not validate any field when options strict is false", async () => {
const mockOptionsWithStrict = {
fields: [
{ name: "ID", type: "number" },
{ name: "NAME", type: "string", strict: false },
{ name: "AGE", type: "number" },
],
strict: false,
};
const testData = {
ID: undefined,
NAME: undefined,
AGE: undefined,
};
const result = await typix.validate(mockOptionsWithStrict, testData);
expect(result.isValid).toBe(true);
expect(result.message).toBe("Field validations completed");
expect(result.expectedFields).toEqual([]);
});
test("should return when NAME field length is under 10", async () => {
const mockOptionsWithStrict = {
fields: [
{ name: "ID", type: "number" },
{ name: "NAME", type: "string", validateValue: (value) => value.length < 10 },
{ name: "AGE", type: "number" },
],
strict: true,
};
const testData = {
ID: 1,
NAME: "CORGOZINH",
AGE: 24,
};
const result = await typix.validate(mockOptionsWithStrict, testData);
expect(result.isValid).toBe(true);
expect(result.message).toBe("Field validations completed");
expect(result.expectedFields).toEqual([]);
});