2020-10-06 01:29:51 +08:00
|
|
|
import Pretender from "pretender";
|
|
|
|
|
2016-08-26 01:14:56 +08:00
|
|
|
// 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",
|
2018-11-16 03:44:19 +08:00
|
|
|
completed: true,
|
2016-08-26 01:14:56 +08:00
|
|
|
steps: [
|
|
|
|
{
|
|
|
|
id: "hello-world",
|
|
|
|
title: "hello there",
|
|
|
|
index: 0,
|
|
|
|
description: "hello!",
|
2016-09-01 01:35:49 +08:00
|
|
|
fields: [
|
|
|
|
{
|
|
|
|
id: "full_name",
|
|
|
|
type: "text",
|
|
|
|
required: true,
|
|
|
|
description: "Your name",
|
|
|
|
},
|
|
|
|
],
|
2016-08-26 01:14:56 +08:00
|
|
|
next: "second-step",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "second-step",
|
2018-11-16 03:44:19 +08:00
|
|
|
title: "Second step",
|
2016-08-26 01:14:56 +08:00
|
|
|
index: 1,
|
2018-11-16 03:44:19 +08:00
|
|
|
fields: [{ id: "some-title", type: "text" }],
|
|
|
|
previous: "hello-world",
|
|
|
|
next: "last-step",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "last-step",
|
|
|
|
index: 2,
|
2016-09-02 23:42:14 +08:00
|
|
|
fields: [
|
|
|
|
{ id: "snack", type: "dropdown", required: true },
|
2016-09-10 03:57:44 +08:00
|
|
|
{ id: "theme-preview", type: "component" },
|
|
|
|
{ id: "an-image", type: "image" },
|
2016-09-02 23:42:14 +08:00
|
|
|
],
|
2018-11-16 03:44:19 +08:00
|
|
|
previous: "second-step",
|
2016-08-26 01:14:56 +08:00
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|