Files
portainer/app/react/kubernetes/applications/queries/useAppStackFile.test.tsx
T
2025-12-18 13:45:26 +02:00

73 lines
2.0 KiB
TypeScript

import { renderHook } from '@testing-library/react-hooks';
import { waitFor } from '@testing-library/react';
import { describe, it, expect, beforeEach } from 'vitest';
import { HttpResponse } from 'msw';
import { server, http } from '@/setup-tests/server';
import { withTestQueryProvider } from '@/react/test-utils/withTestQuery';
import { useAppStackFile } from './useAppStackFile';
function renderQueryHook(id: number | undefined, kind: string) {
return renderHook(() => useAppStackFile(id, kind), {
wrapper: withTestQueryProvider(({ children }) => <>{children}</>),
});
}
describe('useAppStackFile', () => {
beforeEach(() => {
server.resetHandlers();
});
it('should return undefined when id is not provided', async () => {
const { result } = renderQueryHook(undefined, 'kubernetes');
await waitFor(() => {
expect(result.current.data).toBeUndefined();
});
});
it('should fetch regular stack file', async () => {
const mockContent = 'version: "3.8"\nservices:\n web:\n image: nginx';
server.use(
http.get('/api/stacks/456/file', () =>
HttpResponse.json({ StackFileContent: mockContent })
)
);
const { result } = renderQueryHook(456, 'kubernetes');
await waitFor(() => {
expect(result.current.isSuccess).toBe(true);
});
expect(result.current.data).toBe(mockContent);
});
it('should handle fetch error for regular stack', async () => {
server.use(
http.get('/api/stacks/999/file', () =>
HttpResponse.json({ message: 'Stack not found' }, { status: 404 })
)
);
const { result } = renderQueryHook(999, 'kubernetes');
await waitFor(() => {
expect(result.current.isError).toBe(true);
});
});
it('should not fetch when query is disabled', async () => {
const { result } = renderQueryHook(undefined, 'kubernetes');
// Wait a bit to ensure no fetch happens
await new Promise((resolve) => {
setTimeout(resolve, 100);
});
expect(result.current.data).toBeUndefined();
});
});