138 lines
3.9 KiB
JavaScript
138 lines
3.9 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();
|
||
|
});
|
||
|
|
||
|
});
|