7338 refactor actionbar and contextmenu to use the context store (#7462)

Closes #7338
This commit is contained in:
Raphaël Bosi
2024-10-10 13:26:19 +02:00
committed by GitHub
parent 54c328a7e6
commit a7d5aa933d
84 changed files with 1481 additions and 954 deletions

View File

@ -1,5 +1,6 @@
import { renderHook } from '@testing-library/react';
import { ObjectMetadataItemNotFoundError } from '@/object-metadata/errors/ObjectMetadataNotFoundError';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
@ -25,4 +26,15 @@ describe('useObjectMetadataItem', () => {
expect(objectMetadataItem.id).toBe(opportunityObjectMetadata?.id);
});
it('should throw an error when invalid object name singular is provided', async () => {
expect(() =>
renderHook(
() => useObjectMetadataItem({ objectNameSingular: 'invalid-object' }),
{
wrapper: Wrapper,
},
),
).toThrow(ObjectMetadataItemNotFoundError);
});
});

View File

@ -0,0 +1,44 @@
import { renderHook } from '@testing-library/react';
import { ObjectMetadataItemNotFoundError } from '@/object-metadata/errors/ObjectMetadataNotFoundError';
import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: [],
});
describe('useObjectMetadataItemById', () => {
const opportunityObjectMetadata = generatedMockObjectMetadataItems.find(
(item) => item.nameSingular === 'opportunity',
);
if (!opportunityObjectMetadata) {
throw new Error('Opportunity object metadata not found');
}
it('should return correct properties', async () => {
const { result } = renderHook(
() =>
useObjectMetadataItemById({
objectId: opportunityObjectMetadata.id,
}),
{
wrapper: Wrapper,
},
);
const { objectMetadataItem } = result.current;
expect(objectMetadataItem.id).toBe(opportunityObjectMetadata.id);
});
it('should throw an error when invalid ID is provided', async () => {
expect(() =>
renderHook(() => useObjectMetadataItemById({ objectId: 'invalid-id' }), {
wrapper: Wrapper,
}),
).toThrow(ObjectMetadataItemNotFoundError);
});
});

View File

@ -0,0 +1,25 @@
import { useRecoilValue } from 'recoil';
import { ObjectMetadataItemNotFoundError } from '@/object-metadata/errors/ObjectMetadataNotFoundError';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { isDefined } from '~/utils/isDefined';
export const useObjectMetadataItemById = ({
objectId,
}: {
objectId: string;
}) => {
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
const objectMetadataItem = objectMetadataItems.find(
(objectMetadataItem) => objectMetadataItem.id === objectId,
);
if (!isDefined(objectMetadataItem)) {
throw new ObjectMetadataItemNotFoundError(objectId, objectMetadataItems);
}
return {
objectMetadataItem,
};
};