Public Access
test: data router, one render helper, fetchRoutes in every test
This commit is contained in:
1 parent
d0ea9e900d
commit
2a22789435
37 files changed
+454
-425
No files matched your search
@@ -3,6 +3,7 @@ import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest';
|
||||
import {cleanup, fireEvent, render, screen, waitFor} from '@testing-library/react';
|
||||
import {MemoryRouter, Route, Routes, useLocation} from 'react-router-dom';
|
||||
import LoginPage from './LoginPage.jsx';
|
||||
import {fetchRoutes, json} from '../test/fetchRoutes.js';
|
||||
|
||||
vi.mock('react-i18next', () => import('../test/i18n-mock.js'));
|
||||
|
||||
@@ -22,6 +23,9 @@ function renderLogin(state) {
|
||||
);
|
||||
}
|
||||
|
||||
// The page reads Retry-After from a refusal.
|
||||
const refused = (status, code) => ({...json(status, {code}), headers: new Headers()});
|
||||
|
||||
function submit() {
|
||||
fireEvent.change(screen.getByLabelText('LOGIN.EMAIL'), {target: {value: 'a@b.de'}});
|
||||
fireEvent.change(screen.getByLabelText('LOGIN.PASSWORD'), {target: {value: 'secret'}});
|
||||
@@ -30,7 +34,7 @@ function submit() {
|
||||
|
||||
describe('LoginPage', () => {
|
||||
beforeEach(() => {
|
||||
globalThis.fetch = vi.fn(async () => ({ok: true, status: 200, json: async () => ({message: 'Login successful'})}));
|
||||
fetchRoutes({'POST /api/auth/login': json(200, {message: 'Login successful'})});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -72,7 +76,7 @@ describe('LoginPage', () => {
|
||||
});
|
||||
|
||||
it('hides the expired message once a login attempt fails', async () => {
|
||||
fetch.mockResolvedValueOnce({ok: false, status: 401, headers: new Headers(), json: async () => ({code: 'INVALID_CREDENTIALS'})});
|
||||
fetchRoutes({'POST /api/auth/login': refused(401, 'INVALID_CREDENTIALS')});
|
||||
renderLogin({sessionExpired: true, from: '/library'});
|
||||
|
||||
submit();
|
||||
@@ -82,7 +86,7 @@ describe('LoginPage', () => {
|
||||
});
|
||||
|
||||
it('says that a blocked account is blocked', async () => {
|
||||
fetch.mockResolvedValueOnce({ok: false, status: 403, headers: new Headers(), json: async () => ({code: 'ACCOUNT_BLOCKED'})});
|
||||
fetchRoutes({'POST /api/auth/login': refused(403, 'ACCOUNT_BLOCKED')});
|
||||
renderLogin();
|
||||
|
||||
submit();
|
||||
|
||||
Reference in new issue
Block a user