@@ -4,10 +4,64 @@ import { createOneObjectMetadata } from 'test/integration/metadata/suites/object
44import { deleteOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/delete-one-object-metadata.util' ;
55import { updateOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/update-one-object-metadata.util' ;
66import { makeMetadataAPIRequest } from 'test/integration/metadata/suites/utils/make-metadata-api-request.util' ;
7+ import {
8+ eachTestingContextFilter ,
9+ type EachTestingContext ,
10+ } from 'twenty-shared/testing' ;
711import { FieldMetadataType } from 'twenty-shared/types' ;
812
913import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface' ;
1014
15+ const allTestsUseCases : EachTestingContext < {
16+ nameSingular : string ;
17+ namePlural : string ;
18+ labelSingular : string ;
19+ labelPlural : string ;
20+ isLabelSyncedWithName : boolean ;
21+ newJoinColumnName : string | undefined ;
22+ relationType : RelationType ;
23+ } > [ ] = [
24+ {
25+ title :
26+ 'should rename custom object, and update both the field name and join column name of the morph relation that contains the object name' ,
27+ context : {
28+ nameSingular : 'personForRenameSecond2' ,
29+ namePlural : 'peopleForRenameSecond2' ,
30+ labelSingular : 'Person For Rename2' ,
31+ labelPlural : 'People For Rename2' ,
32+ isLabelSyncedWithName : false ,
33+ newJoinColumnName : 'ownerPersonForRenameSecond2Id' ,
34+ relationType : RelationType . MANY_TO_ONE ,
35+ } ,
36+ } ,
37+ {
38+ title :
39+ 'should rename custom object, and update both the field name and join column name of the morph relation that contains the object name if label is sync with name' ,
40+ context : {
41+ nameSingular : 'personForRenameSecond3' ,
42+ namePlural : 'peopleForRenameSecond3' ,
43+ labelSingular : 'person For Rename Second3' ,
44+ labelPlural : 'people For Rename Second3' ,
45+ isLabelSyncedWithName : true ,
46+ newJoinColumnName : 'ownerPersonForRenameSecond3Id' ,
47+ relationType : RelationType . MANY_TO_ONE ,
48+ } ,
49+ } ,
50+ {
51+ title :
52+ 'should rename custom object, and update both the field name and join column name of the morph relation that contains the object name with ONE_TO_MANY relation type' ,
53+ context : {
54+ nameSingular : 'personForRenameSecond4' ,
55+ namePlural : 'peopleForRenameSecond4' ,
56+ labelSingular : 'Person For Rename Second4' ,
57+ labelPlural : 'People For Rename Second4' ,
58+ isLabelSyncedWithName : true ,
59+ newJoinColumnName : undefined ,
60+ relationType : RelationType . ONE_TO_MANY ,
61+ } ,
62+ } ,
63+ ] ;
64+
1165describe ( 'Rename an object metadata with morph relation should succeed' , ( ) => {
1266 let createdObjectMetadataPersonId : string ;
1367 let createdObjectMetadataOpportunityId : string ;
@@ -83,112 +137,74 @@ describe('Rename an object metadata with morph relation should succeed', () => {
83137 }
84138 } ) ;
85139
86- it ( 'should rename custom object, and update both the field name and join column name of the morph relation that contains the object name' , async ( ) => {
87- const morphRelationField = await createMorphRelationBetweenObjects ( {
88- name : 'owner' ,
89- objectMetadataId : createdObjectMetadataOpportunityId ,
90- firstTargetObjectMetadataId : createdObjectMetadataPersonId ,
91- secondTargetObjectMetadataId : createdObjectMetadataCompanyId ,
92- type : FieldMetadataType . MORPH_RELATION ,
93- relationType : RelationType . MANY_TO_ONE ,
94- } ) ;
95-
96- expect ( morphRelationField . morphRelations . length ) . toBe ( 2 ) ;
97-
98- const { data } = await updateOneObjectMetadata ( {
99- expectToFail : false ,
100- gqlFields : `
101- nameSingular
102- labelSingular
103- namePlural
104- labelPlural
105- ` ,
106- input : {
107- idToUpdate : createdObjectMetadataPersonId ,
108- updatePayload : {
109- nameSingular : 'personForRenameSecond2' ,
110- namePlural : 'peopleForRenameSecond2' ,
111- labelSingular : 'Person For Rename2' ,
112- labelPlural : 'People For Rename2' ,
113- } ,
114- } ,
115- } ) ;
116-
117- expect ( data . updateOneObject . nameSingular ) . toBe ( 'personForRenameSecond2' ) ;
118-
119- const ownerFieldMetadataOnPersonId = morphRelationField . morphRelations . find (
120- ( morphRelation ) =>
121- morphRelation . targetObjectMetadata . id === createdObjectMetadataPersonId ,
122- ) ?. sourceFieldMetadata . id ;
123-
124- if ( ! ownerFieldMetadataOnPersonId ) {
125- throw new Error (
126- 'Morph Relation Error: Owner field metadata on person not found' ,
127- ) ;
128- }
129-
130- const fieldAfterRenaming = await findFieldMetadata ( {
131- fieldMetadataId : ownerFieldMetadataOnPersonId ,
132- } ) ;
133-
134- expect ( fieldAfterRenaming . settings . joinColumnName ) . toBe (
135- 'ownerPersonForRenameSecond2Id' ,
136- ) ;
137- } ) ;
138-
139- it ( 'should rename custom object, and update both the field name and join column name of the morph relation that contains the object name if label is sync with name' , async ( ) => {
140- const morphRelationField = await createMorphRelationBetweenObjects ( {
141- name : 'owner' ,
142- objectMetadataId : createdObjectMetadataOpportunityId ,
143- firstTargetObjectMetadataId : createdObjectMetadataPersonId ,
144- secondTargetObjectMetadataId : createdObjectMetadataCompanyId ,
145- type : FieldMetadataType . MORPH_RELATION ,
146- relationType : RelationType . MANY_TO_ONE ,
147- } ) ;
140+ it . each ( eachTestingContextFilter ( allTestsUseCases ) ) (
141+ '$title' ,
142+ async ( { context } ) => {
143+ const {
144+ nameSingular,
145+ namePlural,
146+ labelSingular,
147+ labelPlural,
148+ isLabelSyncedWithName,
149+ newJoinColumnName,
150+ relationType,
151+ } = context ;
152+
153+ const morphRelationField = await createMorphRelationBetweenObjects ( {
154+ name : 'owner' ,
155+ objectMetadataId : createdObjectMetadataOpportunityId ,
156+ firstTargetObjectMetadataId : createdObjectMetadataPersonId ,
157+ secondTargetObjectMetadataId : createdObjectMetadataCompanyId ,
158+ type : FieldMetadataType . MORPH_RELATION ,
159+ relationType,
160+ } ) ;
148161
149- expect ( morphRelationField . morphRelations . length ) . toBe ( 2 ) ;
162+ expect ( morphRelationField . morphRelations . length ) . toBe ( 2 ) ;
150163
151- const { data } = await updateOneObjectMetadata ( {
152- expectToFail : false ,
153- gqlFields : `
164+ const { data } = await updateOneObjectMetadata ( {
165+ expectToFail : false ,
166+ gqlFields : `
154167 nameSingular
155168 labelSingular
156169 namePlural
157170 labelPlural
158171 ` ,
159- input : {
160- idToUpdate : createdObjectMetadataPersonId ,
161- updatePayload : {
162- nameSingular : 'personForRenameSecond2' ,
163- namePlural : 'peopleForRenameSecond2' ,
164- labelSingular : 'person For Rename Second2' ,
165- labelPlural : 'people For Rename Second2' ,
166- isLabelSyncedWithName : true ,
172+ input : {
173+ idToUpdate : createdObjectMetadataPersonId ,
174+ updatePayload : {
175+ nameSingular,
176+ namePlural,
177+ labelSingular,
178+ labelPlural,
179+ isLabelSyncedWithName,
180+ } ,
167181 } ,
168- } ,
169- } ) ;
182+ } ) ;
170183
171- expect ( data . updateOneObject . nameSingular ) . toBe ( 'personForRenameSecond2' ) ;
184+ expect ( data . updateOneObject . nameSingular ) . toBe ( nameSingular ) ;
172185
173- const ownerFieldMetadataOnPersonId = morphRelationField . morphRelations . find (
174- ( morphRelation ) =>
175- morphRelation . targetObjectMetadata . id === createdObjectMetadataPersonId ,
176- ) ?. sourceFieldMetadata . id ;
186+ const ownerFieldMetadataOnPersonId =
187+ morphRelationField . morphRelations . find (
188+ ( morphRelation ) =>
189+ morphRelation . targetObjectMetadata . id ===
190+ createdObjectMetadataPersonId ,
191+ ) ?. sourceFieldMetadata . id ;
177192
178- if ( ! ownerFieldMetadataOnPersonId ) {
179- throw new Error (
180- 'Morph Relation Error: Owner field metadata on person not found' ,
181- ) ;
182- }
193+ if ( ! ownerFieldMetadataOnPersonId ) {
194+ throw new Error (
195+ 'Morph Relation Error: Owner field metadata on person not found' ,
196+ ) ;
197+ }
183198
184- const fieldAfterRenaming = await findFieldMetadata ( {
185- fieldMetadataId : ownerFieldMetadataOnPersonId ,
186- } ) ;
199+ const fieldAfterRenaming = await findFieldMetadata ( {
200+ fieldMetadataId : ownerFieldMetadataOnPersonId ,
201+ } ) ;
187202
188- expect ( fieldAfterRenaming . settings . joinColumnName ) . toBe (
189- 'ownerPersonForRenameSecond2Id' ,
190- ) ;
191- } ) ;
203+ expect ( fieldAfterRenaming . settings . joinColumnName ) . toBe (
204+ newJoinColumnName ,
205+ ) ;
206+ } ,
207+ ) ;
192208} ) ;
193209
194210const findFieldMetadata = async ( {
0 commit comments