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