Fix incorrect types between testing library and vitest

This commit is contained in:
Alejandro Celaya
2023-05-27 12:29:03 +02:00
parent 12a05b422d
commit d14aea708e
77 changed files with 69 additions and 206 deletions

View File

@@ -17,8 +17,6 @@ describe('ShlinkApiClient', () => {
['abc123', 'example.com'],
];
beforeEach(vi.clearAllMocks);
describe('listShortUrls', () => {
const expectedList = ['foo', 'bar'];

View File

@@ -32,8 +32,6 @@ describe('<App />', () => {
);
};
afterEach(vi.clearAllMocks);
it('renders children components', () => {
setUp();

View File

@@ -7,8 +7,6 @@ describe('<AppUpdateBanner />', () => {
const forceUpdate = vi.fn();
const setUp = () => renderWithEvents(<AppUpdateBanner isOpen toggle={toggle} forceUpdate={forceUpdate} />);
afterEach(vi.clearAllMocks);
it('renders initial state', () => {
setUp();

View File

@@ -18,7 +18,6 @@ describe('<ErrorHandler />', () => {
beforeEach(() => {
vi.spyOn(console, 'error').mockImplementation(() => {}); // Silence react errors
});
afterEach(vi.resetAllMocks);
it('renders children when no error has occurred', () => {
render(<ErrorHandler children={<span>Foo</span>} />);

View File

@@ -44,8 +44,6 @@ describe('<MenuLayout />', () => {
(useParams as any).mockReturnValue({ serverId: 'abc123' });
});
afterEach(vi.clearAllMocks);
it('shows loading indicator while loading server', () => {
setUp(null);

View File

@@ -4,8 +4,6 @@ describe('HttpClient', () => {
const fetch = vi.fn();
const httpClient = new HttpClient(fetch);
beforeEach(vi.clearAllMocks);
describe('fetchJson', () => {
it('throws json on success', async () => {
const theError = { error: true, foo: 'bar' };

View File

@@ -7,7 +7,6 @@ describe('ReportExporter', () => {
const jsonToCsv = vi.fn();
let exporter: ReportExporter;
beforeEach(vi.clearAllMocks);
beforeEach(() => {
(global as any).Blob = class Blob {};
(global as any).URL = { createObjectURL: () => '' };

View File

@@ -16,8 +16,6 @@ describe('<DomainSelector />', () => {
<DomainSelector value={value} domainsList={domainsList} listDomains={vi.fn()} onChange={vi.fn()} />,
);
afterEach(vi.clearAllMocks);
it.each([
['', 'Domain', 'domains-dropdown__toggle-btn'],
['my-domain.com', 'Domain: my-domain.com', 'domains-dropdown__toggle-btn--active'],

View File

@@ -20,8 +20,6 @@ describe('<ManageDomains />', () => {
/>,
);
afterEach(vi.clearAllMocks);
it('shows loading message while domains are loading', () => {
setUp(fromPartial({ loading: true, filteredDomains: [] }));

View File

@@ -19,8 +19,6 @@ describe('<DomainDropdown />', () => {
</MemoryRouter>,
);
afterEach(vi.clearAllMocks);
it('renders expected menu items', () => {
setUp();

View File

@@ -10,8 +10,6 @@ describe('<DomainStatusIcon />', () => {
<DomainStatusIcon status={status} matchMedia={matchMedia} />,
);
beforeEach(vi.clearAllMocks);
it.each([
['validating' as DomainStatus],
['invalid' as DomainStatus],

View File

@@ -17,8 +17,6 @@ describe('<EditDomainRedirectsModal />', () => {
<EditDomainRedirectsModal domain={domain} isOpen toggle={toggle} editDomainRedirects={editDomainRedirects} />,
);
afterEach(vi.clearAllMocks);
it('renders domain in header', () => {
setUp();
expect(screen.getByRole('heading')).toHaveTextContent('Edit redirects for foo.com');

View File

@@ -4,8 +4,6 @@ import type { ShlinkDomainRedirects } from '../../../src/api/types';
import { editDomainRedirects } from '../../../src/domains/reducers/domainRedirects';
describe('domainRedirectsReducer', () => {
beforeEach(vi.clearAllMocks);
describe('editDomainRedirects', () => {
const domain = 'example.com';
const redirects = fromPartial<ShlinkDomainRedirects>({});

View File

@@ -30,8 +30,6 @@ describe('domainsListReducer', () => {
editDomainRedirectsThunk,
);
beforeEach(vi.clearAllMocks);
describe('reducer', () => {
it('returns loading on LIST_DOMAINS_START', () => {
expect(reducer(undefined, listDomainsAction.pending(''))).toEqual(

View File

@@ -7,8 +7,6 @@ import type { MercureInfo } from '../../../src/mercure/reducers/mercureInfo';
vi.mock('event-source-polyfill');
describe('helpers', () => {
afterEach(vi.resetAllMocks);
describe('bindToMercureTopic', () => {
const onMessage = vi.fn();
const onTokenExpired = vi.fn();

View File

@@ -12,8 +12,6 @@ describe('mercureInfoReducer', () => {
const buildShlinkApiClient = () => fromPartial<ShlinkApiClient>({ mercureInfo: getMercureInfo });
const { loadMercureInfo, reducer } = mercureInfoReducerCreator(buildShlinkApiClient);
beforeEach(vi.resetAllMocks);
describe('reducer', () => {
it('returns loading on GET_MERCURE_INFO_START', () => {
expect(reducer(undefined, loadMercureInfo.pending(''))).toEqual({

View File

@@ -28,8 +28,6 @@ describe('<CreateServer />', () => {
return renderWithEvents(<CreateServer createServers={createServersMock} servers={servers} />);
};
beforeEach(vi.clearAllMocks);
it('shows success message when imported is true', () => {
setUp(true);

View File

@@ -30,8 +30,6 @@ describe('<DeleteServerModal />', () => {
);
};
afterEach(vi.clearAllMocks);
it('renders a modal window', () => {
setUp();

View File

@@ -31,8 +31,6 @@ describe('<EditServer />', () => {
(useNavigate as any).mockReturnValue(navigate);
});
afterEach(vi.clearAllMocks);
it('renders nothing if selected server is not reachable', () => {
setUp(fromPartial<SelectedServer>({}));

View File

@@ -23,8 +23,6 @@ describe('<ManageServers />', () => {
<MemoryRouter><ManageServers servers={servers} /></MemoryRouter>,
);
afterEach(vi.clearAllMocks);
it('shows search field which allows searching servers, affecting te amount of rendered rows', async () => {
const { user } = setUp({
foo: createServerMock('foo'),

View File

@@ -19,8 +19,6 @@ describe('<ManageServersRowDropdown />', () => {
);
};
afterEach(vi.clearAllMocks);
it('renders expected amount of dropdown items', async () => {
const { user } = setUp();

View File

@@ -12,8 +12,6 @@ describe('<DuplicatedServersModal />', () => {
);
const mockServer = (data: Partial<ServerData> = {}) => fromPartial<ServerData>(data);
beforeEach(vi.clearAllMocks);
it.each([
[[], 0],
[[mockServer()], 2],

View File

@@ -24,8 +24,6 @@ describe('<ImportServersBtn />', () => {
/>,
);
afterEach(vi.clearAllMocks);
it('shows tooltip on button hover', async () => {
const { user } = setUp();

View File

@@ -5,8 +5,6 @@ describe('<ServerForm />', () => {
const onSubmit = vi.fn();
const setUp = () => render(<ServerForm onSubmit={onSubmit}>Something</ServerForm>);
afterEach(vi.resetAllMocks);
it('renders components', () => {
setUp();

View File

@@ -3,8 +3,6 @@ import type { HttpClient } from '../../../src/common/services/HttpClient';
import { fetchServers } from '../../../src/servers/reducers/remoteServers';
describe('remoteServersReducer', () => {
afterEach(vi.clearAllMocks);
describe('fetchServers', () => {
const dispatch = vi.fn();
const fetchJson = vi.fn();

View File

@@ -19,8 +19,6 @@ describe('selectedServerReducer', () => {
const selectServer = selectServerCreator(buildApiClient);
const { reducer } = selectedServerReducerCreator(selectServer);
afterEach(vi.clearAllMocks);
describe('reducer', () => {
it('returns default when action is RESET_SELECTED_SERVER', () =>
expect(reducer(null, resetSelectedServer())).toBeNull());

View File

@@ -15,8 +15,6 @@ describe('serversReducer', () => {
def456: fromPartial({ id: 'def456' }),
};
afterEach(vi.clearAllMocks);
describe('reducer', () => {
it('returns edited server when action is EDIT_SERVER', () =>
expect(serversReducer(list, editServer('abc123', { name: 'foo' }))).toEqual({

View File

@@ -23,8 +23,6 @@ describe('ServersExporter', () => {
});
const createCsvjsonMock = (throwError = false) => (throwError ? erroneousToCsv : vi.fn(() => ''));
beforeEach(vi.clearAllMocks);
describe('exportServers', () => {
let originalConsole: Console;
const error = vi.fn();

View File

@@ -14,8 +14,6 @@ describe('ServersImporter', () => {
});
const importer = new ServersImporter(csvjsonMock, () => fileReaderMock);
beforeEach(vi.clearAllMocks);
describe('importServersFromFile', () => {
it('rejects with error if no file was provided', async () => {
await expect(importer.importServersFromFile()).rejects.toEqual(

View File

@@ -17,8 +17,6 @@ describe('<RealTimeUpdatesSettings />', () => {
/>,
);
afterEach(vi.clearAllMocks);
it('renders enabled real time updates as expected', () => {
setUp({ enabled: true });

View File

@@ -13,8 +13,6 @@ describe('<ShortUrlCreationSettings />', () => {
/>,
);
afterEach(vi.clearAllMocks);
it.each([
[{ validateUrls: true }, true],
[{ validateUrls: false }, false],

View File

@@ -11,8 +11,6 @@ describe('<ShortUrlsListSettings />', () => {
<ShortUrlsListSettings settings={fromPartial({ shortUrlsList })} setShortUrlsListSettings={setSettings} />,
);
afterEach(vi.clearAllMocks);
it.each([
[undefined, 'Order by: Created at - DESC'],
[{}, 'Order by: Created at - DESC'],

View File

@@ -11,8 +11,6 @@ describe('<TagsSettings />', () => {
<TagsSettings settings={fromPartial({ tags })} setTagsSettings={setTagsSettings} />,
);
afterEach(vi.clearAllMocks);
it('renders expected amount of groups', () => {
setUp();

View File

@@ -11,8 +11,6 @@ describe('<UserInterfaceSettings />', () => {
<UserInterfaceSettings settings={fromPartial({ ui })} setUiSettings={setUiSettings} />,
);
afterEach(vi.clearAllMocks);
it.each([
[{ theme: 'dark' as Theme }, true],
[{ theme: 'light' as Theme }, false],

View File

@@ -10,8 +10,6 @@ describe('<VisitsSettings />', () => {
<VisitsSettings settings={fromPartial(settings)} setVisitsSettings={setVisitsSettings} />,
);
afterEach(vi.clearAllMocks);
it('renders expected components', () => {
setUp();

View File

@@ -23,8 +23,6 @@ describe('<ShortUrlForm />', () => {
/>,
);
afterEach(vi.clearAllMocks);
it.each([
[
async (user: UserEvent) => {

View File

@@ -36,8 +36,6 @@ describe('<ShortUrlsFilteringBar />', () => {
);
};
afterEach(vi.clearAllMocks);
it('renders expected children components', () => {
setUp();

View File

@@ -51,8 +51,6 @@ describe('<ShortUrlsList />', () => {
(useNavigate as any).mockReturnValue(navigate);
});
afterEach(vi.clearAllMocks);
it('wraps expected components', () => {
setUp();

View File

@@ -15,8 +15,6 @@ describe('<ShortUrlsTable />', () => {
<ShortUrlsTable shortUrlsList={shortUrlsList} selectedServer={server} orderByColumn={() => orderByColumn} />,
);
afterEach(vi.resetAllMocks);
it('should render inner table by default', () => {
setUp();
expect(screen.getByRole('table')).toBeInTheDocument();

View File

@@ -13,8 +13,6 @@ describe('<CreateShortUrlResult />', () => {
<CreateShortUrlResult resetCreateShortUrl={() => {}} creation={creation} />,
);
afterEach(vi.clearAllMocks);
it('renders an error when error is true', () => {
setUp({ error: true, saved: false, saving: false });
expect(screen.getByText('An error occurred while creating the URL :(')).toBeInTheDocument();

View File

@@ -31,8 +31,6 @@ describe('<DeleteShortUrlModal />', () => {
/>,
);
afterEach(vi.clearAllMocks);
it('shows generic error when non-threshold error occurs', () => {
setUp({
loading: false,

View File

@@ -19,8 +19,6 @@ describe('<ExportShortUrlsBtn />', () => {
</MemoryRouter>,
);
afterEach(vi.clearAllMocks);
it.each([
[undefined, '0'],
[1, '1'],

View File

@@ -17,8 +17,6 @@ describe('<QrCodeModal />', () => {
/>,
);
afterEach(vi.clearAllMocks);
it('shows an external link to the URL in the header', () => {
setUp();
const externalLink = screen.getByRole('heading').querySelector('a');

View File

@@ -10,8 +10,6 @@ describe('<QrErrorCorrectionDropdown />', () => {
<QrErrorCorrectionDropdown errorCorrection={initialErrorCorrection} setErrorCorrection={setErrorCorrection} />,
);
afterEach(vi.clearAllMocks);
it('renders initial state', async () => {
const { user } = setUp();
const btn = screen.getByRole('button');

View File

@@ -8,8 +8,6 @@ describe('<QrFormatDropdown />', () => {
const setFormat = vi.fn();
const setUp = () => renderWithEvents(<QrFormatDropdown format={initialFormat} setFormat={setFormat} />);
afterEach(vi.clearAllMocks);
it('renders initial state', async () => {
const { user } = setUp();
const btn = screen.getByRole('button');

View File

@@ -14,8 +14,6 @@ describe('shortUrlCreationReducer', () => {
const createShortUrl = createShortUrlCreator(buildShlinkApiClient);
const { reducer, resetCreateShortUrl } = shortUrlCreationReducerCreator(createShortUrl);
afterEach(vi.resetAllMocks);
describe('reducer', () => {
it('returns loading on CREATE_SHORT_URL_START', () => {
expect(reducer(undefined, createShortUrl.pending('', fromPartial({})))).toEqual({

View File

@@ -12,8 +12,6 @@ describe('shortUrlDeletionReducer', () => {
const deleteShortUrl = deleteShortUrlCreator(buildShlinkApiClient);
const { reducer, resetDeleteShortUrl } = shortUrlDeletionReducerCreator(deleteShortUrl);
beforeEach(vi.clearAllMocks);
describe('reducer', () => {
it('returns loading on DELETE_SHORT_URL_START', () =>
expect(reducer(undefined, deleteShortUrl.pending('', { shortCode: '' }))).toEqual({

View File

@@ -10,8 +10,6 @@ describe('shortUrlDetailReducer', () => {
const buildShlinkApiClient = () => fromPartial<ShlinkApiClient>({ getShortUrl: getShortUrlCall });
const { reducer, getShortUrlDetail } = shortUrlDetailReducerCreator(buildShlinkApiClient);
beforeEach(vi.clearAllMocks);
describe('reducer', () => {
it('returns loading on GET_SHORT_URL_DETAIL_START', () => {
const { loading } = reducer({ loading: false, error: false }, getShortUrlDetail.pending('', { shortCode: '' }));

View File

@@ -16,8 +16,6 @@ describe('shortUrlEditionReducer', () => {
const editShortUrl = editShortUrlCreator(buildShlinkApiClient);
const { reducer } = shortUrlEditionReducerCreator(editShortUrl);
afterEach(vi.clearAllMocks);
describe('reducer', () => {
it('returns loading on EDIT_SHORT_URL_START', () => {
expect(reducer(undefined, editShortUrl.pending('', fromPartial({})))).toEqual({
@@ -51,8 +49,6 @@ describe('shortUrlEditionReducer', () => {
selectedServer,
});
afterEach(vi.clearAllMocks);
it.each([[undefined], [null], ['example.com']])('dispatches short URL on success', async (domain) => {
await editShortUrl({ shortCode, domain, data: { longUrl } })(dispatch, createGetState(), {});

View File

@@ -21,8 +21,6 @@ describe('shortUrlsListReducer', () => {
const createShortUrl = createShortUrlCreator(buildShlinkApiClient);
const { reducer } = shortUrlsListReducerCreator(listShortUrls, editShortUrl, createShortUrl);
afterEach(vi.clearAllMocks);
describe('reducer', () => {
it('returns loading on LIST_SHORT_URLS_START', () =>
expect(reducer(undefined, listShortUrls.pending(''))).toEqual({

View File

@@ -21,8 +21,6 @@ describe('<TagsList />', () => {
/>,
);
afterEach(vi.clearAllMocks);
it('shows a loading message when tags are being loaded', () => {
setUp({ loading: true });

View File

@@ -26,7 +26,9 @@ describe('<TagsTable />', () => {
);
};
afterEach(vi.clearAllMocks);
afterEach(() => {
vi.clearAllMocks();
});
it('renders empty result if there are no tags', () => {
setUp();

View File

@@ -18,8 +18,6 @@ describe('<DeleteTagConfirmModal />', () => {
/>,
);
afterEach(vi.resetAllMocks);
it('asks confirmation for provided tag to be deleted', () => {
setUp({ error: false, deleted: false, deleting: false });

View File

@@ -15,8 +15,6 @@ describe('<EditTagModal />', () => {
);
};
afterEach(vi.clearAllMocks);
it('allows modal to be toggled with different mechanisms', async () => {
const { user } = setUp();

View File

@@ -31,8 +31,6 @@ describe('<Tag />', () => {
</Tag>,
);
afterEach(vi.clearAllMocks);
it.each([
[true],
[false],

View File

@@ -20,8 +20,6 @@ describe('<TagsSelector />', () => {
/>,
);
afterEach(vi.clearAllMocks);
it('has an input for tags', () => {
setUp();
expect(screen.getByPlaceholderText('Add tags to the URL')).toBeInTheDocument();

View File

@@ -8,8 +8,6 @@ describe('tagDeleteReducer', () => {
const buildShlinkApiClient = () => fromPartial<ShlinkApiClient>({ deleteTags: deleteTagsCall });
const { reducer, deleteTag } = tagDeleteReducerCreator(buildShlinkApiClient);
beforeEach(vi.clearAllMocks);
describe('reducer', () => {
it('returns loading on DELETE_TAG_START', () => {
expect(reducer(undefined, deleteTag.pending('', ''))).toEqual({

View File

@@ -53,8 +53,6 @@ describe('tagEditReducer', () => {
const dispatch = vi.fn();
const getState = () => fromPartial<ShlinkState>({});
afterEach(vi.clearAllMocks);
it('calls API on success', async () => {
editTagCall.mockResolvedValue(undefined);

View File

@@ -21,8 +21,6 @@ describe('tagsListReducer', () => {
const createShortUrl = createShortUrlCreator(buildShlinkApiClient);
const { reducer } = tagsListReducerCreator(listTags, createShortUrl);
afterEach(vi.clearAllMocks);
describe('reducer', () => {
it('returns loading on LIST_TAGS_START', () => {
expect(reducer(undefined, listTags.pending(''))).toEqual(expect.objectContaining({

View File

@@ -5,8 +5,6 @@ describe('<CopyToClipboardIcon />', () => {
const onCopy = vi.fn();
const setUp = (text = 'foo') => renderWithEvents(<CopyToClipboardIcon text={text} onCopy={onCopy} />);
afterEach(vi.clearAllMocks);
it('wraps expected components', () => {
const { container } = setUp();
expect(container).toMatchSnapshot();

View File

@@ -13,8 +13,6 @@ describe('<PaginationDropdown />', () => {
return result;
};
afterEach(vi.clearAllMocks);
it('renders expected amount of items', async () => {
await setUp();
expect(screen.getAllByRole('menuitem')).toHaveLength(5);

View File

@@ -20,8 +20,6 @@ describe('<DateIntervalDropdownItems />', () => {
return { user, ...renderResult };
};
afterEach(vi.clearAllMocks);
it('renders expected amount of items', async () => {
await setUp();

View File

@@ -9,8 +9,6 @@ describe('<DateRangeRow />', () => {
<DateRangeRow onEndDateChange={onEndDateChange} onStartDateChange={onStartDateChange} />,
);
afterEach(vi.clearAllMocks);
it('renders two date inputs', () => {
setUp();
expect(screen.getAllByRole('textbox')).toHaveLength(2);

View File

@@ -22,8 +22,6 @@ describe('<DateRangeSelector />', () => {
return result;
};
afterEach(vi.clearAllMocks);
it('renders proper amount of items', async () => {
const { container } = await setUp();

View File

@@ -28,8 +28,6 @@ describe('<VisitsTable />', () => {
],
});
afterEach(vi.resetAllMocks);
it('renders expected amount of columns', () => {
setUp([], []);
expect(screen.getAllByRole('columnheader')).toHaveLength(8);

View File

@@ -13,8 +13,6 @@ describe('<VisitsFilterDropdown />', () => {
/>,
);
beforeEach(vi.clearAllMocks);
it('has expected text', () => {
setUp();
expect(screen.getByRole('button', { name: 'Filters' })).toBeInTheDocument();

View File

@@ -26,8 +26,6 @@ describe('domainVisitsReducer', () => {
const getDomainVisits = getDomainVisitsCreator(buildApiClientMock);
const { reducer, cancelGetVisits: cancelGetDomainVisits } = domainVisitsReducerCreator(getDomainVisits);
beforeEach(vi.clearAllMocks);
describe('reducer', () => {
const buildState = (data: Partial<DomainVisits>) => fromPartial<DomainVisits>(data);

View File

@@ -22,8 +22,6 @@ describe('nonOrphanVisitsReducer', () => {
const getNonOrphanVisits = getNonOrphanVisitsCreator(buildShlinkApiClient);
const { reducer, cancelGetVisits: cancelGetNonOrphanVisits } = nonOrphanVisitsReducerCreator(getNonOrphanVisits);
beforeEach(vi.clearAllMocks);
describe('reducer', () => {
const buildState = (data: Partial<VisitsInfo>) => fromPartial<VisitsInfo>(data);
@@ -124,8 +122,6 @@ describe('nonOrphanVisitsReducer', () => {
orphanVisits: { cancelLoad: false },
});
beforeEach(vi.resetAllMocks);
it.each([
[undefined],
[{}],

View File

@@ -22,8 +22,6 @@ describe('orphanVisitsReducer', () => {
const getOrphanVisits = getOrphanVisitsCreator(buildShlinkApiClientMock);
const { reducer, cancelGetVisits: cancelGetOrphanVisits } = orphanVisitsReducerCreator(getOrphanVisits);
beforeEach(vi.clearAllMocks);
describe('reducer', () => {
const buildState = (data: Partial<VisitsInfo>) => fromPartial<VisitsInfo>(data);

View File

@@ -23,8 +23,6 @@ describe('shortUrlVisitsReducer', () => {
const getShortUrlVisits = getShortUrlVisitsCreator(buildApiClientMock);
const { reducer, cancelGetVisits: cancelGetShortUrlVisits } = shortUrlVisitsReducerCreator(getShortUrlVisits);
beforeEach(vi.clearAllMocks);
describe('reducer', () => {
const buildState = (data: Partial<ShortUrlVisits>) => fromPartial<ShortUrlVisits>(data);

View File

@@ -23,8 +23,6 @@ describe('tagVisitsReducer', () => {
const getTagVisits = getTagVisitsCreator(buildShlinkApiClientMock);
const { reducer, cancelGetVisits: cancelGetTagVisits } = tagVisitsReducerCreator(getTagVisits);
beforeEach(vi.clearAllMocks);
describe('reducer', () => {
const buildState = (data: Partial<TagVisits>) => fromPartial<TagVisits>(data);

View File

@@ -19,8 +19,6 @@ describe('visitsOverviewReducer', () => {
const loadVisitsOverview = loadVisitsOverviewCreator(buildApiClientMock);
const { reducer } = visitsOverviewReducerCreator(loadVisitsOverview);
beforeEach(vi.clearAllMocks);
describe('reducer', () => {
const state = (payload: Partial<VisitsOverview> = {}) => fromPartial<VisitsOverview>(payload);