UNPKG

ruch

Version:

Revolutionary React TypeScript CLI with hexagonal architecture & AI-powered development assistance. Create maintainable, scalable applications with domain-driven design and integrated AI tooling.

120 lines (100 loc) 3.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getHookTestTemplate = void 0; const getHookTestTemplate = (domainName) => { const capitalizedName = domainName.charAt(0).toUpperCase() + domainName.slice(1); return `import { describe, it, expect, vi } from 'vitest'; import { renderHook, act } from '@testing-library/react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { use${capitalizedName}List, use${capitalizedName}Detail, use${capitalizedName}Create, use${capitalizedName}Update, use${capitalizedName}Delete } from './use${capitalizedName}'; import type { ${capitalizedName}Port } from '../ports/${capitalizedName}Port'; const createWrapper = () => { const queryClient = new QueryClient({ defaultOptions: { queries: { retry: false, }, }, }); return ({ children }: { children: React.ReactNode }) => ( <QueryClientProvider client={queryClient}>{children}</QueryClientProvider> ); }; describe('${capitalizedName} Hooks', () => { const mockPort: ${capitalizedName}Port = { getAll: vi.fn(), getById: vi.fn(), create: vi.fn(), update: vi.fn(), delete: vi.fn(), }; describe('use${capitalizedName}List', () => { it('should fetch all entities', async () => { const mockEntities = [{ id: '1' }]; mockPort.getAll.mockResolvedValueOnce(mockEntities); const { result } = renderHook(() => use${capitalizedName}List(mockPort), { wrapper: createWrapper(), }); expect(result.current.isLoading).toBe(true); await act(async () => { await result.current.refetch(); }); expect(result.current.data).toEqual(mockEntities); }); }); describe('use${capitalizedName}Detail', () => { it('should fetch entity by id', async () => { const mockEntity = { id: '1' }; mockPort.getById.mockResolvedValueOnce(mockEntity); const { result } = renderHook(() => use${capitalizedName}Detail(mockPort, '1'), { wrapper: createWrapper(), }); expect(result.current.isLoading).toBe(true); await act(async () => { await result.current.refetch(); }); expect(result.current.data).toEqual(mockEntity); }); }); describe('use${capitalizedName}Create', () => { it('should create entity', async () => { const mockEntity = { id: '1' }; mockPort.create.mockResolvedValueOnce(mockEntity); const { result } = renderHook(() => use${capitalizedName}Create(mockPort), { wrapper: createWrapper(), }); await act(async () => { await result.current.mutateAsync({ id: '1' }); }); expect(mockPort.create).toHaveBeenCalledWith({ id: '1' }); }); }); describe('use${capitalizedName}Update', () => { it('should update entity', async () => { const mockEntity = { id: '1' }; mockPort.update.mockResolvedValueOnce(mockEntity); const { result } = renderHook(() => use${capitalizedName}Update(mockPort), { wrapper: createWrapper(), }); await act(async () => { await result.current.mutateAsync({ id: '1', data: { id: '1' } }); }); expect(mockPort.update).toHaveBeenCalledWith('1', { id: '1' }); }); }); describe('use${capitalizedName}Delete', () => { it('should delete entity', async () => { mockPort.delete.mockResolvedValueOnce(); const { result } = renderHook(() => use${capitalizedName}Delete(mockPort), { wrapper: createWrapper(), }); await act(async () => { await result.current.mutateAsync('1'); }); expect(mockPort.delete).toHaveBeenCalledWith('1'); }); }); });`; }; exports.getHookTestTemplate = getHookTestTemplate; //# sourceMappingURL=hooks.test.js.map