UNPKG

@ikaru5/heimdall-contract

Version:

Validation and Representer Objects in your Frontend

76 lines (70 loc) 2.73 kB
import {describe, expect, it} from '@jest/globals'; import ContractBase from "../../index.js" import { validationDefinitions } from "../../validations.js" describe("presence validation", () => { class TestContract extends ContractBase { defineSchema() { return ( { ...super.defineSchema(), ...{ valueA: {dType: "String", presence: true}, valueB: {dType: "String", presence: false}, valueC: {dType: "String", presence: () => true}, valueD: {dType: "Number", presence: true}, valueE: {dType: "Boolean", presence: true}, valueF: {dType: "Generic", presence: true}, valueG: {dType: "Generic", presence: true}, valueH: {dType: "Array", presence: true}, valueI: {dType: "Array", presence: true} } } ) } } it('validates with valid values', () => { const testContract = new TestContract() testContract.valueA = "Some valid value" testContract.valueB = "Some valid value" testContract.valueC = "Some valid value" testContract.valueD = 123 testContract.valueE = true testContract.valueF = {doesnt: "matter"} testContract.valueG = {doesnt: "matter"} testContract.valueH = [1, 2, 3] testContract.valueI = [1, 2, 3] expect(testContract.isValid()).toBe(true) expect(testContract.errors).toStrictEqual({}) }) it('validates with invalid values', () => { const testContract = new TestContract() testContract.valueA = "" testContract.valueB = undefined testContract.valueC = null testContract.valueD = undefined testContract.valueE = undefined testContract.valueF = undefined testContract.valueG = null testContract.valueH = [] testContract.valueI = undefined expect(testContract.isValid()).toBe(false) expect(testContract.errors).toStrictEqual({ valueA: {messages: ["not present"]}, valueB: {messages: ['"undefined" is not a valid String']}, valueC: {messages: ['"null" is not a valid String', "not present"]}, valueD: {messages: ['"undefined" is not a valid Number', "not present"]}, valueE: {messages: ['"undefined" is not a valid Boolean', "not present"]}, valueF: {messages: ["not present"]}, valueG: {messages: ["not present"]}, valueH: {messages: ["not present"]}, valueI: {messages: ['"undefined" is not a valid Array', "not present"]}, }) }) it('validates directly with check method', () => { const checkMethod = validationDefinitions.normal.presence.check // this is easier to test directly expect( checkMethod("doesnt matter", true, "Invalid") ).toBe(false) }) })