Skip to content

Commit 1860144

Browse files
committed
refactor test suite for renaming object
1 parent 78e4e22 commit 1860144

File tree

1 file changed

+109
-93
lines changed

1 file changed

+109
-93
lines changed

packages/twenty-server/test/integration/metadata/suites/object-metadata/morph-relation/rename-object-metadata-with-morph-relation-v2.integration-spec.ts

Lines changed: 109 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,64 @@ import { createOneObjectMetadata } from 'test/integration/metadata/suites/object
44
import { deleteOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/delete-one-object-metadata.util';
55
import { updateOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/update-one-object-metadata.util';
66
import { makeMetadataAPIRequest } from 'test/integration/metadata/suites/utils/make-metadata-api-request.util';
7+
import {
8+
eachTestingContextFilter,
9+
type EachTestingContext,
10+
} from 'twenty-shared/testing';
711
import { FieldMetadataType } from 'twenty-shared/types';
812

913
import { 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+
1165
describe('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

194210
const findFieldMetadata = async ({

0 commit comments

Comments
 (0)