Failing morph relation creation v2 integration testing & fixes (#14253)
# Introduction closes https://github.com/twentyhq/core-team-issues/issues/1408
This commit is contained in:
+20
-61
@@ -75,7 +75,11 @@ exports[`Workspace migration builder field actions test suite It should build an
|
||||
"options": null,
|
||||
"relationTargetFieldMetadataId": Any<String>,
|
||||
"relationTargetObjectMetadataId": Any<String>,
|
||||
"settings": null,
|
||||
"settings": {
|
||||
"joinColumnName": "sourceWhatever",
|
||||
"onDelete": undefined,
|
||||
"relationType": "ONE_TO_MANY",
|
||||
},
|
||||
"standardId": null,
|
||||
"standardOverrides": null,
|
||||
"type": "RELATION",
|
||||
@@ -126,7 +130,11 @@ exports[`Workspace migration builder field actions test suite It should build an
|
||||
"options": null,
|
||||
"relationTargetFieldMetadataId": Any<String>,
|
||||
"relationTargetObjectMetadataId": Any<String>,
|
||||
"settings": null,
|
||||
"settings": {
|
||||
"joinColumnName": "whatever",
|
||||
"onDelete": undefined,
|
||||
"relationType": "MANY_TO_ONE",
|
||||
},
|
||||
"standardId": null,
|
||||
"standardOverrides": null,
|
||||
"type": "RELATION",
|
||||
@@ -145,33 +153,6 @@ exports[`Workspace migration builder field actions test suite It should build an
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "default flat field metadata description",
|
||||
"flatRelationTargetFieldMetadata": {
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "default flat field metadata description",
|
||||
"icon": "icon",
|
||||
"id": Any<String>,
|
||||
"isActive": true,
|
||||
"isCustom": true,
|
||||
"isLabelSyncedWithName": false,
|
||||
"isNullable": true,
|
||||
"isSystem": false,
|
||||
"isUIReadOnly": false,
|
||||
"isUnique": false,
|
||||
"label": "flat field metadata label",
|
||||
"name": "flatFieldMetadataName",
|
||||
"objectMetadataId": Any<String>,
|
||||
"options": null,
|
||||
"relationTargetFieldMetadataId": Any<String>,
|
||||
"relationTargetObjectMetadataId": Any<String>,
|
||||
"settings": null,
|
||||
"standardId": null,
|
||||
"standardOverrides": null,
|
||||
"type": "RELATION",
|
||||
"universalIdentifier": Any<String>,
|
||||
"updatedAt": Any<String>,
|
||||
"workspaceId": Any<String>,
|
||||
},
|
||||
"flatRelationTargetObjectMetadata": {
|
||||
"createdAt": Any<String>,
|
||||
"description": "A rocket",
|
||||
@@ -215,7 +196,11 @@ exports[`Workspace migration builder field actions test suite It should build an
|
||||
"options": null,
|
||||
"relationTargetFieldMetadataId": Any<String>,
|
||||
"relationTargetObjectMetadataId": Any<String>,
|
||||
"settings": null,
|
||||
"settings": {
|
||||
"joinColumnName": "whatever",
|
||||
"onDelete": undefined,
|
||||
"relationType": "MANY_TO_ONE",
|
||||
},
|
||||
"standardId": null,
|
||||
"standardOverrides": null,
|
||||
"type": "RELATION",
|
||||
@@ -266,7 +251,11 @@ exports[`Workspace migration builder field actions test suite It should build an
|
||||
"options": null,
|
||||
"relationTargetFieldMetadataId": Any<String>,
|
||||
"relationTargetObjectMetadataId": Any<String>,
|
||||
"settings": null,
|
||||
"settings": {
|
||||
"joinColumnName": "sourceWhatever",
|
||||
"onDelete": undefined,
|
||||
"relationType": "ONE_TO_MANY",
|
||||
},
|
||||
"standardId": null,
|
||||
"standardOverrides": null,
|
||||
"type": "RELATION",
|
||||
@@ -647,8 +636,6 @@ exports[`Workspace migration builder object actions test suite It should build a
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "TimelineActivities Rocket",
|
||||
"flatRelationTargetFieldMetadata": null,
|
||||
"flatRelationTargetObjectMetadata": null,
|
||||
"icon": "IconBuildingSkyscraper",
|
||||
"id": Any<String>,
|
||||
"isActive": true,
|
||||
@@ -713,8 +700,6 @@ exports[`Workspace migration builder object actions test suite It should build a
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "Favorites Rocket",
|
||||
"flatRelationTargetFieldMetadata": null,
|
||||
"flatRelationTargetObjectMetadata": null,
|
||||
"icon": "IconBuildingSkyscraper",
|
||||
"id": Any<String>,
|
||||
"isActive": true,
|
||||
@@ -779,8 +764,6 @@ exports[`Workspace migration builder object actions test suite It should build a
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "Attachments Rocket",
|
||||
"flatRelationTargetFieldMetadata": null,
|
||||
"flatRelationTargetObjectMetadata": null,
|
||||
"icon": "IconBuildingSkyscraper",
|
||||
"id": Any<String>,
|
||||
"isActive": true,
|
||||
@@ -845,8 +828,6 @@ exports[`Workspace migration builder object actions test suite It should build a
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "NoteTargets Rocket",
|
||||
"flatRelationTargetFieldMetadata": null,
|
||||
"flatRelationTargetObjectMetadata": null,
|
||||
"icon": "IconBuildingSkyscraper",
|
||||
"id": Any<String>,
|
||||
"isActive": true,
|
||||
@@ -911,8 +892,6 @@ exports[`Workspace migration builder object actions test suite It should build a
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "TaskTargets Rocket",
|
||||
"flatRelationTargetFieldMetadata": null,
|
||||
"flatRelationTargetObjectMetadata": null,
|
||||
"icon": "IconBuildingSkyscraper",
|
||||
"id": Any<String>,
|
||||
"isActive": true,
|
||||
@@ -1126,8 +1105,6 @@ exports[`Workspace migration builder object actions test suite It should build a
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "NoteTargets Pet",
|
||||
"flatRelationTargetFieldMetadata": null,
|
||||
"flatRelationTargetObjectMetadata": null,
|
||||
"icon": "IconBuildingSkyscraper",
|
||||
"id": Any<String>,
|
||||
"isActive": true,
|
||||
@@ -1419,8 +1396,6 @@ exports[`Workspace migration builder object actions test suite It should build a
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "TimelineActivities Pet",
|
||||
"flatRelationTargetFieldMetadata": null,
|
||||
"flatRelationTargetObjectMetadata": null,
|
||||
"icon": "IconBuildingSkyscraper",
|
||||
"id": Any<String>,
|
||||
"isActive": true,
|
||||
@@ -1485,8 +1460,6 @@ exports[`Workspace migration builder object actions test suite It should build a
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "Favorites Pet",
|
||||
"flatRelationTargetFieldMetadata": null,
|
||||
"flatRelationTargetObjectMetadata": null,
|
||||
"icon": "IconBuildingSkyscraper",
|
||||
"id": Any<String>,
|
||||
"isActive": true,
|
||||
@@ -1551,8 +1524,6 @@ exports[`Workspace migration builder object actions test suite It should build a
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "Attachments Pet",
|
||||
"flatRelationTargetFieldMetadata": null,
|
||||
"flatRelationTargetObjectMetadata": null,
|
||||
"icon": "IconBuildingSkyscraper",
|
||||
"id": Any<String>,
|
||||
"isActive": true,
|
||||
@@ -1617,8 +1588,6 @@ exports[`Workspace migration builder object actions test suite It should build a
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "TaskTargets Pet",
|
||||
"flatRelationTargetFieldMetadata": null,
|
||||
"flatRelationTargetObjectMetadata": null,
|
||||
"icon": "IconBuildingSkyscraper",
|
||||
"id": Any<String>,
|
||||
"isActive": true,
|
||||
@@ -2811,8 +2780,6 @@ exports[`Workspace migration builder object actions test suite It should build a
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "TimelineActivities Rocket",
|
||||
"flatRelationTargetFieldMetadata": null,
|
||||
"flatRelationTargetObjectMetadata": null,
|
||||
"icon": "IconBuildingSkyscraper",
|
||||
"id": Any<String>,
|
||||
"isActive": true,
|
||||
@@ -2877,8 +2844,6 @@ exports[`Workspace migration builder object actions test suite It should build a
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "Favorites Rocket",
|
||||
"flatRelationTargetFieldMetadata": null,
|
||||
"flatRelationTargetObjectMetadata": null,
|
||||
"icon": "IconBuildingSkyscraper",
|
||||
"id": Any<String>,
|
||||
"isActive": true,
|
||||
@@ -2943,8 +2908,6 @@ exports[`Workspace migration builder object actions test suite It should build a
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "Attachments Rocket",
|
||||
"flatRelationTargetFieldMetadata": null,
|
||||
"flatRelationTargetObjectMetadata": null,
|
||||
"icon": "IconBuildingSkyscraper",
|
||||
"id": Any<String>,
|
||||
"isActive": true,
|
||||
@@ -3009,8 +2972,6 @@ exports[`Workspace migration builder object actions test suite It should build a
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "NoteTargets Rocket",
|
||||
"flatRelationTargetFieldMetadata": null,
|
||||
"flatRelationTargetObjectMetadata": null,
|
||||
"icon": "IconBuildingSkyscraper",
|
||||
"id": Any<String>,
|
||||
"isActive": true,
|
||||
@@ -3075,8 +3036,6 @@ exports[`Workspace migration builder object actions test suite It should build a
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": null,
|
||||
"description": "TaskTargets Rocket",
|
||||
"flatRelationTargetFieldMetadata": null,
|
||||
"flatRelationTargetObjectMetadata": null,
|
||||
"icon": "IconBuildingSkyscraper",
|
||||
"id": Any<String>,
|
||||
"isActive": true,
|
||||
|
||||
+36
-19
@@ -6,8 +6,10 @@ import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfa
|
||||
|
||||
import { COMPANY_FLAT_FIELDS_MOCK } from 'src/engine/metadata-modules/flat-field-metadata/__mocks__/company-flat-fields.mock';
|
||||
import { getFlatFieldMetadataMock } from 'src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock';
|
||||
import { getMorphOrRelationTargetFlatFieldMetadataMock } from 'src/engine/metadata-modules/flat-field-metadata/__mocks__/get-morph-or-relation-target-flat-field-metadata-mock';
|
||||
import { OPPORTUNITY_FLAT_FIELDS_MOCK } from 'src/engine/metadata-modules/flat-field-metadata/__mocks__/opportunity-flat-fields.mock';
|
||||
import { PET_FLAT_FIELDS_MOCK } from 'src/engine/metadata-modules/flat-field-metadata/__mocks__/pet-flat-fields.mock';
|
||||
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||
import { FLAT_OBJECT_METADATA_MAPS_MOCKS } from 'src/engine/metadata-modules/flat-object-metadata-maps/mocks/flat-object-metadata-maps.mock';
|
||||
import { addFlatFieldMetadataInFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/add-flat-field-metadata-in-flat-object-metadata-maps-or-throw.util';
|
||||
import { deleteFieldFromFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/delete-field-from-flat-object-metadata-maps-or-throw.util';
|
||||
@@ -27,39 +29,54 @@ const relationTestCases: WorkspaceMigrationBuilderTestCase[] = [
|
||||
input: () => {
|
||||
const targetRelationId = faker.string.uuid();
|
||||
const sourceRelationId = faker.string.uuid();
|
||||
const sourceRelationFlatField = getFlatFieldMetadataMock({
|
||||
id: sourceRelationId,
|
||||
universalIdentifier: 'field-metadata-unique-identifier-1',
|
||||
objectMetadataId: PET_FLAT_OBJECT_MOCK.id,
|
||||
type: FieldMetadataType.RELATION,
|
||||
relationTargetFieldMetadataId: targetRelationId,
|
||||
relationTargetObjectMetadataId: ROCKET_FLAT_OBJECT_MOCK.id,
|
||||
flatRelationTargetFieldMetadata: undefined,
|
||||
flatRelationTargetObjectMetadata:
|
||||
fromFlatObjectMetadataToFlatObjectMetadataWithoutFields(
|
||||
ROCKET_FLAT_OBJECT_MOCK,
|
||||
),
|
||||
});
|
||||
const draftSourceRelationFlatField =
|
||||
getMorphOrRelationTargetFlatFieldMetadataMock({
|
||||
id: sourceRelationId,
|
||||
universalIdentifier: 'field-metadata-unique-identifier-1',
|
||||
objectMetadataId: PET_FLAT_OBJECT_MOCK.id,
|
||||
type: FieldMetadataType.RELATION,
|
||||
settings: {
|
||||
relationType: RelationType.MANY_TO_ONE,
|
||||
joinColumnName: 'whatever',
|
||||
onDelete: undefined,
|
||||
},
|
||||
relationTargetFieldMetadataId: targetRelationId,
|
||||
relationTargetObjectMetadataId: ROCKET_FLAT_OBJECT_MOCK.id,
|
||||
flatRelationTargetObjectMetadata:
|
||||
fromFlatObjectMetadataToFlatObjectMetadataWithoutFields(
|
||||
ROCKET_FLAT_OBJECT_MOCK,
|
||||
),
|
||||
});
|
||||
|
||||
const targetRelationFlatField = getFlatFieldMetadataMock({
|
||||
id: targetRelationId,
|
||||
universalIdentifier: 'field-metadata-unique-identifier-2',
|
||||
objectMetadataId: ROCKET_FLAT_OBJECT_MOCK.id,
|
||||
type: FieldMetadataType.RELATION,
|
||||
settings: {
|
||||
relationType: RelationType.ONE_TO_MANY,
|
||||
joinColumnName: 'sourceWhatever',
|
||||
onDelete: undefined,
|
||||
},
|
||||
relationTargetFieldMetadataId: sourceRelationId,
|
||||
relationTargetObjectMetadataId: PET_FLAT_OBJECT_MOCK.id,
|
||||
flatRelationTargetFieldMetadata: sourceRelationFlatField,
|
||||
flatRelationTargetFieldMetadata: draftSourceRelationFlatField,
|
||||
flatRelationTargetObjectMetadata:
|
||||
fromFlatObjectMetadataToFlatObjectMetadataWithoutFields(
|
||||
PET_FLAT_OBJECT_MOCK,
|
||||
),
|
||||
});
|
||||
|
||||
sourceRelationFlatField.flatRelationTargetFieldMetadata =
|
||||
removePropertiesFromRecord(targetRelationFlatField, [
|
||||
'flatRelationTargetFieldMetadata',
|
||||
'flatRelationTargetObjectMetadata',
|
||||
]);
|
||||
const sourceRelationFlatField = getFlatFieldMetadataMock({
|
||||
...draftSourceRelationFlatField,
|
||||
flatRelationTargetFieldMetadata: removePropertiesFromRecord(
|
||||
targetRelationFlatField as FlatFieldMetadata<FieldMetadataType.RELATION>,
|
||||
[
|
||||
'flatRelationTargetFieldMetadata',
|
||||
'flatRelationTargetObjectMetadata',
|
||||
],
|
||||
),
|
||||
});
|
||||
const toFlatObjectMetadataMaps = [
|
||||
sourceRelationFlatField,
|
||||
targetRelationFlatField,
|
||||
|
||||
+4
-15
@@ -11,7 +11,8 @@ import {
|
||||
import { getCompositeTypeOrThrow } from 'src/engine/metadata-modules/field-metadata/utils/get-composite-type-or-throw.util';
|
||||
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||
import { isCompositeFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-composite-flat-field-metadata.util';
|
||||
import { isFlatFieldMetadataEntityOfType } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-type.util';
|
||||
import { isFlatFieldMetadataOfType } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-type.util';
|
||||
import { isMorphOrRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util';
|
||||
import { type FlatObjectMetadataWithoutFields } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
|
||||
import { fieldMetadataTypeToColumnType } from 'src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util';
|
||||
import { type WorkspaceSchemaColumnDefinition } from 'src/engine/twenty-orm/workspace-schema-manager/types/workspace-schema-column-definition.type';
|
||||
@@ -181,24 +182,12 @@ export const generateColumnDefinitions = ({
|
||||
}
|
||||
|
||||
if (
|
||||
isFlatFieldMetadataEntityOfType(
|
||||
flatFieldMetadata,
|
||||
FieldMetadataType.TS_VECTOR,
|
||||
)
|
||||
isFlatFieldMetadataOfType(flatFieldMetadata, FieldMetadataType.TS_VECTOR)
|
||||
) {
|
||||
return [generateTsVectorColumnDefinition(flatFieldMetadata)];
|
||||
}
|
||||
|
||||
if (
|
||||
isFlatFieldMetadataEntityOfType(
|
||||
flatFieldMetadata,
|
||||
FieldMetadataType.RELATION,
|
||||
) ||
|
||||
isFlatFieldMetadataEntityOfType(
|
||||
flatFieldMetadata,
|
||||
FieldMetadataType.MORPH_RELATION,
|
||||
)
|
||||
) {
|
||||
if (isMorphOrRelationFlatFieldMetadata(flatFieldMetadata)) {
|
||||
const relationColumn = generateRelationColumnDefinition(flatFieldMetadata);
|
||||
|
||||
return relationColumn ? [relationColumn] : [];
|
||||
|
||||
Reference in New Issue
Block a user