// TODO: This file has some copied and pasted functions from `create-pretender` - would be good // to centralize that code at some point. function parsePostData(query) { const result = {}; query.split("&").forEach(function(part) { const item = part.split("="); const firstSeg = decodeURIComponent(item[0]); const m = /^([^\[]+)\[([^\]]+)\]/.exec(firstSeg); const val = decodeURIComponent(item[1]).replace(/\+/g, ' '); if (m) { result[m[1]] = result[m[1]] || {}; result[m[1]][m[2]] = val; } else { result[firstSeg] = val; } }); return result; } function response(code, obj) { if (typeof code === "object") { obj = code; code = 200; } return [code, {"Content-Type": "application/json"}, obj]; } export default function() { const server = new Pretender(function() { this.get('/wizard.json', () => { return response(200, { wizard: { start: 'hello-world', steps: [{ id: 'hello-world', title: 'hello there', index: 0, description: 'hello!', fields: [{ id: 'full_name', type: 'text', required: true, description: "Your name" }], next: 'second-step' }, { id: 'second-step', index: 1, fields: [ { id: 'snack', type: 'dropdown', required: true }, { id: 'theme-preview', type: 'component' }, { id: 'an-image', type: 'image' } ], previous: 'hello-world' }] } }); }); this.put('/wizard/steps/:id', request => { const body = parsePostData(request.requestBody); if (body.fields.full_name === "Server Fail") { return response(422, { errors: [{ field: "full_name", description: "Invalid name" }] }); } else { return response(200, { success: true }); } }); }); server.prepareBody = function(body){ if (body && typeof body === "object") { return JSON.stringify(body); } return body; }; server.unhandledRequest = function(verb, path) { const error = 'Unhandled request in test environment: ' + path + ' (' + verb + ')'; window.console.error(error); throw error; }; return server; }