diff --git a/packages/twenty-front/src/modules/ui/utilities/recoil-scope/scopes-internal/hooks/__tests__/useAvailableScopeId.test.tsx b/packages/twenty-front/src/modules/ui/utilities/recoil-scope/scopes-internal/hooks/__tests__/useAvailableScopeId.test.tsx new file mode 100644 index 000000000..4187805be --- /dev/null +++ b/packages/twenty-front/src/modules/ui/utilities/recoil-scope/scopes-internal/hooks/__tests__/useAvailableScopeId.test.tsx @@ -0,0 +1,64 @@ +import React from 'react'; +import { renderHook } from '@testing-library/react'; + +import { useAvailableScopeIdOrThrow } from '@/ui/utilities/recoil-scope/scopes-internal/hooks/useAvailableScopeId'; +import { createScopeInternalContext } from '@/ui/utilities/recoil-scope/scopes-internal/utils/createScopeInternalContext'; + +const mockScopeIdFrom = { + Props: 'scopeIdFromProps', + Context: 'scopeIdFromContext', +}; +const MockedContext = createScopeInternalContext(); +const errorMessage = 'Scope id is not provided and cannot be found in context.'; + +const Wrapper = ({ children }: { children: React.ReactNode }) => ( + + {children} + +); + +describe('useAvailableScopeIdOrThrow', () => { + it('should return scopeIdFromProps if provided', () => { + const { + result: { + current: { availableScopeId }, + }, + } = renderHook( + () => ({ + availableScopeId: useAvailableScopeIdOrThrow( + MockedContext, + mockScopeIdFrom.Props, + ), + }), + { wrapper: Wrapper }, + ); + + expect(availableScopeId).toBe(mockScopeIdFrom.Props); + }); + + it('should return scopeIdFromContext if no scopeIdFromProps is present', () => { + const { + result: { + current: { availableScopeId }, + }, + } = renderHook( + () => ({ + availableScopeId: useAvailableScopeIdOrThrow(MockedContext), + }), + { wrapper: Wrapper }, + ); + + expect(availableScopeId).toBe(mockScopeIdFrom.Context); + }); + + it('should throw an error if no scopeId is provided and scopeId is undefined in the context', () => { + console.error = jest.fn(); + + const renderFunction = () => + renderHook(() => ({ + availableScopeId: useAvailableScopeIdOrThrow(MockedContext), + })); + + expect(renderFunction).toThrow(errorMessage); + }); +}); diff --git a/packages/twenty-front/src/modules/ui/utilities/recoil-scope/scopes-internal/hooks/__tests__/useScopeInternalContext.test.tsx b/packages/twenty-front/src/modules/ui/utilities/recoil-scope/scopes-internal/hooks/__tests__/useScopeInternalContext.test.tsx new file mode 100644 index 000000000..dcd7159d5 --- /dev/null +++ b/packages/twenty-front/src/modules/ui/utilities/recoil-scope/scopes-internal/hooks/__tests__/useScopeInternalContext.test.tsx @@ -0,0 +1,32 @@ +import { renderHook } from '@testing-library/react'; + +import { useScopeInternalContext } from '@/ui/utilities/recoil-scope/scopes-internal/hooks/useScopeInternalContext'; +import { createScopeInternalContext } from '@/ui/utilities/recoil-scope/scopes-internal/utils/createScopeInternalContext'; + +const scopeId = 'scopeId'; +const MockedContext = createScopeInternalContext(); + +const Wrapper = ({ children }: { children: React.ReactNode }) => ( + + {children} + +); + +describe('useScopeInternalContext', () => { + it('should work as expected', () => { + const { + result: { + current: { scopeInternalContext }, + }, + } = renderHook( + () => ({ + scopeInternalContext: useScopeInternalContext(MockedContext), + }), + { + wrapper: Wrapper, + }, + ); + + expect(scopeInternalContext!.scopeId).toBe(scopeId); + }); +});