161 lines
5.4 KiB
JavaScript
161 lines
5.4 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")
|
|
})
|
|
})
|