7338 refactor actionbar and contextmenu to use the context store (#7462)
Closes #7338
This commit is contained in:
@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
@ -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);
|
||||
});
|
||||
});
|
||||
@ -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,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user