Fix inMemory test
This commit is contained in:
parent
79111e190b
commit
02e54bc248
|
@ -29,6 +29,7 @@ import {
|
||||||
SearchResponse,
|
SearchResponse,
|
||||||
SearchRowRequest,
|
SearchRowRequest,
|
||||||
SortOrder,
|
SortOrder,
|
||||||
|
SortType,
|
||||||
Table,
|
Table,
|
||||||
TableSchema,
|
TableSchema,
|
||||||
User,
|
User,
|
||||||
|
@ -37,7 +38,7 @@ import {
|
||||||
import _ from "lodash"
|
import _ from "lodash"
|
||||||
import tk from "timekeeper"
|
import tk from "timekeeper"
|
||||||
import { encodeJSBinding } from "@budibase/string-templates"
|
import { encodeJSBinding } from "@budibase/string-templates"
|
||||||
import { dataFilters } from "@budibase/shared-core"
|
import { dataFilters, InMemorySearchQuery } from "@budibase/shared-core"
|
||||||
import { Knex } from "knex"
|
import { Knex } from "knex"
|
||||||
import { generator, structures, mocks } from "@budibase/backend-core/tests"
|
import { generator, structures, mocks } from "@budibase/backend-core/tests"
|
||||||
import { DEFAULT_EMPLOYEE_TABLE_SCHEMA } from "../../../db/defaultData/datasource_bb_default"
|
import { DEFAULT_EMPLOYEE_TABLE_SCHEMA } from "../../../db/defaultData/datasource_bb_default"
|
||||||
|
@ -199,30 +200,26 @@ if (descriptions.length) {
|
||||||
const isView = sourceType === "view"
|
const isView = sourceType === "view"
|
||||||
|
|
||||||
class SearchAssertion {
|
class SearchAssertion {
|
||||||
constructor(private readonly query: SearchRowRequest) {}
|
constructor(
|
||||||
|
private readonly query: SearchRowRequest & {
|
||||||
|
sortType?: SortType
|
||||||
|
}
|
||||||
|
) {}
|
||||||
|
|
||||||
private async performSearch(): Promise<SearchResponse<Row>> {
|
private async performSearch(): Promise<SearchResponse<Row>> {
|
||||||
if (isInMemory) {
|
if (isInMemory) {
|
||||||
const inMemoryQuery: RequiredKeys<
|
const inMemoryQuery: RequiredKeys<InMemorySearchQuery> = {
|
||||||
Omit<RowSearchParams, "tableId">
|
|
||||||
> = {
|
|
||||||
sort: this.query.sort ?? undefined,
|
sort: this.query.sort ?? undefined,
|
||||||
query: { ...this.query.query },
|
query: { ...this.query.query },
|
||||||
paginate: this.query.paginate,
|
|
||||||
bookmark: this.query.bookmark ?? undefined,
|
|
||||||
limit: this.query.limit,
|
limit: this.query.limit,
|
||||||
sortOrder: this.query.sortOrder,
|
sortOrder: this.query.sortOrder,
|
||||||
version: this.query.version,
|
sortType: this.query.sortType ?? undefined,
|
||||||
disableEscaping: this.query.disableEscaping,
|
|
||||||
countRows: this.query.countRows,
|
countRows: this.query.countRows,
|
||||||
viewId: undefined,
|
|
||||||
fields: undefined,
|
|
||||||
indexer: undefined,
|
|
||||||
rows: undefined,
|
|
||||||
}
|
}
|
||||||
return dataFilters.search(_.cloneDeep(rows), inMemoryQuery)
|
return dataFilters.search(_.cloneDeep(rows), inMemoryQuery)
|
||||||
} else {
|
} else {
|
||||||
return config.api.row.search(tableOrViewId, this.query)
|
const { sortType, ...query } = this.query
|
||||||
|
return config.api.row.search(tableOrViewId, query)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -398,7 +395,9 @@ if (descriptions.length) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function expectSearch(query: SearchRowRequest) {
|
function expectSearch(
|
||||||
|
query: SearchRowRequest & { sortType?: SortType }
|
||||||
|
) {
|
||||||
return new SearchAssertion(query)
|
return new SearchAssertion(query)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1117,6 +1116,27 @@ if (descriptions.length) {
|
||||||
}).toMatchExactly([{ name: "foo" }, { name: "bar" }])
|
}).toMatchExactly([{ name: "foo" }, { name: "bar" }])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
isInMemory &&
|
||||||
|
describe("sortType STRING", () => {
|
||||||
|
it("sorts ascending", async () => {
|
||||||
|
await expectSearch({
|
||||||
|
query: {},
|
||||||
|
sort: "name",
|
||||||
|
sortType: SortType.STRING,
|
||||||
|
sortOrder: SortOrder.ASCENDING,
|
||||||
|
}).toMatchExactly([{ name: "bar" }, { name: "foo" }])
|
||||||
|
})
|
||||||
|
|
||||||
|
it("sorts descending", async () => {
|
||||||
|
await expectSearch({
|
||||||
|
query: {},
|
||||||
|
sort: "name",
|
||||||
|
sortType: SortType.STRING,
|
||||||
|
sortOrder: SortOrder.DESCENDING,
|
||||||
|
}).toMatchExactly([{ name: "foo" }, { name: "bar" }])
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
!isInternal &&
|
!isInternal &&
|
||||||
!isInMemory &&
|
!isInMemory &&
|
||||||
// This test was added because we automatically add in a sort by the
|
// This test was added because we automatically add in a sort by the
|
||||||
|
@ -1296,6 +1316,27 @@ if (descriptions.length) {
|
||||||
}).toMatchExactly([{ age: 10 }, { age: 1 }])
|
}).toMatchExactly([{ age: 10 }, { age: 1 }])
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
isInMemory &&
|
||||||
|
describe("sortType NUMBER", () => {
|
||||||
|
it("sorts ascending", async () => {
|
||||||
|
await expectSearch({
|
||||||
|
query: {},
|
||||||
|
sort: "age",
|
||||||
|
sortType: SortType.NUMBER,
|
||||||
|
sortOrder: SortOrder.ASCENDING,
|
||||||
|
}).toMatchExactly([{ age: 1 }, { age: 10 }])
|
||||||
|
})
|
||||||
|
|
||||||
|
it("sorts descending", async () => {
|
||||||
|
await expectSearch({
|
||||||
|
query: {},
|
||||||
|
sort: "age",
|
||||||
|
sortType: SortType.NUMBER,
|
||||||
|
sortOrder: SortOrder.DESCENDING,
|
||||||
|
}).toMatchExactly([{ age: 10 }, { age: 1 }])
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("dates", () => {
|
describe("dates", () => {
|
||||||
|
@ -1430,6 +1471,27 @@ if (descriptions.length) {
|
||||||
sortOrder: SortOrder.DESCENDING,
|
sortOrder: SortOrder.DESCENDING,
|
||||||
}).toMatchExactly([{ dob: JAN_10TH }, { dob: JAN_1ST }])
|
}).toMatchExactly([{ dob: JAN_10TH }, { dob: JAN_1ST }])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
isInMemory &&
|
||||||
|
describe("sortType STRING", () => {
|
||||||
|
it("sorts ascending", async () => {
|
||||||
|
await expectSearch({
|
||||||
|
query: {},
|
||||||
|
sort: "dob",
|
||||||
|
sortType: SortType.STRING,
|
||||||
|
sortOrder: SortOrder.ASCENDING,
|
||||||
|
}).toMatchExactly([{ dob: JAN_1ST }, { dob: JAN_10TH }])
|
||||||
|
})
|
||||||
|
|
||||||
|
it("sorts descending", async () => {
|
||||||
|
await expectSearch({
|
||||||
|
query: {},
|
||||||
|
sort: "dob",
|
||||||
|
sortType: SortType.STRING,
|
||||||
|
sortOrder: SortOrder.DESCENDING,
|
||||||
|
}).toMatchExactly([{ dob: JAN_10TH }, { dob: JAN_1ST }])
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -1576,6 +1638,41 @@ if (descriptions.length) {
|
||||||
{ timeid: NULL_TIME__ID },
|
{ timeid: NULL_TIME__ID },
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
isInMemory &&
|
||||||
|
describe("sortType STRING", () => {
|
||||||
|
it("sorts ascending", async () => {
|
||||||
|
await expectSearch({
|
||||||
|
query: {},
|
||||||
|
sort: "time",
|
||||||
|
sortType: SortType.STRING,
|
||||||
|
sortOrder: SortOrder.ASCENDING,
|
||||||
|
}).toMatchExactly([
|
||||||
|
{ timeid: NULL_TIME__ID },
|
||||||
|
{ time: "00:00:00" },
|
||||||
|
{ time: "10:00:00" },
|
||||||
|
{ time: "10:45:00" },
|
||||||
|
{ time: "12:00:00" },
|
||||||
|
{ time: "15:30:00" },
|
||||||
|
])
|
||||||
|
})
|
||||||
|
|
||||||
|
it("sorts descending", async () => {
|
||||||
|
await expectSearch({
|
||||||
|
query: {},
|
||||||
|
sort: "time",
|
||||||
|
sortType: SortType.STRING,
|
||||||
|
sortOrder: SortOrder.DESCENDING,
|
||||||
|
}).toMatchExactly([
|
||||||
|
{ time: "15:30:00" },
|
||||||
|
{ time: "12:00:00" },
|
||||||
|
{ time: "10:45:00" },
|
||||||
|
{ time: "10:00:00" },
|
||||||
|
{ time: "00:00:00" },
|
||||||
|
{ timeid: NULL_TIME__ID },
|
||||||
|
])
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -1750,6 +1847,35 @@ if (descriptions.length) {
|
||||||
{ dateid: NULL_DATE__ID },
|
{ dateid: NULL_DATE__ID },
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
isInMemory &&
|
||||||
|
describe("sortType STRING", () => {
|
||||||
|
it("sorts ascending", async () => {
|
||||||
|
await expectSearch({
|
||||||
|
query: {},
|
||||||
|
sort: "date",
|
||||||
|
sortType: SortType.STRING,
|
||||||
|
sortOrder: SortOrder.ASCENDING,
|
||||||
|
}).toMatchExactly([
|
||||||
|
{ dateid: NULL_DATE__ID },
|
||||||
|
{ date: JAN_1ST },
|
||||||
|
{ date: JAN_10TH },
|
||||||
|
])
|
||||||
|
})
|
||||||
|
|
||||||
|
it("sorts descending", async () => {
|
||||||
|
await expectSearch({
|
||||||
|
query: {},
|
||||||
|
sort: "date",
|
||||||
|
sortType: SortType.STRING,
|
||||||
|
sortOrder: SortOrder.DESCENDING,
|
||||||
|
}).toMatchExactly([
|
||||||
|
{ date: JAN_10TH },
|
||||||
|
{ date: JAN_1ST },
|
||||||
|
{ dateid: NULL_DATE__ID },
|
||||||
|
])
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -530,6 +530,8 @@ type SearchQuery = WithRequired<
|
||||||
"query"
|
"query"
|
||||||
>
|
>
|
||||||
|
|
||||||
|
export type InMemorySearchQuery = SearchQuery
|
||||||
|
|
||||||
export function search<T extends Record<string, any>>(
|
export function search<T extends Record<string, any>>(
|
||||||
docs: T[],
|
docs: T[],
|
||||||
query: SearchQuery
|
query: SearchQuery
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
export * from "./constants"
|
export * from "./constants"
|
||||||
export * as dataFilters from "./filters"
|
export * as dataFilters from "./filters"
|
||||||
|
export type * from "./filters"
|
||||||
export * as helpers from "./helpers"
|
export * as helpers from "./helpers"
|
||||||
export * as utils from "./utils"
|
export * as utils from "./utils"
|
||||||
export * as sdk from "./sdk"
|
export * as sdk from "./sdk"
|
||||||
|
|
Loading…
Reference in New Issue