86 lines
2.3 KiB
TypeScript
86 lines
2.3 KiB
TypeScript
import { waitFor } from '@testing-library/react';
|
|
import { renderHook } from '@testing-library/react-hooks';
|
|
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 { suppressConsoleLogs } from '@/setup-tests/suppress-console';
|
|
|
|
import { useResourceYAML } from './useResourceYAML';
|
|
|
|
const resourcePath = 'api/v1/namespaces/default/configmaps/my-cm';
|
|
|
|
function renderQueryHook(
|
|
environmentId: number,
|
|
resourcePathArg: string,
|
|
enabled = true
|
|
) {
|
|
return renderHook(
|
|
() =>
|
|
useResourceYAML({
|
|
environmentId,
|
|
resourcePath: resourcePathArg,
|
|
enabled,
|
|
}),
|
|
{
|
|
wrapper: withTestQueryProvider(({ children }) => <>{children}</>),
|
|
}
|
|
);
|
|
}
|
|
|
|
describe('useResourceYAML', () => {
|
|
beforeEach(() => {
|
|
server.resetHandlers();
|
|
});
|
|
|
|
it('returns YAML text on success', async () => {
|
|
const body = 'apiVersion: v1\nkind: ConfigMap';
|
|
server.use(
|
|
http.get(
|
|
`/api/endpoints/1/kubernetes/${resourcePath}`,
|
|
() =>
|
|
new HttpResponse(body, {
|
|
headers: { 'Content-Type': 'application/yaml' },
|
|
})
|
|
)
|
|
);
|
|
|
|
const { result } = renderQueryHook(1, resourcePath);
|
|
|
|
await waitFor(() => expect(result.current.isSuccess).toBe(true));
|
|
expect(result.current.data).toBe(body);
|
|
});
|
|
|
|
it('sets isError on failure', async () => {
|
|
const restoreConsole = suppressConsoleLogs();
|
|
server.use(
|
|
http.get(`/api/endpoints/1/kubernetes/${resourcePath}`, () =>
|
|
HttpResponse.json({ message: 'error' }, { status: 500 })
|
|
)
|
|
);
|
|
|
|
const { result } = renderQueryHook(1, resourcePath);
|
|
|
|
await waitFor(() => expect(result.current.isError).toBe(true));
|
|
restoreConsole();
|
|
});
|
|
|
|
it('does not fetch when resourcePath is empty', async () => {
|
|
const { result } = renderQueryHook(1, '');
|
|
|
|
await waitFor(() => expect(result.current.fetchStatus).toBe('idle'));
|
|
expect(result.current.data).toBeUndefined();
|
|
});
|
|
|
|
it('does not fetch when enabled is false', async () => {
|
|
const { result } = renderQueryHook(1, resourcePath, false);
|
|
|
|
await new Promise((resolve) => {
|
|
setTimeout(resolve, 100);
|
|
});
|
|
|
|
expect(result.current.data).toBeUndefined();
|
|
});
|
|
});
|