export const tests = [] const t = (f) => tests.push(f) const fakeFetch = async ({ data, error, ...opts } = {}) => ({ ok: !opts.status, type: 'basic', status: 200, statusText: 'OK', json: async () => ({ data, error }), text: async () => JSON.stringify({ data, error }), ...opts, }) t(async ({ eq }) => { // check url parsing let url fetch = async (arg) => fakeFetch({ url: (url = arg) }) const pending = getJSON('/test', { query: 'hello world', b: 5 }) return eq(url, '/test?query=hello+world&b=5') }) t(async ({ eq }) => { // check that it return the given value const data = Math.random() fetch = (url) => fakeFetch({ url, data }) return eq(await getJSON('/', { q: 1 }), data) }) t(async ({ eq }) => { // check that it throw an error with the correct message const error = `oops: ${Math.random()}` fetch = (url) => fakeFetch({ url, error }) return eq( await getJSON('/', { q: 1 }).then( () => Promise.reject(Error('Should fail')), (err) => err.message ), error ) }) t(async ({ eq }) => { // check that it throw if the request is not ok fetch = (url) => fakeFetch({ url, status: 500, statusText: 'Internal Server Error' }) return eq( await getJSON('/', { q: 1 }).then( () => Promise.reject(Error('Should fail')), (err) => err.message ), 'Internal Server Error' ) }) t(async ({ eq }) => { // if fetch fail, the error should not be handled const error = `oops: ${Math.random()}` fetch = (url) => Promise.reject(Error(error)) return eq( await getJSON('/', { q: 1 }).then( () => Promise.reject(Error('Should fail')), (err) => err.message ), error ) }) export const setup = () => globalThis.fetch