155 lines
No EOL
5.9 KiB
JavaScript
155 lines
No EOL
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");
|
|
});
|
|
|
|
}); |