fix: updated dryrun to return correct populated record (#15484)

## Description

- This PR approaches to solve
https://github.com/twentyhq/twenty/issues/15201
- updated `createDryRunResponse` to return fully populated merged record
- this way the frontend can render the populated data it as-is without
recomputing relations
- Dry-run now uses the same nested-relations population path as the
non-dryRun flow

---------

Co-authored-by: Etienne <45695613+etiennejouan@users.noreply.github.com>
This commit is contained in:
Harshit Singh
2025-11-03 18:20:14 +05:30
committed by GitHub
parent 120cec9885
commit 9e1c854b27
3 changed files with 69 additions and 21 deletions
@@ -1,4 +1,4 @@
import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataType, type RelationType } from 'twenty-shared/types';
import { type EmailsMetadata } from 'src/engine/metadata-modules/field-metadata/composite-types/emails.composite-type';
import { type LinksMetadata } from 'src/engine/metadata-modules/field-metadata/composite-types/links.composite-type';
@@ -8,18 +8,32 @@ import { mergeArrayFieldValues } from './merge-array-field-values.util';
import { mergeEmailsFieldValues } from './merge-emails-field-values.util';
import { mergeLinksFieldValues } from './merge-links-field-values.util';
import { mergePhonesFieldValues } from './merge-phones-field-values.util';
import { mergeRelationFieldValuesForDryRunRecord } from './merge-relation-field-values-for-dry-run-record.util';
import { selectPriorityFieldValue } from './select-priority-field-value.util';
export const mergeFieldValues = (
fieldType: FieldMetadataType,
recordsWithValues: { value: unknown; recordId: string }[],
priorityRecordId: string,
isDryRun = false,
relationType?: RelationType,
): unknown => {
switch (fieldType) {
case FieldMetadataType.ARRAY:
case FieldMetadataType.MULTI_SELECT:
return mergeArrayFieldValues(recordsWithValues);
case FieldMetadataType.RELATION:
if (isDryRun) {
return mergeRelationFieldValuesForDryRunRecord(
recordsWithValues,
relationType,
priorityRecordId,
);
}
return selectPriorityFieldValue(recordsWithValues, priorityRecordId);
case FieldMetadataType.EMAILS:
return mergeEmailsFieldValues(
recordsWithValues as { value: EmailsMetadata; recordId: string }[],