2014-08-01 02:51:10 +08:00
|
|
|
function parsePostData(query) {
|
2015-03-14 00:08:28 +08:00
|
|
|
const result = {};
|
2014-08-01 02:51:10 +08:00
|
|
|
query.split("&").forEach(function(part) {
|
2015-03-14 00:08:28 +08:00
|
|
|
const item = part.split("=");
|
2014-08-01 02:51:10 +08:00
|
|
|
result[item[0]] = decodeURIComponent(item[1]);
|
|
|
|
});
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2014-08-01 05:26:44 +08:00
|
|
|
function response(code, obj) {
|
2014-08-01 02:51:10 +08:00
|
|
|
if (typeof code === "object") {
|
|
|
|
obj = code;
|
|
|
|
code = 200;
|
|
|
|
}
|
2014-08-01 05:26:44 +08:00
|
|
|
return [code, {"Content-Type": "application/json"}, obj];
|
2014-08-01 02:51:10 +08:00
|
|
|
}
|
|
|
|
|
2014-10-08 04:03:51 +08:00
|
|
|
function success() {
|
2014-12-13 02:13:18 +08:00
|
|
|
return response({ success: true });
|
2014-10-08 04:03:51 +08:00
|
|
|
}
|
|
|
|
|
2015-03-07 01:37:24 +08:00
|
|
|
const _widgets = [
|
|
|
|
{id: 123, name: 'Trout Lure'},
|
|
|
|
{id: 124, name: 'Evil Repellant'}
|
|
|
|
];
|
|
|
|
|
2014-08-01 02:51:10 +08:00
|
|
|
export default function() {
|
2015-03-14 00:08:28 +08:00
|
|
|
const server = new Pretender(function() {
|
2014-08-02 05:26:43 +08:00
|
|
|
|
|
|
|
// Load any fixtures automatically
|
2015-03-14 00:08:28 +08:00
|
|
|
const self = this;
|
2014-08-02 05:26:43 +08:00
|
|
|
Ember.keys(require._eak_seen).forEach(function(entry) {
|
|
|
|
if (/^fixtures/.test(entry)) {
|
2015-03-14 00:08:28 +08:00
|
|
|
const fixture = require(entry, null, null, true);
|
2014-08-02 05:26:43 +08:00
|
|
|
if (fixture && fixture.default) {
|
2015-03-14 00:08:28 +08:00
|
|
|
const obj = fixture.default;
|
2014-08-02 05:26:43 +08:00
|
|
|
Ember.keys(obj).forEach(function(url) {
|
|
|
|
self.get(url, function() {
|
|
|
|
return response(obj[url]);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2014-09-17 23:18:41 +08:00
|
|
|
this.get("/t/id_for/:slug", function() {
|
|
|
|
return response({id: 280, slug: "internationalization-localization", url: "/t/internationalization-localization/280"});
|
|
|
|
});
|
|
|
|
|
2014-08-02 05:26:43 +08:00
|
|
|
this.get("/404-body", function() {
|
|
|
|
return [200, {"Content-Type": "text/html"}, "<div class='page-not-found'>not found</div>"];
|
|
|
|
});
|
|
|
|
|
|
|
|
this.get('/draft.json', function() {
|
|
|
|
return response({});
|
|
|
|
});
|
2015-03-13 14:45:55 +08:00
|
|
|
|
2014-08-01 02:51:10 +08:00
|
|
|
this.post('/session', function(request) {
|
2015-03-14 00:08:28 +08:00
|
|
|
const data = parsePostData(request.requestBody);
|
2014-08-01 02:51:10 +08:00
|
|
|
|
|
|
|
if (data.password === 'correct') {
|
2014-08-01 05:26:44 +08:00
|
|
|
return response({username: 'eviltrout'});
|
2014-08-01 02:51:10 +08:00
|
|
|
}
|
2014-08-01 05:26:44 +08:00
|
|
|
return response(400, {error: 'invalid login'});
|
2014-08-01 02:51:10 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
this.get('/users/hp.json', function() {
|
2014-08-01 05:26:44 +08:00
|
|
|
return response({"value":"32faff1b1ef1ac3","challenge":"61a3de0ccf086fb9604b76e884d75801"});
|
2014-08-01 02:51:10 +08:00
|
|
|
});
|
|
|
|
|
2014-08-01 05:06:00 +08:00
|
|
|
this.get('/session/csrf', function() {
|
2014-08-01 05:26:44 +08:00
|
|
|
return response({"csrf":"mgk906YLagHo2gOgM1ddYjAN4hQolBdJCqlY6jYzAYs="});
|
2014-08-01 05:06:00 +08:00
|
|
|
});
|
|
|
|
|
2014-08-01 02:51:10 +08:00
|
|
|
this.get('/users/check_username', function(request) {
|
|
|
|
if (request.queryParams.username === 'taken') {
|
2014-08-01 05:26:44 +08:00
|
|
|
return response({available: false, suggestion: 'nottaken'});
|
2014-08-01 02:51:10 +08:00
|
|
|
}
|
2014-08-01 05:26:44 +08:00
|
|
|
return response({available: true});
|
2014-08-01 02:51:10 +08:00
|
|
|
});
|
|
|
|
|
2014-08-01 05:26:44 +08:00
|
|
|
this.post('/users', function() {
|
|
|
|
return response({success: true});
|
2014-08-01 02:51:10 +08:00
|
|
|
});
|
2014-08-01 05:59:52 +08:00
|
|
|
|
|
|
|
this.get('/login.html', function() {
|
|
|
|
return [200, {}, 'LOGIN PAGE'];
|
|
|
|
});
|
2014-10-08 04:03:51 +08:00
|
|
|
|
|
|
|
this.delete('/posts/:post_id', success);
|
|
|
|
this.put('/posts/:post_id/recover', success);
|
2015-03-07 01:37:24 +08:00
|
|
|
|
|
|
|
this.get('/widgets/:widget_id', function(request) {
|
|
|
|
const w = _widgets.findBy('id', parseInt(request.params.widget_id));
|
|
|
|
if (w) {
|
|
|
|
return response({widget: w});
|
|
|
|
} else {
|
|
|
|
return response(404);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2015-03-07 01:56:32 +08:00
|
|
|
this.put('/widgets/:widget_id', function(request) {
|
|
|
|
const w = _widgets.findBy('id', parseInt(request.params.widget_id));
|
|
|
|
const cloned = JSON.parse(JSON.stringify(w));
|
|
|
|
return response({ widget: cloned });
|
|
|
|
});
|
|
|
|
|
2015-03-07 01:37:24 +08:00
|
|
|
this.get('/widgets', function() {
|
|
|
|
return response({ widgets: _widgets });
|
|
|
|
});
|
|
|
|
|
|
|
|
this.delete('/widgets/:widget_id', success);
|
2014-08-01 02:51:10 +08:00
|
|
|
});
|
|
|
|
|
2014-08-01 05:26:44 +08:00
|
|
|
|
|
|
|
server.prepareBody = function(body){
|
|
|
|
if (body && typeof body === "object") {
|
|
|
|
return JSON.stringify(body);
|
|
|
|
}
|
2014-08-02 05:26:43 +08:00
|
|
|
return body;
|
2014-08-01 05:26:44 +08:00
|
|
|
};
|
|
|
|
|
2014-08-01 02:51:10 +08:00
|
|
|
server.unhandledRequest = function(verb, path) {
|
2015-03-14 00:08:28 +08:00
|
|
|
const error = 'Unhandled request in test environment: ' + path + ' (' + verb + ')';
|
2014-08-01 06:44:32 +08:00
|
|
|
window.console.error(error);
|
|
|
|
throw error;
|
2014-08-01 02:51:10 +08:00
|
|
|
};
|
|
|
|
|
2015-03-14 00:08:28 +08:00
|
|
|
server.checkPassthrough = function(request) {
|
|
|
|
return request.requestHeaders['Discourse-Script'];
|
|
|
|
};
|
|
|
|
|
2014-08-01 02:51:10 +08:00
|
|
|
return server;
|
|
|
|
}
|