2020-02-03 10:24:25 +01:00
|
|
|
import { createProps } from "../src/userInterface/pagesParsing/createProps"
|
|
|
|
import { keys, some } from "lodash/fp"
|
|
|
|
import { BB_STATE_BINDINGPATH } from "@budibase/client/src/state/isState"
|
2020-02-10 16:51:09 +01:00
|
|
|
import { stripStandardProps } from "./testData"
|
2019-07-19 13:52:08 +02:00
|
|
|
|
|
|
|
describe("createDefaultProps", () => {
|
2020-02-03 10:24:25 +01:00
|
|
|
const getcomponent = () => ({
|
|
|
|
name: "some_component",
|
|
|
|
props: {
|
|
|
|
fieldName: { type: "string", default: "something" },
|
|
|
|
},
|
|
|
|
})
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should create a object with single string value, when default string field set", () => {
|
|
|
|
const { props, errors } = createProps(getcomponent())
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors).toEqual([])
|
|
|
|
expect(props.fieldName).toBeDefined()
|
|
|
|
expect(props.fieldName).toBe("something")
|
2020-02-10 16:51:09 +01:00
|
|
|
stripStandardProps(props)
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(keys(props).length).toBe(3)
|
|
|
|
})
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should set component name", () => {
|
|
|
|
const { props, errors } = createProps(getcomponent())
|
2019-07-20 22:41:06 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors).toEqual([])
|
|
|
|
expect(props._component).toBe("some_component")
|
|
|
|
})
|
2019-07-20 22:41:06 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should return error when component name not supplied", () => {
|
|
|
|
const comp = getcomponent()
|
|
|
|
comp.name = ""
|
2019-07-20 22:41:06 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const { errors } = createProps(comp)
|
2019-07-20 22:41:06 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors.length).toEqual(1)
|
|
|
|
})
|
2019-07-20 22:41:06 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should create a object with single blank string value, when no default", () => {
|
|
|
|
const comp = getcomponent()
|
|
|
|
comp.props.fieldName = { type: "string" }
|
2019-07-20 22:41:06 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const { props, errors } = createProps(comp)
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors).toEqual([])
|
|
|
|
expect(props.fieldName).toBeDefined()
|
|
|
|
expect(props.fieldName).toBe("")
|
|
|
|
})
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should create a object with single blank string value, when prop definition is 'string' ", () => {
|
|
|
|
const comp = getcomponent()
|
|
|
|
comp.props.fieldName = "string"
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const { props, errors } = createProps(comp)
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors).toEqual([])
|
|
|
|
expect(props.fieldName).toBeDefined()
|
|
|
|
expect(props.fieldName).toBe("")
|
|
|
|
})
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should create a object with single fals value, when prop definition is 'bool' ", () => {
|
|
|
|
const comp = getcomponent()
|
|
|
|
comp.props.isVisible = "bool"
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const { props, errors } = createProps(comp)
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors).toEqual([])
|
|
|
|
expect(props.isVisible).toBeDefined()
|
|
|
|
expect(props.isVisible).toBe(false)
|
|
|
|
})
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should create a object with single 0 value, when prop definition is 'number' ", () => {
|
|
|
|
const comp = getcomponent()
|
|
|
|
comp.props.width = "number"
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const { props, errors } = createProps(comp)
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors).toEqual([])
|
|
|
|
expect(props.width).toBeDefined()
|
|
|
|
expect(props.width).toBe(0)
|
|
|
|
})
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should create a object with empty _children array, when children===true ", () => {
|
|
|
|
const comp = getcomponent()
|
|
|
|
comp.children = true
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const { props, errors } = createProps(comp)
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors).toEqual([])
|
|
|
|
expect(props._children).toBeDefined()
|
|
|
|
expect(props._children).toEqual([])
|
|
|
|
})
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should create a object without _children array, when children===false ", () => {
|
|
|
|
const comp = getcomponent()
|
|
|
|
comp.children = false
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const { props, errors } = createProps(comp)
|
2020-01-18 00:06:42 +01:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors).toEqual([])
|
|
|
|
expect(props._children).not.toBeDefined()
|
|
|
|
})
|
2020-01-18 00:06:42 +01:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should create a object with single empty array, when prop definition is 'event' ", () => {
|
|
|
|
const comp = getcomponent()
|
|
|
|
comp.props.onClick = "event"
|
2020-01-18 00:06:42 +01:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const { props, errors } = createProps(comp)
|
2019-07-20 22:41:06 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors).toEqual([])
|
|
|
|
expect(props.onClick).toBeDefined()
|
|
|
|
expect(props.onClick).toEqual([])
|
|
|
|
})
|
2019-09-19 05:35:40 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should create a object with empty state when prop def is 'state' ", () => {
|
|
|
|
const comp = getcomponent()
|
|
|
|
comp.props.data = "state"
|
2020-01-18 00:06:42 +01:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const { props, errors } = createProps(comp)
|
2019-09-19 05:35:40 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors).toEqual([])
|
|
|
|
expect(props.data[BB_STATE_BINDINGPATH]).toBeDefined()
|
|
|
|
expect(props.data[BB_STATE_BINDINGPATH]).toBe("")
|
|
|
|
})
|
2019-09-19 05:35:40 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should create a object children array when children == true ", () => {
|
|
|
|
const comp = getcomponent()
|
|
|
|
comp.children = true
|
2019-09-27 18:03:31 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const { props, errors } = createProps(comp)
|
2020-01-18 00:06:42 +01:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors).toEqual([])
|
|
|
|
expect(props._children).toBeDefined()
|
|
|
|
expect(props._children).toEqual([])
|
|
|
|
})
|
2019-09-27 18:03:31 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should create a _children array when children not defined ", () => {
|
|
|
|
const comp = getcomponent()
|
2019-09-27 18:03:31 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const { props, errors } = createProps(comp)
|
2020-01-18 00:06:42 +01:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors).toEqual([])
|
|
|
|
expect(props._children).toBeDefined()
|
|
|
|
expect(props._children).toEqual([])
|
|
|
|
})
|
2019-07-20 22:41:06 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should not create _children array when children=false ", () => {
|
|
|
|
const comp = getcomponent()
|
|
|
|
comp.children = false
|
2019-07-20 22:41:06 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const { props, errors } = createProps(comp)
|
2020-01-18 00:06:42 +01:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors).toEqual([])
|
|
|
|
expect(props._children).not.toBeDefined()
|
|
|
|
})
|
2020-01-18 00:06:42 +01:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should create an object with multiple prop names", () => {
|
|
|
|
const comp = getcomponent()
|
|
|
|
comp.props.fieldName = "string"
|
|
|
|
comp.props.fieldLength = { type: "number", default: 500 }
|
2020-01-18 00:06:42 +01:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const { props, errors } = createProps(comp)
|
2020-01-18 00:06:42 +01:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors).toEqual([])
|
|
|
|
expect(props.fieldName).toBeDefined()
|
|
|
|
expect(props.fieldName).toBe("")
|
|
|
|
expect(props.fieldLength).toBeDefined()
|
|
|
|
expect(props.fieldLength).toBe(500)
|
|
|
|
})
|
2020-01-18 00:06:42 +01:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should return error when invalid type", () => {
|
|
|
|
const comp = getcomponent()
|
|
|
|
comp.props.fieldName = "invalid type name"
|
|
|
|
comp.props.fieldLength = { type: "invalid type name " }
|
2020-01-18 00:06:42 +01:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const { errors } = createProps(comp)
|
2020-01-18 00:06:42 +01:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors.length).toBe(2)
|
|
|
|
expect(some(e => e.propName === "fieldName")(errors)).toBeTruthy()
|
|
|
|
expect(some(e => e.propName === "fieldLength")(errors)).toBeTruthy()
|
|
|
|
})
|
2020-01-18 00:06:42 +01:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should return error default value is not of declared type", () => {
|
|
|
|
const comp = getcomponent()
|
|
|
|
comp.props.fieldName = { type: "string", default: 1 }
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const { errors } = createProps(comp)
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors.length).toBe(1)
|
|
|
|
expect(some(e => e.propName === "fieldName")(errors)).toBeTruthy()
|
|
|
|
})
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
it("should merge in derived props", () => {
|
|
|
|
const comp = getcomponent()
|
|
|
|
comp.props.fieldName = "string"
|
|
|
|
comp.props.fieldLength = { type: "number", default: 500 }
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const derivedFrom = {
|
|
|
|
fieldName: "surname",
|
|
|
|
}
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
const { props, errors } = createProps(comp, derivedFrom)
|
2019-07-19 13:52:08 +02:00
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
expect(errors.length).toBe(0)
|
|
|
|
expect(props.fieldName).toBe("surname")
|
|
|
|
expect(props.fieldLength).toBe(500)
|
|
|
|
})
|
2020-02-10 16:51:09 +01:00
|
|
|
|
|
|
|
it("should create standard props", () => {
|
|
|
|
const comp = getcomponent()
|
|
|
|
comp.props.fieldName = { type: "string", default: 1 }
|
|
|
|
const { props } = createProps(comp)
|
|
|
|
expect(props._code).toBeDefined()
|
|
|
|
expect(props._styles).toBeDefined()
|
|
|
|
expect(props._code).toBeDefined()
|
|
|
|
})
|
2019-08-14 23:11:59 +02:00
|
|
|
})
|