132 lines
3.4 KiB
JavaScript
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()
|
|
})
|
|
})
|