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

138 lines
3.9 KiB
JavaScript
Raw Normal View History

2019-07-15 08:12:52 +02:00
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();
});
});