fix: detach relation records in cache on record deletion (#3707)

* fix: detach relation records in cache on record deletion

* fix: fix useGetRelationMetadata tests
This commit is contained in:
Thaïs
2024-01-31 07:36:26 -03:00
committed by GitHub
parent 9597b1ae41
commit 29339ef99a
19 changed files with 465 additions and 325 deletions

View File

@ -0,0 +1,70 @@
import { ReactNode, useEffect } from 'react';
import { MockedProvider } from '@apollo/client/testing';
import { renderHook } from '@testing-library/react';
import { RecoilRoot, useSetRecoilState } from 'recoil';
import { useGetRelationMetadata } from '@/object-metadata/hooks/useGetRelationMetadata';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
import { TestApolloMetadataClientProvider } from '../__mocks__/ApolloMetadataClientProvider';
const Wrapper = ({ children }: { children: ReactNode }) => (
<RecoilRoot>
<MockedProvider addTypename={false}>
<TestApolloMetadataClientProvider>
{children}
</TestApolloMetadataClientProvider>
</MockedProvider>
</RecoilRoot>
);
describe('useGetRelationMetadata', () => {
it('should return correct properties', async () => {
const objectMetadataItems = getObjectMetadataItemsMock();
const objectMetadata = objectMetadataItems.find(
(item) => item.nameSingular === 'person',
)!;
const fieldMetadataItem = objectMetadata.fields.find(
(field) => field.name === 'opportunities',
)!;
const { result } = renderHook(
() => {
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
useEffect(() => {
setMetadataItems(objectMetadataItems);
}, [setMetadataItems]);
return useGetRelationMetadata();
},
{
wrapper: Wrapper,
initialProps: {},
},
);
const {
relationFieldMetadataItem,
relationObjectMetadataItem,
relationType,
} = result.current({ fieldMetadataItem }) ?? {};
const expectedRelationObjectMetadataItem = objectMetadataItems.find(
(item) => item.nameSingular === 'opportunity',
);
const expectedRelationFieldMetadataItem =
expectedRelationObjectMetadataItem?.fields.find(
(field) => field.name === 'person',
);
expect(relationObjectMetadataItem).toEqual(
expectedRelationObjectMetadataItem,
);
expect(relationFieldMetadataItem).toEqual(
expectedRelationFieldMetadataItem,
);
expect(relationType).toBe('ONE_TO_MANY');
});
});

View File

@ -1,55 +0,0 @@
import { ReactNode } from 'react';
import { MockedProvider } from '@apollo/client/testing';
import { renderHook } from '@testing-library/react';
import { RecoilRoot } from 'recoil';
import { useRelationMetadata } from '@/object-metadata/hooks/useRelationMetadata';
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
import { TestApolloMetadataClientProvider } from '../__mocks__/ApolloMetadataClientProvider';
const Wrapper = ({ children }: { children: ReactNode }) => (
<RecoilRoot>
<MockedProvider addTypename={false}>
<TestApolloMetadataClientProvider>
{children}
</TestApolloMetadataClientProvider>
</MockedProvider>
</RecoilRoot>
);
describe('useRelationMetadata', () => {
it('should return correct properties', async () => {
const { result, rerender } = renderHook(
({ fieldMetadataItem }: { fieldMetadataItem?: FieldMetadataItem }) =>
useRelationMetadata({ fieldMetadataItem }),
{
wrapper: Wrapper,
initialProps: {},
},
);
const {
relationFieldMetadataItem,
relationObjectMetadataItem,
relationType,
} = result.current;
expect(relationFieldMetadataItem).toBeUndefined();
expect(relationObjectMetadataItem).toBeUndefined();
expect(relationType).toBeUndefined();
const objectMetadataItems = getObjectMetadataItemsMock();
const objectMetadata = objectMetadataItems.find(
(item) => item.nameSingular === 'person',
)!;
const fieldMetadataItem = objectMetadata.fields.find(
(field) => field.name === 'opportunities',
)!;
rerender({ fieldMetadataItem });
expect(result.current.relationType).toBe('ONE_TO_MANY');
});
});