1
0
Fork 0
mirror of synced 2024-07-13 10:15:49 +12:00
budibase/packages/core/test/indexApi.list.spec.js
2020-02-03 09:24:25 +00:00

162 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")
})
})