import { fetchHtml, fetchJson, handleError } from '../requests'; import { fetchMock } from '../../../test/fetch-mock.ts'; describe('Request utils', () => { const mockEndpoint = '/endpoint'; beforeAll(() => { fetchMock.enableMocks(); }); afterAll(() => { fetchMock.disableMocks(); }); beforeEach(() => { window.booru.csrfToken = Math.random().toString(); fetchMock.resetMocks(); }); describe('fetchJson', () => { it('should call native fetch with the correct parameters (without body)', () => { const mockVerb = 'GET'; fetchJson(mockVerb, mockEndpoint); expect(fetch).toHaveBeenNthCalledWith(1, mockEndpoint, { method: mockVerb, credentials: 'same-origin', headers: { 'Content-Type': 'application/json', 'x-csrf-token': window.booru.csrfToken, 'x-requested-with': 'xmlhttprequest', }, }); }); it('should call native fetch with the correct parameters (with body)', () => { const mockVerb = 'POST'; const mockBody = { mockField: Math.random() }; fetchJson(mockVerb, mockEndpoint, mockBody); expect(fetch).toHaveBeenNthCalledWith(1, mockEndpoint, { method: mockVerb, credentials: 'same-origin', headers: { 'Content-Type': 'application/json', 'x-csrf-token': window.booru.csrfToken, 'x-requested-with': 'xmlhttprequest', }, body: JSON.stringify({ ...mockBody, _method: mockVerb, }), }); }); }); describe('fetchHtml', () => { it('should call native fetch with the correct parameters', () => { fetchHtml(mockEndpoint); expect(fetch).toHaveBeenNthCalledWith(1, mockEndpoint, { credentials: 'same-origin', headers: { 'x-csrf-token': window.booru.csrfToken, 'x-requested-with': 'xmlhttprequest', }, }); }); }); describe('handleError', () => { it('should throw if ok property is false', () => { const mockResponse = { ok: false } as unknown as Response; expect(() => handleError(mockResponse)).toThrow('Received error from server'); }); it('should return response if ok property is true', () => { const mockResponse = { ok: true } as unknown as Response; expect(handleError(mockResponse)).toEqual(mockResponse); }); }); });