budibase/packages/core/test/indexing.evaluate.spec.js

132 lines
3.4 KiB
JavaScript

import evaluate from "../src/indexing/evaluate"
import { constant, merge } from "lodash"
const getRecord = obj => {
const def = {
key: "abcd1234",
type: "test",
isNew: false,
id: "1234",
}
const newObj = merge(def, obj)
return newObj
}
describe("index evaluation", () => {
it("should filter out when object does not pass filter", () => {
const index = {
filter: "record.type === 'customer'",
fields: {
type: { type: "string" },
},
}
const record = getRecord({
type: "not a customer",
})
const result = evaluate(record)(index)
expect(result.isError).toBe(false)
expect(result.passedFilter).toBe(false)
})
it("should always include key with the record", () => {
const index = {
filter: "record.type === 'customer'",
fields: {
type: { type: "string" },
},
}
const record = getRecord({
type: "customer",
})
const key = record.key
const result = evaluate(record)(index)
expect(result.isError).toBe(false)
expect(result.passedFilter).toBe(true)
expect(result.result.key).toBe(key)
})
it("should map when filter test is passed", () => {
const index = {
filter: "record.type === 'customer'",
map: "return {newName: record.name + 'by', email: record.email }",
fields: {
newName: { type: "string" },
email: { type: "string" },
},
}
const record = getRecord({
type: "customer",
name: "bob",
email: "bob@budibase.com",
})
const result = evaluate(record)(index)
expect(result.isError).toBe(false)
expect(result.passedFilter).toBe(true)
expect(result.result.newName).toBeDefined()
expect(result.result.newName).toBe("bobby")
expect(result.result.email).toBe("bob@budibase.com")
})
it("should not need a filter", () => {
const index = {
map: "return {newName : record.name + ' Thedog'}",
fields: {
newName: { type: "string" },
},
}
const record = getRecord({
name: "bob",
})
const result = evaluate(record)(index)
expect(result.isError).toBe(false)
expect(result.passedFilter).toBe(true)
expect(result.result.newName).toBeDefined()
expect(result.result.newName).toBe("bob Thedog")
})
it("should return all declared fields when no map supplied", () => {
const index = {
filter: "record.type === 'customer'",
fields: {
type: { type: "string" },
name: { type: "string" },
},
}
const record = getRecord({
type: "customer",
name: "bob",
})
const result = evaluate(record)(index)
expect(result.isError).toBe(false)
expect(result.passedFilter).toBe(true)
expect(result.result.name).toBeDefined()
expect(result.result.name).toBe("bob")
})
it("should set undefined mapped members to null", () => {
const index = {
map: "return {firstname : record.firstname, surname : record.surname}",
fields: {
newName: { type: "string" },
},
}
const record = getRecord({})
const result = evaluate(record)(index)
expect(result.isError).toBe(false)
expect(result.passedFilter).toBe(true)
expect(result.result.firstname).toBeDefined()
expect(result.result.surname).toBeDefined()
expect(result.result.firstname).toBeNull()
expect(result.result.surname).toBeNull()
})
})