deps: ember-cli-mirage@0.2.0
- remove lodash from bower - move all resources to /mirage instead of /app/mirage - update endpoints to use ORM - general cleanup
This commit is contained in:
parent
21180c467c
commit
abfcc4f7ff
|
@ -1,58 +0,0 @@
|
|||
import Mirage from 'ember-cli-mirage';
|
||||
import {paginatedResponse} from '../utils';
|
||||
|
||||
export default function mockInvites(server) {
|
||||
server.get('/invites/', function (db, request) {
|
||||
let response = paginatedResponse('invites', db.invites, request);
|
||||
return response;
|
||||
});
|
||||
|
||||
server.get('/invites/:id', function (db, request) {
|
||||
let {id} = request.params;
|
||||
let invite = db.invites.find(id);
|
||||
|
||||
if (!invite) {
|
||||
return new Mirage.Response(404, {}, {
|
||||
errors: [{
|
||||
errorType: 'NotFoundError',
|
||||
message: 'Invite not found.'
|
||||
}]
|
||||
});
|
||||
} else {
|
||||
return {invites: [invite]};
|
||||
}
|
||||
});
|
||||
|
||||
server.post('/invites/', function (db, request) {
|
||||
let [attrs] = JSON.parse(request.requestBody).invites;
|
||||
let [oldInvite] = db.invites.where({email: attrs.email});
|
||||
|
||||
if (oldInvite) {
|
||||
// resend - server deletes old invite and creates a new one with new ID
|
||||
attrs.id = db.invites[db.invites.length - 1].id + 1;
|
||||
db.invites.remove(oldInvite.id);
|
||||
}
|
||||
|
||||
/* eslint-disable camelcase */
|
||||
attrs.token = `${db.invites.length}-token`;
|
||||
attrs.expires = moment.utc().add(1, 'day').unix();
|
||||
attrs.created_at = moment.utc().format();
|
||||
attrs.created_by = 1;
|
||||
attrs.updated_at = moment.utc().format();
|
||||
attrs.updated_by = 1;
|
||||
attrs.status = 'sent';
|
||||
/* eslint-enable camelcase */
|
||||
|
||||
let invite = db.invites.insert(attrs);
|
||||
|
||||
return {
|
||||
invites: [invite]
|
||||
};
|
||||
});
|
||||
|
||||
server.del('/invites/:id/', function (db, request) {
|
||||
db.invites.remove(request.params.id);
|
||||
|
||||
return new Mirage.Response(204, {}, {});
|
||||
});
|
||||
}
|
|
@ -1,61 +0,0 @@
|
|||
import Mirage from 'ember-cli-mirage';
|
||||
import {isBlank} from 'ember-utils';
|
||||
import {paginatedResponse} from '../utils';
|
||||
|
||||
export default function mockPosts(server) {
|
||||
server.post('/posts/', function (db, request) {
|
||||
let [attrs] = JSON.parse(request.requestBody).posts;
|
||||
let post;
|
||||
|
||||
if (isBlank(attrs.slug) && !isBlank(attrs.title)) {
|
||||
attrs.slug = attrs.title.dasherize();
|
||||
}
|
||||
|
||||
// NOTE: this does not use the post factory to fill in blank fields
|
||||
post = db.posts.insert(attrs);
|
||||
|
||||
return {
|
||||
posts: [post]
|
||||
};
|
||||
});
|
||||
|
||||
server.get('/posts/', function (db, request) {
|
||||
// TODO: handle status/staticPages/author params
|
||||
let response = paginatedResponse('posts', db.posts, request);
|
||||
return response;
|
||||
});
|
||||
|
||||
server.get('/posts/:id/', function (db, request) {
|
||||
let {id} = request.params;
|
||||
let post = db.posts.find(id);
|
||||
|
||||
if (!post) {
|
||||
return new Mirage.Response(404, {}, {
|
||||
errors: [{
|
||||
errorType: 'NotFoundError',
|
||||
message: 'Post not found.'
|
||||
}]
|
||||
});
|
||||
} else {
|
||||
return {posts: [post]};
|
||||
}
|
||||
});
|
||||
|
||||
server.put('/posts/:id/', function (db, request) {
|
||||
let {id} = request.params;
|
||||
let [attrs] = JSON.parse(request.requestBody).posts;
|
||||
delete attrs.id;
|
||||
|
||||
let post = db.posts.update(id, attrs);
|
||||
|
||||
return {
|
||||
posts: [post]
|
||||
};
|
||||
});
|
||||
|
||||
server.del('/posts/:id/', function (db, request) {
|
||||
db.posts.remove(request.params.id);
|
||||
|
||||
return new Mirage.Response(204, {}, {});
|
||||
});
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
export default function mockRoles(server) {
|
||||
server.get('/roles/', function (db, request) {
|
||||
if (request.queryParams.permissions === 'assign') {
|
||||
let roles = db.roles.find([1, 2, 3]);
|
||||
return {roles};
|
||||
}
|
||||
|
||||
return {
|
||||
roles: db.roles
|
||||
};
|
||||
});
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
export default function mockSettings(server) {
|
||||
server.get('/settings/', function (db, request) {
|
||||
let filters = request.queryParams.type.split(',');
|
||||
let settings = [];
|
||||
|
||||
filters.forEach((filter) => {
|
||||
settings.pushObjects(db.settings.where({type: filter}));
|
||||
});
|
||||
|
||||
return {
|
||||
settings,
|
||||
meta: {
|
||||
filters: {
|
||||
type: request.queryParams.type
|
||||
}
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
server.put('/settings/', function (db, request) {
|
||||
let newSettings = JSON.parse(request.requestBody).settings;
|
||||
|
||||
newSettings.forEach((newSetting) => {
|
||||
db.settings.update({key: newSetting.key}, newSetting);
|
||||
});
|
||||
|
||||
let [activeTheme] = db.settings.where({key: 'activeTheme'});
|
||||
let [availableThemes] = db.settings.where({key: 'availableThemes'});
|
||||
|
||||
availableThemes.value.forEach((theme) => {
|
||||
if (theme.name === activeTheme.value) {
|
||||
theme.active = true;
|
||||
} else {
|
||||
theme.active = false;
|
||||
}
|
||||
});
|
||||
|
||||
db.settings.remove({key: 'availableThemes'});
|
||||
db.settings.insert(availableThemes);
|
||||
|
||||
return {
|
||||
meta: {},
|
||||
settings: db.settings
|
||||
};
|
||||
});
|
||||
}
|
|
@ -1,53 +0,0 @@
|
|||
import Mirage from 'ember-cli-mirage';
|
||||
import {isBlank} from 'ember-utils';
|
||||
import {paginatedResponse} from '../utils';
|
||||
|
||||
export default function mockTags(server) {
|
||||
server.post('/tags/', function (db, request) {
|
||||
let [attrs] = JSON.parse(request.requestBody).tags;
|
||||
let tag;
|
||||
|
||||
if (isBlank(attrs.slug) && !isBlank(attrs.name)) {
|
||||
attrs.slug = attrs.name.dasherize();
|
||||
}
|
||||
|
||||
// NOTE: this does not use the tag factory to fill in blank fields
|
||||
tag = db.tags.insert(attrs);
|
||||
|
||||
return {
|
||||
tag
|
||||
};
|
||||
});
|
||||
|
||||
server.get('/tags/', function (db, request) {
|
||||
let response = paginatedResponse('tags', db.tags, request);
|
||||
// TODO: remove post_count unless requested?
|
||||
return response;
|
||||
});
|
||||
|
||||
server.get('/tags/slug/:slug/', function (db, request) {
|
||||
let [tag] = db.tags.where({slug: request.params.slug});
|
||||
|
||||
// TODO: remove post_count unless requested?
|
||||
|
||||
return {
|
||||
tag
|
||||
};
|
||||
});
|
||||
|
||||
server.put('/tags/:id/', function (db, request) {
|
||||
let {id} = request.params;
|
||||
let [attrs] = JSON.parse(request.requestBody).tags;
|
||||
let record = db.tags.update(id, attrs);
|
||||
|
||||
return {
|
||||
tag: record
|
||||
};
|
||||
});
|
||||
|
||||
server.del('/tags/:id/', function (db, request) {
|
||||
db.tags.remove(request.params.id);
|
||||
|
||||
return new Mirage.Response(204, {}, {});
|
||||
});
|
||||
}
|
|
@ -1,85 +0,0 @@
|
|||
/* eslint-disable camelcase */
|
||||
import Mirage from 'ember-cli-mirage';
|
||||
import {isBlank} from 'ember-utils';
|
||||
import {assign} from 'ember-platform';
|
||||
|
||||
const userPostsCount = function userPostsCount(user, db) {
|
||||
let posts = db.posts.where({author_id: user.id});
|
||||
return posts.length;
|
||||
};
|
||||
|
||||
export default function mockUsers(server) {
|
||||
server.post('/users/', function (db, request) {
|
||||
let [attrs] = JSON.parse(request.requestBody).users;
|
||||
let user;
|
||||
|
||||
if (!isBlank(attrs.email)) {
|
||||
attrs.slug = attrs.email.split('@')[0].dasherize();
|
||||
}
|
||||
|
||||
// NOTE: this does not use the user factory to fill in blank fields
|
||||
user = db.users.insert(attrs);
|
||||
|
||||
return {
|
||||
users: [user]
|
||||
};
|
||||
});
|
||||
|
||||
// /users/me = Always return the user with ID=1
|
||||
server.get('/users/me', function (db) {
|
||||
return {
|
||||
users: [db.users.find(1)]
|
||||
};
|
||||
});
|
||||
|
||||
server.get('/users/', 'users');
|
||||
|
||||
server.get('/users/slug/:slug/', function (db, request) {
|
||||
let [user] = db.users.where({slug: request.params.slug});
|
||||
|
||||
if (request.queryParams.include.match(/count\.posts/)) {
|
||||
let postCount = userPostsCount(user, db);
|
||||
user = assign(user, {count: {posts: postCount}});
|
||||
}
|
||||
|
||||
return {
|
||||
users: [user]
|
||||
};
|
||||
});
|
||||
|
||||
server.del('/users/:id/', function (db, request) {
|
||||
db.users.remove(request.params.id);
|
||||
|
||||
return new Mirage.Response(204, {}, {});
|
||||
});
|
||||
|
||||
server.get('/users/:id', function (db, request) {
|
||||
let user = db.users.find(request.params.id);
|
||||
|
||||
if (request.queryParams.include.match(/count\.posts/)) {
|
||||
let postCount = userPostsCount(user, db);
|
||||
user = assign(user, {count: {posts: postCount}});
|
||||
}
|
||||
|
||||
return {
|
||||
users: [user]
|
||||
};
|
||||
});
|
||||
|
||||
server.put('/users/:id/', function (db, request) {
|
||||
let {id} = request.params;
|
||||
|
||||
if (id === 'password') {
|
||||
return {
|
||||
password: [{message: 'Password changed successfully.'}]
|
||||
};
|
||||
} else {
|
||||
let [attrs] = JSON.parse(request.requestBody).users;
|
||||
let record = db.users.update(id, attrs);
|
||||
|
||||
return {
|
||||
user: record
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
module.exports = {
|
||||
rules: {
|
||||
'brace-style': 'off',
|
||||
'camelcase': 'off'
|
||||
}
|
||||
};
|
|
@ -1,13 +0,0 @@
|
|||
import Mirage from 'ember-cli-mirage';
|
||||
|
||||
export default Mirage.Factory.extend({
|
||||
token(i) { return `${i}-token`; },
|
||||
email(i) { return `invited-user-${i}@example.com`; },
|
||||
expires() { return moment.utc().add(1, 'day').unix(); },
|
||||
created_at() { return moment.utc().format(); },
|
||||
created_by() { return 1; },
|
||||
updated_at() { return moment.utc().format(); },
|
||||
updated_by() { return 1; },
|
||||
status() { return 'sent'; },
|
||||
role_id() { return 1; }
|
||||
});
|
|
@ -1,24 +0,0 @@
|
|||
import Mirage, {faker} from 'ember-cli-mirage';
|
||||
|
||||
export default Mirage.Factory.extend({
|
||||
uuid(i) { return `post-${i}`; },
|
||||
title(i) { return `Post ${i}`; },
|
||||
description(i) { return `Title for post ${i}.`; },
|
||||
slug(i) { return `post-${i}`; },
|
||||
markdown(i) { return `Markdown for post ${i}.`; },
|
||||
html(i) { return `HTML for post ${i}.`; },
|
||||
image(i) { return `/content/images/2015/10/post-${i}.jpg`; },
|
||||
featured() { return false; },
|
||||
page() { return false; },
|
||||
status(i) { return faker.list.cycle('draft', 'published', 'scheduled')(i); },
|
||||
meta_description(i) { return `Meta description for post ${i}.`; },
|
||||
meta_title(i) { return `Meta Title for post ${i}`; },
|
||||
author_id() { return 1; },
|
||||
updated_at() { return '2015-10-19T16:25:07.756Z'; },
|
||||
updated_by() { return 1; },
|
||||
published_at() { return '2015-12-19T16:25:07.000Z'; },
|
||||
published_by() { return 1; },
|
||||
created_at() { return '2015-09-11T09:44:29.871Z'; },
|
||||
created_by() { return 1; },
|
||||
tags() { return []; }
|
||||
});
|
|
@ -1,10 +0,0 @@
|
|||
import Mirage from 'ember-cli-mirage';
|
||||
|
||||
export default Mirage.Factory.extend({
|
||||
created_at() { return '2013-11-25T14:48:11.000Z'; },
|
||||
created_by() { return 1; },
|
||||
description(i) { return `Role ${i}`; },
|
||||
name() { return ''; },
|
||||
updated_at() { return '2013-11-25T14:48:11.000Z'; },
|
||||
updated_by() { return 1; }
|
||||
});
|
|
@ -1,11 +0,0 @@
|
|||
import Mirage from 'ember-cli-mirage';
|
||||
|
||||
export default Mirage.Factory.extend({
|
||||
key(i) { return `setting-${i}`; },
|
||||
value() { return null; },
|
||||
type() { return 'blog'; },
|
||||
created_at() { return '2015-01-12T18:29:01.000Z'; },
|
||||
created_by() { return 1; },
|
||||
updated_at() { return '2015-10-27T17:39:58.288Z'; },
|
||||
updated_by() { return 1; }
|
||||
});
|
|
@ -1,21 +0,0 @@
|
|||
import Mirage from 'ember-cli-mirage';
|
||||
|
||||
export default Mirage.Factory.extend({
|
||||
created_at() { return '2015-09-11T09:44:29.871Z'; },
|
||||
created_by() { return 1; },
|
||||
description(i) { return `Description for tag ${i}.`; },
|
||||
visibility() { return 'public'; },
|
||||
image(i) { return `/content/images/2015/10/tag-${i}.jpg`; },
|
||||
meta_description(i) { return `Meta description for tag ${i}.`; },
|
||||
meta_title(i) { return `Meta Title for tag ${i}`; },
|
||||
name(i) { return `Tag ${i}`; },
|
||||
parent() { return null; },
|
||||
slug(i) { return `tag-${i}`; },
|
||||
updated_at() { return '2015-10-19T16:25:07.756Z'; },
|
||||
updated_by() { return 1; },
|
||||
count() {
|
||||
return {
|
||||
posts: 1
|
||||
};
|
||||
}
|
||||
});
|
|
@ -1,25 +0,0 @@
|
|||
import Mirage from 'ember-cli-mirage';
|
||||
|
||||
export default Mirage.Factory.extend({
|
||||
accessibility() { return null; },
|
||||
bio() { return null; },
|
||||
cover() { return null; },
|
||||
created_at() { return '2015-09-02T13:41:50.000Z'; },
|
||||
created_by() { return null; },
|
||||
email(i) { return `user-${i}@example.com`; },
|
||||
image() { return '//www.gravatar.com/avatar/3ae045bc198a157401827c8455cd7c99?s=250&d=mm&r=x'; },
|
||||
language() { return 'en_US'; },
|
||||
last_login() { return '2015-11-02T16:12:05.000Z'; },
|
||||
location() { return null; },
|
||||
meta_description() { return null; },
|
||||
meta_title() { return null; },
|
||||
name(i) { return `User ${i}`; },
|
||||
slug(i) { return `user-${i}`; },
|
||||
status() { return 'active'; },
|
||||
tour() { return null; },
|
||||
updated_at() { return '2015-11-02T16:12:05.000Z'; },
|
||||
updated_by() { return '2015-09-02T13:41:50.000Z'; },
|
||||
website() { return 'http://example.com'; },
|
||||
|
||||
roles() { return []; }
|
||||
});
|
|
@ -1,60 +0,0 @@
|
|||
import Mirage from 'ember-cli-mirage';
|
||||
|
||||
export function paginatedResponse(modelName, allModels, request) {
|
||||
let page = +request.queryParams.page || 1;
|
||||
let limit = request.queryParams.limit || 15;
|
||||
let pages, models, next, prev;
|
||||
|
||||
allModels = allModels || [];
|
||||
|
||||
if (limit === 'all') {
|
||||
models = allModels;
|
||||
pages = 1;
|
||||
} else {
|
||||
limit = +limit;
|
||||
|
||||
let start = (page - 1) * limit;
|
||||
let end = start + limit;
|
||||
|
||||
models = allModels.slice(start, end);
|
||||
pages = Math.ceil(allModels.length / limit);
|
||||
|
||||
if (start > 0) {
|
||||
prev = page - 1;
|
||||
}
|
||||
|
||||
if (end < allModels.length) {
|
||||
next = page + 1;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
meta: {
|
||||
pagination: {
|
||||
page,
|
||||
limit,
|
||||
pages,
|
||||
total: allModels.length,
|
||||
next: next || null,
|
||||
prev: prev || null
|
||||
}
|
||||
},
|
||||
[modelName]: models
|
||||
};
|
||||
}
|
||||
|
||||
export function maintenanceResponse() {
|
||||
return new Mirage.Response(503, {}, {
|
||||
errors: [{
|
||||
errorType: 'Maintenance'
|
||||
}]
|
||||
});
|
||||
}
|
||||
|
||||
export function versionMismatchResponse() {
|
||||
return new Mirage.Response(400, {}, {
|
||||
errors: [{
|
||||
errorType: 'VersionMismatchError'
|
||||
}]
|
||||
});
|
||||
}
|
|
@ -14,7 +14,6 @@
|
|||
"jquery.simulate.drag-sortable": "0.1.0",
|
||||
"jqueryui-touch-punch": "furf/jquery-ui-touch-punch#4bc009145202d9c7483ba85f3a236a8f3470354d",
|
||||
"keymaster": "1.6.3",
|
||||
"lodash": "3.7.0",
|
||||
"normalize.css": "3.0.3",
|
||||
"pretender": "1.1.0",
|
||||
"rangyinputs": "1.2.0",
|
||||
|
|
|
@ -93,7 +93,6 @@ module.exports = function (defaults) {
|
|||
},
|
||||
codemirror: codemirrorAssets(),
|
||||
'jquery-deparam': {
|
||||
enabled: EmberApp.env() === 'test',
|
||||
import: ['jquery-deparam.js']
|
||||
},
|
||||
moment: {
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
module.exports = {
|
||||
rules: {
|
||||
'brace-style': 'off'
|
||||
}
|
||||
};
|
|
@ -52,7 +52,7 @@ export function testConfig() {
|
|||
|
||||
/* Notifications -------------------------------------------------------- */
|
||||
|
||||
this.get('/notifications/', 'notifications');
|
||||
this.get('/notifications/');
|
||||
|
||||
/* Apps - Slack Test Notification --------------------------------------------------------- */
|
||||
|
|
@ -1,16 +1,16 @@
|
|||
/* eslint-disable camelcase */
|
||||
import Mirage from 'ember-cli-mirage';
|
||||
import {Response} from 'ember-cli-mirage';
|
||||
import {isBlank} from 'ember-utils';
|
||||
import $ from 'jquery';
|
||||
|
||||
export default function mockAuthentication(server) {
|
||||
server.post('/authentication/token', function (db, request) {
|
||||
let params = $.deparam(request.requestBody);
|
||||
server.post('/authentication/token', function ({roles, users}, {requestBody}) {
|
||||
let params = $.deparam(requestBody);
|
||||
|
||||
if (params.grant_type === 'authorization_code') {
|
||||
// OAuth sign-in
|
||||
if (!db.users.length) {
|
||||
let [role] = db.roles.where({name: 'Owner'});
|
||||
if (!users.all().models.length) {
|
||||
let role = roles.findBy({name: 'Owner'});
|
||||
server.create('user', {email: 'oauthtest@example.com', roles: [role]});
|
||||
}
|
||||
|
||||
|
@ -30,13 +30,13 @@ export default function mockAuthentication(server) {
|
|||
}
|
||||
});
|
||||
|
||||
server.post('/authentication/passwordreset', function (db, request) {
|
||||
server.post('/authentication/passwordreset', function (schema, request) {
|
||||
let {passwordreset} = JSON.parse(request.requestBody);
|
||||
// eslint-disable-next-line ember-suave/prefer-destructuring
|
||||
let email = passwordreset[0].email;
|
||||
|
||||
if (email === 'unknown@example.com') {
|
||||
return new Mirage.Response(404, {}, {
|
||||
return new Response(404, {}, {
|
||||
errors: [
|
||||
{
|
||||
message: 'There is no user with that email address.',
|
||||
|
@ -53,10 +53,10 @@ export default function mockAuthentication(server) {
|
|||
}
|
||||
});
|
||||
|
||||
server.get('/authentication/invitation/', function (db, request) {
|
||||
server.get('/authentication/invitation/', function (schema, request) {
|
||||
let {email} = request.queryParams;
|
||||
let [invite] = db.invites.where({email});
|
||||
let user = db.users.find(invite.created_by);
|
||||
let invite = schema.invites.findBy({email});
|
||||
let user = schema.users.find(invite.createdBy);
|
||||
let valid = !!invite;
|
||||
let invitedBy = user && user.name;
|
||||
|
||||
|
@ -70,14 +70,13 @@ export default function mockAuthentication(server) {
|
|||
|
||||
/* Setup ---------------------------------------------------------------- */
|
||||
|
||||
server.post('/authentication/setup', function (db, request) {
|
||||
server.post('/authentication/setup', function ({roles, users}, request) {
|
||||
let [attrs] = JSON.parse(request.requestBody).setup;
|
||||
let [role] = db.roles.where({name: 'Owner'});
|
||||
let user;
|
||||
let role = roles.findBy({name: 'Owner'});
|
||||
|
||||
// create owner role unless already exists
|
||||
if (!role) {
|
||||
role = db.roles.insert({name: 'Owner'});
|
||||
role = roles.create({name: 'Owner'});
|
||||
}
|
||||
attrs.roles = [role];
|
||||
|
||||
|
@ -85,14 +84,8 @@ export default function mockAuthentication(server) {
|
|||
attrs.slug = attrs.email.split('@')[0].dasherize();
|
||||
}
|
||||
|
||||
// NOTE: this does not use the user factory to fill in blank fields
|
||||
user = db.users.insert(attrs);
|
||||
|
||||
delete user.roles;
|
||||
|
||||
return {
|
||||
users: [user]
|
||||
};
|
||||
// NOTE: server does not use the user factory to fill in blank fields
|
||||
return users.create(attrs);
|
||||
});
|
||||
|
||||
server.get('/authentication/setup/', function () {
|
|
@ -1,7 +1,7 @@
|
|||
import {isEmpty} from 'ember-utils';
|
||||
|
||||
export default function mockConfiguration(server) {
|
||||
server.get('/configuration/', function (db) {
|
||||
server.get('/configuration/', function ({db}) {
|
||||
if (isEmpty(db.configurations)) {
|
||||
server.loadFixtures('configurations');
|
||||
}
|
||||
|
@ -11,7 +11,11 @@ export default function mockConfiguration(server) {
|
|||
};
|
||||
});
|
||||
|
||||
server.get('/configuration/timezones/', function (db) {
|
||||
server.get('/configuration/timezones/', function ({db}) {
|
||||
if (isEmpty(db.timezones)) {
|
||||
server.loadFixtures('timezones');
|
||||
}
|
||||
|
||||
return {
|
||||
configuration: [{
|
||||
timezones: db.timezones
|
|
@ -0,0 +1,41 @@
|
|||
import {Response} from 'ember-cli-mirage';
|
||||
import {paginatedResponse} from '../utils';
|
||||
|
||||
export default function mockInvites(server) {
|
||||
server.get('/invites/', paginatedResponse('invites'));
|
||||
|
||||
server.get('/invites/:id', function (schema, request) {
|
||||
let {id} = request.params;
|
||||
let invite = schema.invites.find(id);
|
||||
|
||||
return invite || new Response(404, {}, {
|
||||
errors: [{
|
||||
errorType: 'NotFoundError',
|
||||
message: 'Invite not found.'
|
||||
}]
|
||||
});
|
||||
});
|
||||
|
||||
server.post('/invites/', function ({invites}) {
|
||||
let attrs = this.normalizedRequestAttrs();
|
||||
let oldInvite = invites.findBy({email: attrs.email});
|
||||
|
||||
if (oldInvite) {
|
||||
oldInvite.destroy();
|
||||
}
|
||||
|
||||
/* eslint-disable camelcase */
|
||||
attrs.token = `${invites.all().models.length}-token`;
|
||||
attrs.expires = moment.utc().add(1, 'day').unix();
|
||||
attrs.created_at = moment.utc().format();
|
||||
attrs.created_by = 1;
|
||||
attrs.updated_at = moment.utc().format();
|
||||
attrs.updated_by = 1;
|
||||
attrs.status = 'sent';
|
||||
/* eslint-enable camelcase */
|
||||
|
||||
return invites.create(attrs);
|
||||
});
|
||||
|
||||
server.del('/invites/:id/');
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
import {Response} from 'ember-cli-mirage';
|
||||
import {isBlank} from 'ember-utils';
|
||||
import {paginatedResponse} from '../utils';
|
||||
import {dasherize} from 'ember-string';
|
||||
|
||||
export default function mockPosts(server) {
|
||||
server.post('/posts', function ({posts}) {
|
||||
let attrs = this.normalizedRequestAttrs();
|
||||
|
||||
if (isBlank(attrs.slug) && !isBlank(attrs.title)) {
|
||||
attrs.slug = dasherize(attrs.title);
|
||||
}
|
||||
|
||||
// NOTE: this does not use the post factory to fill in blank fields
|
||||
return posts.create(attrs);
|
||||
});
|
||||
|
||||
// TODO: handle status/staticPages/author params
|
||||
server.get('/posts/', paginatedResponse('posts'));
|
||||
|
||||
server.get('/posts/:id/', function ({posts}, {params}) {
|
||||
let {id} = params;
|
||||
let post = posts.find(id);
|
||||
|
||||
return post || new Response(404, {}, {
|
||||
errors: [{
|
||||
errorType: 'NotFoundError',
|
||||
message: 'Post not found.'
|
||||
}]
|
||||
});
|
||||
});
|
||||
|
||||
server.put('/posts/:id/');
|
||||
|
||||
server.del('/posts/:id/');
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
export default function mockRoles(server) {
|
||||
server.get('/roles/', function ({roles}, {queryParams}) {
|
||||
if (queryParams.permissions === 'assign') {
|
||||
return roles.find([1, 2, 3]);
|
||||
}
|
||||
|
||||
return roles.all();
|
||||
});
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
export default function mockSettings(server) {
|
||||
// These endpoints use the raw database & fixtures without going
|
||||
// through the ORM at all (meaning no setting model). This is due
|
||||
// to https://github.com/samselikoff/ember-cli-mirage/issues/943
|
||||
// as far as can be determined.
|
||||
// potential TODO: update once the above issue is fixed? We don't really
|
||||
// gain anything from using the ORM for settings so it may not be a good idea
|
||||
server.get('/settings/', function ({db}, {queryParams}) {
|
||||
let {type} = queryParams;
|
||||
let filters = type.split(',');
|
||||
let settings = [];
|
||||
|
||||
if (!db.settings) {
|
||||
server.loadFixtures('settings');
|
||||
}
|
||||
|
||||
filters.forEach((type) => {
|
||||
settings.pushObjects(db.settings.where({type}));
|
||||
});
|
||||
|
||||
return {
|
||||
settings,
|
||||
meta: {filters: {type}}
|
||||
};
|
||||
});
|
||||
|
||||
server.put('/settings/', function ({db}, {requestBody}) {
|
||||
let newSettings = JSON.parse(requestBody).settings;
|
||||
|
||||
newSettings.forEach((newSetting) => {
|
||||
let {key} = newSetting;
|
||||
db.settings.update({key}, newSetting);
|
||||
});
|
||||
|
||||
let [activeTheme] = db.settings.where({key: 'activeTheme'});
|
||||
let [availableThemes] = db.settings.where({key: 'availableThemes'});
|
||||
|
||||
availableThemes.value.forEach((theme) => {
|
||||
if (theme.name === activeTheme.value) {
|
||||
theme.active = true;
|
||||
} else {
|
||||
theme.active = false;
|
||||
}
|
||||
});
|
||||
|
||||
db.settings.update({key: 'availableThemes'}, availableThemes);
|
||||
|
||||
return {
|
||||
meta: {},
|
||||
settings: db.settings
|
||||
};
|
||||
});
|
||||
}
|
|
@ -1,11 +1,7 @@
|
|||
import Ember from 'ember';
|
||||
|
||||
const {
|
||||
String: {dasherize}
|
||||
} = Ember;
|
||||
import {dasherize} from 'ember-string';
|
||||
|
||||
export default function mockSlugs(server) {
|
||||
server.get('/slugs/post/:slug/', function (db, request) {
|
||||
server.get('/slugs/post/:slug/', function (schema, request) {
|
||||
return {
|
||||
slugs: [
|
||||
{slug: dasherize(decodeURIComponent(request.params.slug))}
|
||||
|
@ -13,7 +9,7 @@ export default function mockSlugs(server) {
|
|||
};
|
||||
});
|
||||
|
||||
server.get('/slugs/user/:slug/', function (db, request) {
|
||||
server.get('/slugs/user/:slug/', function (schema, request) {
|
||||
return {
|
||||
slugs: [
|
||||
{slug: dasherize(decodeURIComponent(request.params.slug))}
|
|
@ -1,19 +1,16 @@
|
|||
/* eslint-disable camelcase */
|
||||
import Mirage from 'ember-cli-mirage';
|
||||
import {Response} from 'ember-cli-mirage';
|
||||
import {paginatedResponse} from '../utils';
|
||||
|
||||
export default function mockSubscribers(server) {
|
||||
server.get('/subscribers/', function (db, request) {
|
||||
let response = paginatedResponse('subscribers', db.subscribers, request);
|
||||
return response;
|
||||
});
|
||||
server.get('/subscribers/', paginatedResponse('subscribers'));
|
||||
|
||||
server.post('/subscribers/', function (db, request) {
|
||||
server.post('/subscribers/', function ({subscribers}, request) {
|
||||
let [attrs] = JSON.parse(request.requestBody).subscribers;
|
||||
let [subscriber] = db.subscribers.where({email: attrs.email});
|
||||
let subscriber = subscribers.findBy({email: attrs.email});
|
||||
|
||||
if (subscriber) {
|
||||
return new Mirage.Response(422, {}, {
|
||||
return new Response(422, {}, {
|
||||
errors: [{
|
||||
errorType: 'ValidationError',
|
||||
message: 'Email already exists.',
|
||||
|
@ -24,29 +21,11 @@ export default function mockSubscribers(server) {
|
|||
attrs.created_at = new Date();
|
||||
attrs.created_by = 0;
|
||||
|
||||
subscriber = db.subscribers.insert(attrs);
|
||||
|
||||
return {
|
||||
subscriber
|
||||
};
|
||||
return subscribers.create(attrs);
|
||||
}
|
||||
});
|
||||
|
||||
server.put('/subscribers/:id/', function (db, request) {
|
||||
let {id} = request.params;
|
||||
let [attrs] = JSON.parse(request.requestBody).subscribers;
|
||||
let subscriber = db.subscribers.update(id, attrs);
|
||||
|
||||
return {
|
||||
subscriber
|
||||
};
|
||||
});
|
||||
|
||||
server.del('/subscribers/:id/', function (db, request) {
|
||||
db.subscribers.remove(request.params.id);
|
||||
|
||||
return new Mirage.Response(204, {}, {});
|
||||
});
|
||||
server.put('/subscribers/:id/');
|
||||
|
||||
server.post('/subscribers/csv/', function () {
|
||||
// NB: we get a raw FormData object with no way to inspect it in Chrome
|
||||
|
@ -65,4 +44,6 @@ export default function mockSubscribers(server) {
|
|||
}
|
||||
};
|
||||
});
|
||||
|
||||
server.del('/subscribers/:id/');
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
import {dasherize} from 'ember-string';
|
||||
import {isBlank} from 'ember-utils';
|
||||
import {paginatedResponse} from '../utils';
|
||||
|
||||
export default function mockTags(server) {
|
||||
server.post('/tags/', function ({tags}, {requestBody}) {
|
||||
let [attrs] = JSON.parse(requestBody).tags;
|
||||
|
||||
if (isBlank(attrs.slug) && !isBlank(attrs.name)) {
|
||||
attrs.slug = dasherize(attrs.name);
|
||||
}
|
||||
|
||||
// NOTE: this does not use the tag factory to fill in blank fields
|
||||
return tags.create(attrs);
|
||||
});
|
||||
|
||||
server.get('/tags/', paginatedResponse('tags'));
|
||||
|
||||
server.get('/tags/slug/:slug/', function ({tags}, {params: {slug}}) {
|
||||
// TODO: remove post_count unless requested?
|
||||
return tags.findBy({slug});
|
||||
});
|
||||
|
||||
server.put('/tags/:id/');
|
||||
|
||||
server.del('/tags/:id/');
|
||||
}
|
|
@ -1,9 +1,9 @@
|
|||
import Mirage from 'ember-cli-mirage';
|
||||
import {Response} from 'ember-cli-mirage';
|
||||
|
||||
let themeCount = 1;
|
||||
|
||||
export default function mockThemes(server) {
|
||||
server.post('/themes/upload/', function (db) {
|
||||
server.post('/themes/upload/', function ({db}) {
|
||||
let [availableThemes] = db.settings.where({key: 'availableThemes'});
|
||||
// pretender/mirage doesn't currently process FormData so we can't use
|
||||
// any info passed in through the request
|
||||
|
@ -19,24 +19,22 @@ export default function mockThemes(server) {
|
|||
themeCount++;
|
||||
|
||||
availableThemes.value.pushObject(theme);
|
||||
db.settings.remove({key: 'availableThemes'});
|
||||
db.settings.insert(availableThemes);
|
||||
db.settings.update({key: 'availableThemes'}, availableThemes);
|
||||
|
||||
return {
|
||||
themes: [theme]
|
||||
};
|
||||
});
|
||||
|
||||
server.del('/themes/:theme/', function (db, request) {
|
||||
server.del('/themes/:theme/', function ({db}, {params}) {
|
||||
let [availableThemes] = db.settings.where({key: 'availableThemes'});
|
||||
|
||||
availableThemes.value = availableThemes.value.filter((theme) => {
|
||||
return theme.name !== request.params.theme;
|
||||
return theme.name !== params.theme;
|
||||
});
|
||||
|
||||
db.settings.remove({key: 'availableThemes'});
|
||||
db.settings.insert(availableThemes);
|
||||
db.settings.update({key: 'availableThemes'}, availableThemes);
|
||||
|
||||
return new Mirage.Response(204, {}, null);
|
||||
return new Response(204, {}, null);
|
||||
});
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
export default function mockUsers(server) {
|
||||
// /users/me = Always return the user with ID=1
|
||||
server.get('/users/me/', function ({users}) {
|
||||
return users.find(1);
|
||||
});
|
||||
|
||||
server.get('/users/');
|
||||
|
||||
server.get('/users/slug/:slug/', function ({users}, {params, queryParams}) {
|
||||
let user = users.findBy({slug: params.slug});
|
||||
user.postCount = queryParams.include.match(/count\.posts/);
|
||||
return user;
|
||||
});
|
||||
|
||||
server.get('/users/:id', function ({users}, {params, queryParams}) {
|
||||
let user = users.find(params.id);
|
||||
user.postCount = queryParams.include.match(/count\.posts/);
|
||||
return user;
|
||||
});
|
||||
|
||||
server.put('/users/:id/', function ({users}, {params}) {
|
||||
let {id} = params;
|
||||
|
||||
if (id === 'password') {
|
||||
return {
|
||||
password: [{message: 'Password changed successfully.'}]
|
||||
};
|
||||
} else {
|
||||
let attrs = this.normalizedRequestAttrs();
|
||||
|
||||
return users.find(id).update(attrs);
|
||||
}
|
||||
});
|
||||
|
||||
server.del('/users/:id/');
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
import {Factory} from 'ember-cli-mirage';
|
||||
|
||||
export default Factory.extend({
|
||||
token(i) { return `${i}-token`; },
|
||||
email(i) { return `invited-user-${i}@example.com`; },
|
||||
expires() { return moment.utc().add(1, 'day').unix(); },
|
||||
createdAt() { return moment.utc().format(); },
|
||||
createdBy() { return 1; },
|
||||
updatedAt() { return moment.utc().format(); },
|
||||
updatedBy() { return 1; },
|
||||
status() { return 'sent'; },
|
||||
roleId() { return 1; }
|
||||
});
|
|
@ -1,6 +1,6 @@
|
|||
import Mirage from 'ember-cli-mirage';
|
||||
import {Factory} from 'ember-cli-mirage';
|
||||
|
||||
export default Mirage.Factory.extend({
|
||||
export default Factory.extend({
|
||||
dismissible: true,
|
||||
message: 'This is an alert',
|
||||
status: 'alert',
|
|
@ -0,0 +1,24 @@
|
|||
import {Factory, faker} from 'ember-cli-mirage';
|
||||
|
||||
export default Factory.extend({
|
||||
uuid(i) { return `post-${i}`; },
|
||||
title(i) { return `Post ${i}`; },
|
||||
description(i) { return `Title for post ${i}.`; },
|
||||
slug(i) { return `post-${i}`; },
|
||||
markdown(i) { return `Markdown for post ${i}.`; },
|
||||
html(i) { return `HTML for post ${i}.`; },
|
||||
image(i) { return `/content/images/2015/10/post-${i}.jpg`; },
|
||||
featured: false,
|
||||
page: false,
|
||||
status(i) { return faker.list.cycle('draft', 'published', 'scheduled')(i); },
|
||||
metaDescription(i) { return `Meta description for post ${i}.`; },
|
||||
metaTitle(i) { return `Meta Title for post ${i}`; },
|
||||
authorId: 1,
|
||||
updatedAt: '2015-10-19T16:25:07.756Z',
|
||||
updatedBy: 1,
|
||||
publishedAt: '2015-12-19T16:25:07.000Z',
|
||||
publishedBy: 1,
|
||||
createdAt: '2015-09-11T09:44:29.871Z',
|
||||
createdBy: 1,
|
||||
tags: []
|
||||
});
|
|
@ -0,0 +1,10 @@
|
|||
import {Factory} from 'ember-cli-mirage';
|
||||
|
||||
export default Factory.extend({
|
||||
createdAt: '2013-11-25T14:48:11.000Z',
|
||||
createdBy: 1,
|
||||
description(i) { return `Role ${i}`; },
|
||||
name: '',
|
||||
updatedAt: '2013-11-25T14:48:11.000Z',
|
||||
updatedBy: 1
|
||||
});
|
|
@ -1,4 +1,4 @@
|
|||
import Mirage, {faker} from 'ember-cli-mirage';
|
||||
import {Factory, faker} from 'ember-cli-mirage';
|
||||
|
||||
let randomDate = function randomDate(start = moment().subtract(30, 'days').toDate(), end = new Date()) {
|
||||
return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
|
||||
|
@ -6,14 +6,13 @@ let randomDate = function randomDate(start = moment().subtract(30, 'days').toDat
|
|||
|
||||
let statuses = ['pending', 'subscribed'];
|
||||
|
||||
/* eslint-disable camelcase, brace-style */
|
||||
export default Mirage.Factory.extend({
|
||||
export default Factory.extend({
|
||||
name() { return `${faker.name.firstName()} ${faker.name.lastName()}`; },
|
||||
email() { return faker.internet.email(); },
|
||||
email: faker.internet.email,
|
||||
status() { return statuses[Math.floor(Math.random() * statuses.length)]; },
|
||||
created_at() { return randomDate(); },
|
||||
updated_at: null,
|
||||
created_by: 0,
|
||||
updated_by: null,
|
||||
unsubscribed_at: null
|
||||
createdAt() { return randomDate(); },
|
||||
updatedAt: null,
|
||||
createdBy: 0,
|
||||
updatedBy: null,
|
||||
unsubscribedAt: null
|
||||
});
|
|
@ -0,0 +1,21 @@
|
|||
import {Factory} from 'ember-cli-mirage';
|
||||
|
||||
export default Factory.extend({
|
||||
createdAt: '2015-09-11T09:44:29.871Z',
|
||||
createdBy: 1,
|
||||
description(i) { return `Description for tag ${i}.`; },
|
||||
visibility: 'public',
|
||||
image(i) { return `/content/images/2015/10/tag-${i}.jpg`; },
|
||||
metaDescription(i) { return `Meta description for tag ${i}.`; },
|
||||
metaTitle(i) { return `Meta Title for tag ${i}`; },
|
||||
name(i) { return `Tag ${i}`; },
|
||||
parent: null,
|
||||
slug(i) { return `tag-${i}`; },
|
||||
updatedAt: '2015-10-19T16:25:07.756Z',
|
||||
updatedBy: 1,
|
||||
count() {
|
||||
return {
|
||||
posts: 1
|
||||
};
|
||||
}
|
||||
});
|
|
@ -0,0 +1,24 @@
|
|||
import {Factory} from 'ember-cli-mirage';
|
||||
|
||||
export default Factory.extend({
|
||||
accessibility: null,
|
||||
bio: null,
|
||||
cover: null,
|
||||
createdAt: '2015-09-02T13:41:50.000Z',
|
||||
createdBy: null,
|
||||
email(i) { return `user-${i}@example.com`; },
|
||||
image: '//www.gravatar.com/avatar/3ae045bc198a157401827c8455cd7c99?s=250&d=mm&r=x',
|
||||
language: 'en_US',
|
||||
lastLogin: '2015-11-02T16:12:05.000Z',
|
||||
location: null,
|
||||
metaDescription: null,
|
||||
metaTitle: null,
|
||||
name(i) { return `User ${i}`; },
|
||||
slug(i) { return `user-${i}`; },
|
||||
status: 'active',
|
||||
tour: null,
|
||||
updatedAt: '2015-11-02T16:12:05.000Z',
|
||||
updatedBy: '2015-09-02T13:41:50.000Z',
|
||||
website: 'http://example.com',
|
||||
roles: []
|
||||
});
|
|
@ -1,9 +1,9 @@
|
|||
/* eslint-disable camelcase */
|
||||
export default [
|
||||
{
|
||||
id: 1,
|
||||
created_at: '2015-09-11T09:44:30.805Z',
|
||||
created_by: 1,
|
||||
id: 1,
|
||||
key: 'title',
|
||||
type: 'blog',
|
||||
updated_at: '2015-10-04T16:26:05.195Z',
|
||||
|
@ -11,9 +11,9 @@ export default [
|
|||
value: 'Test Blog'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
created_at: '2015-09-11T09:44:30.806Z',
|
||||
created_by: 1,
|
||||
id: 2,
|
||||
key: 'description',
|
||||
type: 'blog',
|
||||
updated_at: '2015-10-04T16:26:05.198Z',
|
||||
|
@ -51,9 +51,9 @@ export default [
|
|||
updated_by: 1
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
created_at: '2015-09-11T09:44:30.809Z',
|
||||
created_by: 1,
|
||||
id: 6,
|
||||
key: 'postsPerPage',
|
||||
type: 'blog',
|
||||
updated_at: '2015-10-04T16:26:05.211Z',
|
||||
|
@ -91,9 +91,9 @@ export default [
|
|||
updated_by: 1
|
||||
},
|
||||
{
|
||||
id: 10,
|
||||
created_at: '2015-09-11T09:44:30.809Z',
|
||||
created_by: 1,
|
||||
id: 10,
|
||||
key: 'ghost_head',
|
||||
type: 'blog',
|
||||
updated_at: '2015-09-23T13:32:49.858Z',
|
||||
|
@ -101,9 +101,9 @@ export default [
|
|||
value: ''
|
||||
},
|
||||
{
|
||||
id: 11,
|
||||
created_at: '2015-09-11T09:44:30.809Z',
|
||||
created_by: 1,
|
||||
id: 11,
|
||||
key: 'ghost_foot',
|
||||
type: 'blog',
|
||||
updated_at: '2015-09-23T13:32:49.858Z',
|
||||
|
@ -121,9 +121,9 @@ export default [
|
|||
updated_by: 1
|
||||
},
|
||||
{
|
||||
id: 13,
|
||||
created_at: '2015-09-11T09:44:30.810Z',
|
||||
created_by: 1,
|
||||
id: 13,
|
||||
key: 'navigation',
|
||||
type: 'blog',
|
||||
updated_at: '2015-09-23T13:32:49.868Z',
|
||||
|
@ -134,9 +134,9 @@ export default [
|
|||
])
|
||||
},
|
||||
{
|
||||
id: 14,
|
||||
created_at: '2015-09-11T09:44:30.810Z',
|
||||
created_by: 1,
|
||||
id: 14,
|
||||
key: 'isPrivate',
|
||||
type: 'blog',
|
||||
updated_at: '2015-09-23T13:32:49.868Z',
|
||||
|
@ -144,9 +144,9 @@ export default [
|
|||
value: false
|
||||
},
|
||||
{
|
||||
id: 15,
|
||||
created_at: '2015-09-11T09:44:30.810Z',
|
||||
created_by: 1,
|
||||
id: 15,
|
||||
key: 'password',
|
||||
type: 'blog',
|
||||
updated_at: '2015-09-23T13:32:49.868Z',
|
||||
|
@ -154,9 +154,9 @@ export default [
|
|||
value: ''
|
||||
},
|
||||
{
|
||||
id: 16,
|
||||
created_at: '2016-05-05T15:04:03.115Z',
|
||||
created_by: 1,
|
||||
id: 17,
|
||||
key: 'slack',
|
||||
type: 'blog',
|
||||
updated_at: '2016-05-05T18:33:09.168Z',
|
||||
|
@ -164,9 +164,9 @@ export default [
|
|||
value: '[{"url":""}]'
|
||||
},
|
||||
{
|
||||
id: 17,
|
||||
created_at: '2016-05-05T15:40:12.133Z',
|
||||
created_by: 1,
|
||||
id: 23,
|
||||
key: 'facebook',
|
||||
type: 'blog',
|
||||
updated_at: '2016-05-08T15:20:25.953Z',
|
||||
|
@ -174,9 +174,9 @@ export default [
|
|||
value: 'test'
|
||||
},
|
||||
{
|
||||
id: 18,
|
||||
created_at: '2016-05-05T15:40:12.134Z',
|
||||
created_by: 1,
|
||||
id: 24,
|
||||
key: 'twitter',
|
||||
type: 'blog',
|
||||
updated_at: '2016-05-08T15:20:25.954Z',
|
||||
|
@ -184,9 +184,9 @@ export default [
|
|||
value: '@test'
|
||||
},
|
||||
{
|
||||
id: 19,
|
||||
created_at: '2015-09-11T09:44:30.810Z',
|
||||
created_by: 1,
|
||||
id: 16,
|
||||
key: 'activeTimezone',
|
||||
type: 'blog',
|
||||
updated_at: '2015-09-23T13:32:49.868Z',
|
||||
|
@ -194,8 +194,8 @@ export default [
|
|||
value: 'Etc/UTC'
|
||||
},
|
||||
{
|
||||
id: 20,
|
||||
key: 'availableThemes',
|
||||
id: 18,
|
||||
value: [
|
||||
{
|
||||
name: 'casper',
|
|
@ -0,0 +1,4 @@
|
|||
import {Model} from 'ember-cli-mirage';
|
||||
|
||||
export default Model.extend({
|
||||
});
|
|
@ -0,0 +1,4 @@
|
|||
import {Model} from 'ember-cli-mirage';
|
||||
|
||||
export default Model.extend({
|
||||
});
|
|
@ -0,0 +1,3 @@
|
|||
import {Model} from 'ember-cli-mirage';
|
||||
|
||||
export default Model.extend();
|
|
@ -0,0 +1,4 @@
|
|||
import {Model} from 'ember-cli-mirage';
|
||||
|
||||
export default Model.extend({
|
||||
});
|
|
@ -0,0 +1,4 @@
|
|||
import {Model} from 'ember-cli-mirage';
|
||||
|
||||
export default Model.extend({
|
||||
});
|
|
@ -0,0 +1,4 @@
|
|||
import {Model} from 'ember-cli-mirage';
|
||||
|
||||
export default Model.extend({
|
||||
});
|
|
@ -0,0 +1,10 @@
|
|||
import {Model, hasMany} from 'ember-cli-mirage';
|
||||
|
||||
export default Model.extend({
|
||||
// used by the serializer to determine whether
|
||||
// or not to include the post count
|
||||
postCount: false,
|
||||
|
||||
roles: hasMany(),
|
||||
posts: hasMany()
|
||||
});
|
|
@ -0,0 +1,36 @@
|
|||
import {RestSerializer, Collection} from 'ember-cli-mirage';
|
||||
import {pluralize} from 'ember-cli-mirage/utils/inflector';
|
||||
import {underscore} from 'ember-string';
|
||||
|
||||
export default RestSerializer.extend({
|
||||
keyForAttribute(attr) {
|
||||
return underscore(attr);
|
||||
},
|
||||
|
||||
serialize(object, request) {
|
||||
// Ember expects pluralized responses for the post, user, and invite models,
|
||||
// and this shortcut will ensure that those models are pluralized
|
||||
if (this.isModel(object) && ['post', 'user', 'invite'].includes(object.modelName)) {
|
||||
object = new Collection(object.modelName, [object]);
|
||||
}
|
||||
|
||||
let json = RestSerializer.prototype.serialize.call(this, object, request);
|
||||
|
||||
if (this.isCollection(object) && object.meta) {
|
||||
json.meta = object.meta;
|
||||
}
|
||||
|
||||
return json;
|
||||
},
|
||||
|
||||
// POST and PUT request send data in pluralized attributes for all models,
|
||||
// so we extract it here - this allows #normalizedRequestAttrs to work
|
||||
// in route functions
|
||||
normalize(body, modelName) {
|
||||
// sometimes mirage doesn't include a modelName, so we extrapolate it from
|
||||
// the first element of Object.keys
|
||||
modelName = pluralize(modelName) || Object.keys(body)[0];
|
||||
let [attributes] = body[modelName] || [{}];
|
||||
return {data: {attributes}};
|
||||
}
|
||||
});
|
|
@ -0,0 +1,27 @@
|
|||
import BaseSerializer from './application';
|
||||
import {RestSerializer} from 'ember-cli-mirage';
|
||||
|
||||
export default BaseSerializer.extend({
|
||||
serialize(object, request) {
|
||||
if (this.isCollection(object)) {
|
||||
return BaseSerializer.prototype.serialize.apply(this, arguments);
|
||||
}
|
||||
|
||||
let {user} = RestSerializer.prototype.serialize.call(this, object, request);
|
||||
|
||||
if (object.postCount) {
|
||||
let posts = object.posts.models.length;
|
||||
|
||||
user.count = {posts};
|
||||
}
|
||||
|
||||
let roles = BaseSerializer.prototype.serialize.call(this, object.roles, request);
|
||||
let [role] = roles.roles;
|
||||
|
||||
if (role) {
|
||||
user.roles = [role];
|
||||
}
|
||||
|
||||
return {users: [user]};
|
||||
}
|
||||
});
|
|
@ -0,0 +1,62 @@
|
|||
/* eslint-disable max-statements-per-line */
|
||||
import {Response} from 'ember-cli-mirage';
|
||||
|
||||
export function paginatedResponse(modelName) {
|
||||
return function (schema, request) {
|
||||
let page = +request.queryParams.page || 1;
|
||||
let limit = request.queryParams.limit || 15;
|
||||
let pages, next, prev, models;
|
||||
|
||||
let allModels = this.serialize(schema[modelName].all())[modelName];
|
||||
|
||||
if (limit === 'all') {
|
||||
pages = 1;
|
||||
} else {
|
||||
limit = +limit;
|
||||
|
||||
let start = (page - 1) * limit;
|
||||
let end = start + limit;
|
||||
|
||||
pages = Math.ceil(allModels.length / limit);
|
||||
models = allModels.slice(start, end);
|
||||
|
||||
if (start > 0) {
|
||||
prev = page - 1;
|
||||
}
|
||||
|
||||
if (end < allModels.length) {
|
||||
next = page + 1;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
meta: {
|
||||
pagination: {
|
||||
page,
|
||||
limit,
|
||||
pages,
|
||||
total: allModels.length,
|
||||
next: next || null,
|
||||
prev: prev || null
|
||||
}
|
||||
},
|
||||
[modelName]: models || allModels
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
export function maintenanceResponse() {
|
||||
return new Response(503, {}, {
|
||||
errors: [{
|
||||
errorType: 'Maintenance'
|
||||
}]
|
||||
});
|
||||
}
|
||||
|
||||
export function versionMismatchResponse() {
|
||||
return new Response(400, {}, {
|
||||
errors: [{
|
||||
errorType: 'VersionMismatchError'
|
||||
}]
|
||||
});
|
||||
}
|
|
@ -50,7 +50,7 @@
|
|||
"ember-cli-fastclick": "1.3.0",
|
||||
"ember-cli-htmlbars": "1.1.1",
|
||||
"ember-cli-htmlbars-inline-precompile": "0.3.6",
|
||||
"ember-cli-mirage": "0.1.14",
|
||||
"ember-cli-mirage": "0.2.4",
|
||||
"ember-cli-mocha": "0.13.1",
|
||||
"ember-cli-node-assets": "0.1.6",
|
||||
"ember-cli-pretender": "1.0.1",
|
||||
|
|
Loading…
Reference in New Issue