Merge branch 'master' into chore/search-tests-from-views
This commit is contained in:
commit
ca88943048
|
@ -25,6 +25,7 @@ import {
|
||||||
FeatureFlag,
|
FeatureFlag,
|
||||||
BBReferenceFieldSubType,
|
BBReferenceFieldSubType,
|
||||||
ViewV2Schema,
|
ViewV2Schema,
|
||||||
|
ViewCalculationFieldMetadata,
|
||||||
} from "@budibase/types"
|
} from "@budibase/types"
|
||||||
import { generator, mocks } from "@budibase/backend-core/tests"
|
import { generator, mocks } from "@budibase/backend-core/tests"
|
||||||
import { DatabaseName, getDatasource } from "../../../integrations/tests/utils"
|
import { DatabaseName, getDatasource } from "../../../integrations/tests/utils"
|
||||||
|
@ -540,6 +541,33 @@ describe.each([
|
||||||
status: 201,
|
status: 201,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("can create a view with calculation fields", async () => {
|
||||||
|
let view = await config.api.viewV2.create({
|
||||||
|
tableId: table._id!,
|
||||||
|
name: generator.guid(),
|
||||||
|
schema: {
|
||||||
|
sum: {
|
||||||
|
visible: true,
|
||||||
|
calculationType: CalculationType.SUM,
|
||||||
|
field: "Price",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(Object.keys(view.schema!)).toHaveLength(1)
|
||||||
|
|
||||||
|
let sum = view.schema!.sum as ViewCalculationFieldMetadata
|
||||||
|
expect(sum).toBeDefined()
|
||||||
|
expect(sum.calculationType).toEqual(CalculationType.SUM)
|
||||||
|
expect(sum.field).toEqual("Price")
|
||||||
|
|
||||||
|
view = await config.api.viewV2.get(view.id)
|
||||||
|
sum = view.schema!.sum as ViewCalculationFieldMetadata
|
||||||
|
expect(sum).toBeDefined()
|
||||||
|
expect(sum.calculationType).toEqual(CalculationType.SUM)
|
||||||
|
expect(sum.field).toEqual("Price")
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("update", () => {
|
describe("update", () => {
|
||||||
|
@ -2543,6 +2571,51 @@ describe.each([
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
!isLucene &&
|
||||||
|
it("should not need required fields to be present", async () => {
|
||||||
|
const table = await config.api.table.save(
|
||||||
|
saveTableRequest({
|
||||||
|
schema: {
|
||||||
|
name: {
|
||||||
|
name: "name",
|
||||||
|
type: FieldType.STRING,
|
||||||
|
constraints: {
|
||||||
|
presence: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
age: {
|
||||||
|
name: "age",
|
||||||
|
type: FieldType.NUMBER,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
await Promise.all([
|
||||||
|
config.api.row.save(table._id!, { name: "Steve", age: 30 }),
|
||||||
|
config.api.row.save(table._id!, { name: "Jane", age: 31 }),
|
||||||
|
])
|
||||||
|
|
||||||
|
const view = await config.api.viewV2.create({
|
||||||
|
tableId: table._id!,
|
||||||
|
name: generator.guid(),
|
||||||
|
schema: {
|
||||||
|
sum: {
|
||||||
|
visible: true,
|
||||||
|
calculationType: CalculationType.SUM,
|
||||||
|
field: "age",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const response = await config.api.viewV2.search(view.id, {
|
||||||
|
query: {},
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(response.rows).toHaveLength(1)
|
||||||
|
expect(response.rows[0].sum).toEqual(61)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("permissions", () => {
|
describe("permissions", () => {
|
||||||
|
|
|
@ -258,19 +258,12 @@ export async function enrichSchema(
|
||||||
view: ViewV2,
|
view: ViewV2,
|
||||||
tableSchema: TableSchema
|
tableSchema: TableSchema
|
||||||
): Promise<ViewV2Enriched> {
|
): Promise<ViewV2Enriched> {
|
||||||
const tableCache: Record<string, Table> = {}
|
|
||||||
|
|
||||||
async function populateRelTableSchema(
|
async function populateRelTableSchema(
|
||||||
tableId: string,
|
tableId: string,
|
||||||
viewFields: Record<string, RelationSchemaField>
|
viewFields: Record<string, RelationSchemaField>
|
||||||
) {
|
) {
|
||||||
if (!tableCache[tableId]) {
|
const relTable = await sdk.tables.getTable(tableId)
|
||||||
tableCache[tableId] = await sdk.tables.getTable(tableId)
|
|
||||||
}
|
|
||||||
const relTable = tableCache[tableId]
|
|
||||||
|
|
||||||
const result: Record<string, ViewV2ColumnEnriched> = {}
|
const result: Record<string, ViewV2ColumnEnriched> = {}
|
||||||
|
|
||||||
for (const relTableFieldName of Object.keys(relTable.schema)) {
|
for (const relTableFieldName of Object.keys(relTable.schema)) {
|
||||||
const relTableField = relTable.schema[relTableFieldName]
|
const relTableField = relTable.schema[relTableFieldName]
|
||||||
if ([FieldType.LINK, FieldType.FORMULA].includes(relTableField.type)) {
|
if ([FieldType.LINK, FieldType.FORMULA].includes(relTableField.type)) {
|
||||||
|
@ -299,15 +292,24 @@ export async function enrichSchema(
|
||||||
|
|
||||||
const viewSchema = view.schema || {}
|
const viewSchema = view.schema || {}
|
||||||
const anyViewOrder = Object.values(viewSchema).some(ui => ui.order != null)
|
const anyViewOrder = Object.values(viewSchema).some(ui => ui.order != null)
|
||||||
for (const key of Object.keys(tableSchema).filter(
|
|
||||||
k => tableSchema[k].visible !== false
|
const visibleSchemaFields = Object.keys(viewSchema).filter(key => {
|
||||||
)) {
|
if (helpers.views.isCalculationField(viewSchema[key])) {
|
||||||
|
return viewSchema[key].visible !== false
|
||||||
|
}
|
||||||
|
return key in tableSchema && tableSchema[key].visible !== false
|
||||||
|
})
|
||||||
|
const visibleTableFields = Object.keys(tableSchema).filter(
|
||||||
|
key => tableSchema[key].visible !== false
|
||||||
|
)
|
||||||
|
const visibleFields = new Set([...visibleSchemaFields, ...visibleTableFields])
|
||||||
|
for (const key of visibleFields) {
|
||||||
// if nothing specified in view, then it is not visible
|
// if nothing specified in view, then it is not visible
|
||||||
const ui = viewSchema[key] || { visible: false }
|
const ui = viewSchema[key] || { visible: false }
|
||||||
schema[key] = {
|
schema[key] = {
|
||||||
...tableSchema[key],
|
...tableSchema[key],
|
||||||
...ui,
|
...ui,
|
||||||
order: anyViewOrder ? ui?.order ?? undefined : tableSchema[key].order,
|
order: anyViewOrder ? ui?.order ?? undefined : tableSchema[key]?.order,
|
||||||
columns: undefined,
|
columns: undefined,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,10 +321,7 @@ export async function enrichSchema(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return { ...view, schema }
|
||||||
...view,
|
|
||||||
schema: schema,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function syncSchema(
|
export function syncSchema(
|
||||||
|
|
Loading…
Reference in New Issue