1
0
Fork 0
mirror of synced 2024-07-09 00:06:05 +12:00
budibase/packages/core/test/indexApi.list.spec.js
2019-07-15 07:12:52 +01:00

155 lines
5.9 KiB
JavaScript

import {setupApphierarchy,
basicAppHierarchyCreator_WithFields_AndIndexes} from "./specHelpers";
import {permission} from "../src/authApi/permissions";
describe("indexApi > listItems", () => {
it("should pull items from one shard when only startRange and endRange params are equal", async () => {
const {recordApi,
indexApi} = await setupApphierarchy(basicAppHierarchyCreator_WithFields_AndIndexes);
const record1 = recordApi.getNew("/customers", "customer");
record1.surname = "Ledog";
await recordApi.save(record1);
const record2 = recordApi.getNew("/customers", "customer");
record2.surname = "Zeecat";
await recordApi.save(record2);
const items_L_shard = await indexApi.listItems(
"/customersBySurname", {
rangeStartParams: {surname:"L"},
rangeEndParams: {surname:"L"}
});
expect(items_L_shard.length).toBe(1);
expect(items_L_shard[0].key).toBe(record1.key);
const items_Z_shard = await indexApi.listItems(
"/customersBySurname", {
rangeStartParams: {surname:"Z"},
rangeEndParams: {surname:"Z"}
});
expect(items_Z_shard.length).toBe(1);
expect(items_Z_shard[0].key).toBe(record2.key);
});
it("should pull items from one shard when shard is within startRange and endRange params", async () => {
const {recordApi,
indexApi} = await setupApphierarchy(basicAppHierarchyCreator_WithFields_AndIndexes);
const record1 = recordApi.getNew("/customers", "customer");
record1.surname = "Ledog";
await recordApi.save(record1);
const record2 = recordApi.getNew("/customers", "customer");
record2.surname = "Zeecat";
await recordApi.save(record2);
const items_L_shard = await indexApi.listItems(
"/customersBySurname", {
rangeStartParams: {surname:"K"},
rangeEndParams: {surname:"M"}
});
expect(items_L_shard.length).toBe(1);
expect(items_L_shard[0].key).toBe(record1.key);
});
it("should pull items from multiple shards are withing startRange and endRange params", async () => {
const {recordApi,
indexApi} = await setupApphierarchy(basicAppHierarchyCreator_WithFields_AndIndexes);
const record1 = recordApi.getNew("/customers", "customer");
record1.surname = "Ledog";
await recordApi.save(record1);
const record2 = recordApi.getNew("/customers", "customer");
record2.surname = "Zeecat";
await recordApi.save(record2);
const items_L_shard = await indexApi.listItems(
"/customersBySurname", {
rangeStartParams: {surname:"K"},
rangeEndParams: {surname:"Z"}
});
expect(items_L_shard.length).toBe(2);
expect(items_L_shard[0].key).toBe(record1.key);
});
it("should filter items by given search phrase", async () => {
const {recordApi,
indexApi} = await setupApphierarchy(basicAppHierarchyCreator_WithFields_AndIndexes);
const record1 = recordApi.getNew("/customers", "customer");
record1.surname = "Ledog";
await recordApi.save(record1);
const record2 = recordApi.getNew("/customers", "customer");
record2.surname = "Zeecat";
await recordApi.save(record2);
const results = await indexApi.listItems("/customer_index",{searchPhrase:"*cat"});
expect(results.length).toBe(1);
expect(results[0].surname).toBe("Zeecat");
});
it("should filter items by given search phrase, accross sharded whole index", async () => {
const {recordApi,
indexApi} = await setupApphierarchy(basicAppHierarchyCreator_WithFields_AndIndexes);
const record1 = recordApi.getNew("/customers", "customer");
record1.surname = "Ledog";
await recordApi.save(record1);
const record2 = recordApi.getNew("/customers", "customer");
record2.surname = "Zeecat";
await recordApi.save(record2);
const results = await indexApi.listItems("/customersBySurname",{searchPhrase:"*cat"});
expect(results.length).toBe(1);
expect(results[0].surname).toBe("Zeecat");
});
it("should filter items by given search phrase, in single shard ", async () => {
const {recordApi,
indexApi} = await setupApphierarchy(basicAppHierarchyCreator_WithFields_AndIndexes);
const record1 = recordApi.getNew("/customers", "customer");
record1.surname = "Lecat";
await recordApi.save(record1);
const record2 = recordApi.getNew("/customers", "customer");
record2.surname = "Zeecat";
await recordApi.save(record2);
const record3 = recordApi.getNew("/customers", "customer");
record3.surname = "Zeedog";
await recordApi.save(record3);
const results = await indexApi.listItems("/customersBySurname",{
searchPhrase:"*cat",
rangeStartParams: {surname:"Z"},
rangeEndParams: {surname:"Z"}
});
expect(results.length).toBe(1);
expect(results[0].surname).toBe("Zeecat");
});
it("should throw error when user user does not have permission", async () => {
const {indexApi, app} = await setupApphierarchy(basicAppHierarchyCreator_WithFields_AndIndexes);
app.removePermission(permission.readIndex.get("/customersBySurname"));
expect(indexApi.listItems("/customersBySurname")).rejects.toThrow(/Unauthorized/);
});
it("should not depend on having any other permissions", async () => {
const {app, indexApi} = await setupApphierarchy(basicAppHierarchyCreator_WithFields_AndIndexes);
app.withOnlyThisPermission(permission.readIndex.get("/customersBySurname"));
await indexApi.listItems("/customersBySurname");
});
});