Add test
This commit is contained in:
parent
c77ec0d17a
commit
a3bbbb32be
|
@ -2407,6 +2407,188 @@ describe.each([
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe("relationships", () => {
|
||||||
|
let tableId: string
|
||||||
|
|
||||||
|
let auxData: Row[] = []
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
const aux2Table = await config.api.table.save(defaultTable())
|
||||||
|
const aux2Data = await config.api.row.save(aux2Table._id!, {})
|
||||||
|
|
||||||
|
const auxTable = await config.api.table.save(
|
||||||
|
defaultTable({
|
||||||
|
schema: {
|
||||||
|
name: {
|
||||||
|
name: "name",
|
||||||
|
type: FieldType.STRING,
|
||||||
|
constraints: { presence: true },
|
||||||
|
},
|
||||||
|
age: {
|
||||||
|
name: "age",
|
||||||
|
type: FieldType.NUMBER,
|
||||||
|
constraints: { presence: true },
|
||||||
|
},
|
||||||
|
address: {
|
||||||
|
name: "address",
|
||||||
|
type: FieldType.STRING,
|
||||||
|
constraints: { presence: true },
|
||||||
|
visible: false,
|
||||||
|
},
|
||||||
|
link: {
|
||||||
|
name: "link",
|
||||||
|
type: FieldType.LINK,
|
||||||
|
tableId: aux2Table._id!,
|
||||||
|
relationshipType: RelationshipType.MANY_TO_MANY,
|
||||||
|
fieldName: "fk_aux",
|
||||||
|
constraints: { presence: true },
|
||||||
|
},
|
||||||
|
formula: {
|
||||||
|
name: "formula",
|
||||||
|
type: FieldType.FORMULA,
|
||||||
|
formula: "{{ any }}",
|
||||||
|
constraints: { presence: true },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
)
|
||||||
|
const auxTableId = auxTable._id!
|
||||||
|
|
||||||
|
for (const name of generator.unique(() => generator.name(), 10)) {
|
||||||
|
auxData.push(
|
||||||
|
await config.api.row.save(auxTableId, {
|
||||||
|
name,
|
||||||
|
age: generator.age(),
|
||||||
|
address: generator.address(),
|
||||||
|
link: [aux2Data],
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
const table = await config.api.table.save(
|
||||||
|
defaultTable({
|
||||||
|
schema: {
|
||||||
|
title: {
|
||||||
|
name: "title",
|
||||||
|
type: FieldType.STRING,
|
||||||
|
constraints: { presence: true },
|
||||||
|
},
|
||||||
|
relWithNoSchema: {
|
||||||
|
name: "relWithNoSchema",
|
||||||
|
relationshipType: RelationshipType.ONE_TO_MANY,
|
||||||
|
type: FieldType.LINK,
|
||||||
|
tableId: auxTableId,
|
||||||
|
fieldName: "fk_relWithNoSchema",
|
||||||
|
constraints: { presence: true },
|
||||||
|
},
|
||||||
|
relWithEmptySchema: {
|
||||||
|
name: "relWithEmptySchema",
|
||||||
|
relationshipType: RelationshipType.ONE_TO_MANY,
|
||||||
|
type: FieldType.LINK,
|
||||||
|
tableId: auxTableId,
|
||||||
|
fieldName: "fk_relWithEmptySchema",
|
||||||
|
constraints: { presence: true },
|
||||||
|
schema: {},
|
||||||
|
},
|
||||||
|
relWithFullSchema: {
|
||||||
|
name: "relWithFullSchema",
|
||||||
|
relationshipType: RelationshipType.ONE_TO_MANY,
|
||||||
|
type: FieldType.LINK,
|
||||||
|
tableId: auxTableId,
|
||||||
|
fieldName: "fk_relWithFullSchema",
|
||||||
|
constraints: { presence: true },
|
||||||
|
schema: Object.keys(auxTable.schema).reduce(
|
||||||
|
(acc, c) => ({ ...acc, [c]: { visible: true } }),
|
||||||
|
{}
|
||||||
|
),
|
||||||
|
},
|
||||||
|
relWithHalfSchema: {
|
||||||
|
name: "relWithHalfSchema",
|
||||||
|
relationshipType: RelationshipType.ONE_TO_MANY,
|
||||||
|
type: FieldType.LINK,
|
||||||
|
tableId: auxTableId,
|
||||||
|
fieldName: "fk_relWithHalfSchema",
|
||||||
|
constraints: { presence: true },
|
||||||
|
schema: {
|
||||||
|
name: { visible: true },
|
||||||
|
age: { visible: false, readonly: true },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
relWithIllegalSchema: {
|
||||||
|
name: "relWithIllegalSchema",
|
||||||
|
relationshipType: RelationshipType.ONE_TO_MANY,
|
||||||
|
type: FieldType.LINK,
|
||||||
|
tableId: auxTableId,
|
||||||
|
fieldName: "fk_relWithIllegalSchema",
|
||||||
|
constraints: { presence: true },
|
||||||
|
schema: {
|
||||||
|
name: { visible: true },
|
||||||
|
address: { visible: true },
|
||||||
|
unexisting: { visible: true },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
)
|
||||||
|
tableId = table._id!
|
||||||
|
})
|
||||||
|
|
||||||
|
it("can retrieve rows with populated relationships", async () => {
|
||||||
|
const otherRows = _.sampleSize(auxData, 5)
|
||||||
|
|
||||||
|
const row = await config.api.row.save(tableId, {
|
||||||
|
title: generator.word(),
|
||||||
|
relWithNoSchema: [otherRows[0]],
|
||||||
|
relWithEmptySchema: [otherRows[1]],
|
||||||
|
relWithFullSchema: [otherRows[2]],
|
||||||
|
relWithHalfSchema: [otherRows[3]],
|
||||||
|
relWithIllegalSchema: [otherRows[4]],
|
||||||
|
})
|
||||||
|
|
||||||
|
const retrieved = await config.api.row.get(tableId, row._id!)
|
||||||
|
expect(retrieved).toEqual(
|
||||||
|
expect.objectContaining({
|
||||||
|
title: row.title,
|
||||||
|
relWithNoSchema: [
|
||||||
|
{
|
||||||
|
_id: otherRows[0]._id,
|
||||||
|
primaryDisplay: otherRows[0].name,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
relWithEmptySchema: [
|
||||||
|
{
|
||||||
|
_id: otherRows[1]._id,
|
||||||
|
primaryDisplay: otherRows[1].name,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
relWithFullSchema: [
|
||||||
|
{
|
||||||
|
_id: otherRows[2]._id,
|
||||||
|
primaryDisplay: otherRows[2].name,
|
||||||
|
name: otherRows[2].name,
|
||||||
|
age: otherRows[2].age,
|
||||||
|
id: otherRows[2].id,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
relWithHalfSchema: [
|
||||||
|
{
|
||||||
|
_id: otherRows[3]._id,
|
||||||
|
primaryDisplay: otherRows[3].name,
|
||||||
|
name: otherRows[3].name,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
relWithIllegalSchema: [
|
||||||
|
{
|
||||||
|
_id: otherRows[4]._id,
|
||||||
|
primaryDisplay: otherRows[4].name,
|
||||||
|
name: otherRows[4].name,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
describe("Formula fields", () => {
|
describe("Formula fields", () => {
|
||||||
let table: Table
|
let table: Table
|
||||||
let otherTable: Table
|
let otherTable: Table
|
||||||
|
|
Loading…
Reference in New Issue