fix: fix Apollo client cache update error for Links field (#5473)
Fixes #5437
This commit is contained in:
@ -0,0 +1,80 @@
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import {
|
||||
mockedObjectMetadataItems,
|
||||
mockedPersonObjectMetadataItem,
|
||||
} from '~/testing/mock-data/metadata';
|
||||
import { mockedPeopleData } from '~/testing/mock-data/people';
|
||||
|
||||
import { getRecordNodeFromRecord } from '../getRecordNodeFromRecord';
|
||||
|
||||
describe('getRecordNodeFromRecord', () => {
|
||||
it('computes relation records cache references by default', () => {
|
||||
// Given
|
||||
const objectMetadataItems: ObjectMetadataItem[] = mockedObjectMetadataItems;
|
||||
const objectMetadataItem: Pick<
|
||||
ObjectMetadataItem,
|
||||
'fields' | 'namePlural' | 'nameSingular'
|
||||
> = mockedPersonObjectMetadataItem;
|
||||
const recordGqlFields = {
|
||||
name: true,
|
||||
company: true,
|
||||
};
|
||||
const record = mockedPeopleData[0];
|
||||
|
||||
// When
|
||||
const result = getRecordNodeFromRecord({
|
||||
objectMetadataItems,
|
||||
objectMetadataItem,
|
||||
recordGqlFields,
|
||||
record,
|
||||
});
|
||||
|
||||
// Then
|
||||
expect(result).toEqual({
|
||||
__typename: 'Person',
|
||||
company: {
|
||||
__ref: 'Company:5c21e19e-e049-4393-8c09-3e3f8fb09ecb',
|
||||
},
|
||||
name: {
|
||||
__typename: 'FullName',
|
||||
firstName: 'Alexandre',
|
||||
lastName: 'Prot',
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it('does not compute relation records cache references when `computeReferences` is false', () => {
|
||||
// Given
|
||||
const objectMetadataItems: ObjectMetadataItem[] = mockedObjectMetadataItems;
|
||||
const objectMetadataItem: Pick<
|
||||
ObjectMetadataItem,
|
||||
'fields' | 'namePlural' | 'nameSingular'
|
||||
> = mockedPersonObjectMetadataItem;
|
||||
const recordGqlFields = {
|
||||
name: true,
|
||||
company: true,
|
||||
};
|
||||
const record = mockedPeopleData[0];
|
||||
const computeReferences = false;
|
||||
|
||||
// When
|
||||
const result = getRecordNodeFromRecord({
|
||||
objectMetadataItems,
|
||||
objectMetadataItem,
|
||||
recordGqlFields,
|
||||
record,
|
||||
computeReferences,
|
||||
});
|
||||
|
||||
// Then
|
||||
expect(result).toEqual({
|
||||
__typename: 'Person',
|
||||
company: record.company,
|
||||
name: {
|
||||
__typename: 'FullName',
|
||||
firstName: 'Alexandre',
|
||||
lastName: 'Prot',
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -11,7 +11,7 @@ import {
|
||||
RelationDefinitionType,
|
||||
} from '~/generated-metadata/graphql';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { lowerAndCapitalize } from '~/utils/string/lowerAndCapitalize';
|
||||
import { pascalCase } from '~/utils/string/pascalCase';
|
||||
|
||||
export const getRecordNodeFromRecord = <T extends ObjectRecord>({
|
||||
objectMetadataItems,
|
||||
@ -129,6 +129,7 @@ export const getRecordNodeFromRecord = <T extends ObjectRecord>({
|
||||
];
|
||||
}
|
||||
case FieldMetadataType.Link:
|
||||
case FieldMetadataType.Links:
|
||||
case FieldMetadataType.Address:
|
||||
case FieldMetadataType.FullName:
|
||||
case FieldMetadataType.Currency: {
|
||||
@ -136,7 +137,7 @@ export const getRecordNodeFromRecord = <T extends ObjectRecord>({
|
||||
fieldName,
|
||||
{
|
||||
...value,
|
||||
__typename: lowerAndCapitalize(field.type),
|
||||
__typename: pascalCase(field.type),
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@ -49,11 +49,11 @@ export const responseData = {
|
||||
personDuplicates: {
|
||||
edges: [
|
||||
{
|
||||
node: { __typename: 'Person', ...mockedPeopleData[0], updatedAt: '' },
|
||||
node: { ...mockedPeopleData[0], updatedAt: '' },
|
||||
cursor: 'cursor1',
|
||||
},
|
||||
{
|
||||
node: { __typename: 'Person', ...mockedPeopleData[1], updatedAt: '' },
|
||||
node: { ...mockedPeopleData[1], updatedAt: '' },
|
||||
cursor: 'cursor2',
|
||||
},
|
||||
],
|
||||
|
||||
@ -19,7 +19,7 @@ export const generateEmptyFieldValue = (
|
||||
};
|
||||
}
|
||||
case FieldMetadataType.Links: {
|
||||
return { primaryLinkUrl: '', primaryLinkLabel: '' };
|
||||
return { primaryLinkUrl: '', primaryLinkLabel: '', secondaryLinks: null };
|
||||
}
|
||||
case FieldMetadataType.FullName: {
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user