// 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; }