1
0
Fork 0
mirror of synced 2024-07-07 15:25:52 +12:00

Adding test case and fixing issue that it revealed with external tables as well.

This commit is contained in:
mike12345567 2023-11-29 19:53:56 +00:00
parent b86640772b
commit 160fbf2125
2 changed files with 43 additions and 4 deletions

View file

@ -517,9 +517,22 @@ describe.each([
})
describe("patch", () => {
let otherTable: Table
beforeAll(async () => {
const tableConfig = generateTableConfig()
table = await createTable(tableConfig)
const otherTableConfig = generateTableConfig()
// need a short name of table here - for relationship tests
otherTableConfig.name = "a"
otherTableConfig.schema.relationship = {
name: "relationship",
type: FieldType.LINK,
fieldName: "relationship",
tableId: table._id!,
relationshipType: RelationshipType.ONE_TO_MANY,
}
otherTable = await createTable(otherTableConfig)
})
it("should update only the fields that are supplied", async () => {
@ -615,6 +628,28 @@ describe.each([
expect(getResp.body.user1[0]._id).toEqual(user2._id)
expect(getResp.body.user2[0]._id).toEqual(user2._id)
})
it("should be able to update relationships when both columns are same name", async () => {
let row = await config.api.row.save(table._id!, {
name: "test",
description: "test",
})
let row2 = await config.api.row.save(otherTable._id!, {
name: "test",
description: "test",
relationship: [row._id],
})
row = (await config.api.row.get(table._id!, row._id!)).body
expect(row.relationship.length).toBe(1)
const resp = await config.api.row.patch(table._id!, {
_id: row._id!,
_rev: row._rev!,
tableId: row.tableId!,
name: "test2",
relationship: [row2._id],
})
expect(resp.relationship.length).toBe(1)
})
})
describe("destroy", () => {

View file

@ -1,5 +1,6 @@
import {
Datasource,
FieldType,
ManyToManyRelationshipFieldMetadata,
ManyToOneRelationshipFieldMetadata,
OneToManyRelationshipFieldMetadata,
@ -42,10 +43,13 @@ export function cleanupRelationships(
for (let [relatedKey, relatedSchema] of Object.entries(
relatedTable.schema
)) {
if (
relatedSchema.type === FieldTypes.LINK &&
relatedSchema.fieldName === foreignKey
) {
if (relatedSchema.type !== FieldType.LINK) {
continue
}
// if they both have the same field name it will appear as if it needs to be removed,
// don't cleanup in this scenario
const sameFieldNameForBoth = relatedSchema.name === schema.name
if (relatedSchema.fieldName === foreignKey && !sameFieldNameForBoth) {
delete relatedTable.schema[relatedKey]
}
}