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
JavaScript
"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