const TextEncoder = require('util').TextEncoder;

const successText = 'successful response';

/**
 * Mock the 'fetch' method from browsers. Ignores the 'options' parameter.
 * @param {string} resource - the (mock) resource to fetch, which will determine the response.
 * @returns {Promise} - a promise for a Response-like object. Does not fully implement Response.
 */
const mockFetch = resource => {
    switch (resource) {
    case '200':
        return Promise.resolve({
            ok: true,
            text: () => Promise.resolve(successText),
            arrayBuffer: () => Promise.resolve(new TextEncoder().encode(successText))
        });
    case '404':
        return Promise.resolve({
            ok: false,
            status: 404
        });
    case '500':
        return Promise.resolve({
            ok: false,
            status: 500
        });
    default:
        throw new Error('unimplemented');
    }
};

module.exports = {
    mockFetch,
    successText
};