vega-frontend-monorepo/libs/environment/src/hooks/use-vega-releases.spec.ts

59 lines
2.0 KiB
TypeScript

import { renderHook, waitFor } from '@testing-library/react';
import fetchMock from 'fetch-mock';
import {
GITHUB_VEGA_DEV_RELEASES,
GITHUB_VEGA_RELEASES,
useVegaReleases,
} from './use-vega-releases';
import {
GITHUB_VEGA_RELEASES_DATA,
GITHUB_VEGA_DEV_RELEASES_DATA,
} from './mocks/github-releases';
describe('useVegaReleases', () => {
afterEach(() => {
fetchMock.reset();
});
it('should return an empty list when request is unsuccessful', async () => {
fetchMock.get(GITHUB_VEGA_RELEASES, 404);
fetchMock.get(GITHUB_VEGA_DEV_RELEASES, 404);
const { result } = renderHook(() => useVegaReleases());
expect(result.current.loading).toBeTruthy();
await waitFor(() => {
expect(result.current.loading).toBeFalsy();
expect(result.current.data).toEqual([]);
});
});
it('should return a list of releases', async () => {
fetchMock.get(GITHUB_VEGA_RELEASES, GITHUB_VEGA_RELEASES_DATA);
fetchMock.get(GITHUB_VEGA_DEV_RELEASES, GITHUB_VEGA_DEV_RELEASES_DATA);
const { result } = renderHook(() => useVegaReleases());
expect(result.current.loading).toBeTruthy();
await waitFor(() => {
expect(result.current.loading).toBeFalsy();
expect(result.current).not.toEqual([]);
const data = result.current.data;
expect(data?.[0].tagName).toEqual('v0.70.3');
expect(data?.[0].htmlUrl).toEqual(
'https://github.com/vegaprotocol/vega/releases/tag/v0.70.3'
);
expect(data?.[1].tagName).toEqual('v0.70.2');
expect(data?.[2].tagName).toEqual('v0.70.1');
});
});
it('should return a list of releases including dev releases', async () => {
fetchMock.get(GITHUB_VEGA_RELEASES, GITHUB_VEGA_RELEASES_DATA);
fetchMock.get(GITHUB_VEGA_DEV_RELEASES, GITHUB_VEGA_DEV_RELEASES_DATA);
const { result } = renderHook(() => useVegaReleases(true));
await waitFor(() => {
expect(result.current.data?.length).toBeGreaterThan(30);
expect(fetchMock.calls().length).toEqual(2);
});
});
});