@bigtest/mirage
Version:
A client-side server to develop, test and prototype your app.
100 lines (76 loc) • 2.19 kB
JavaScript
import { Model, hasMany, belongsTo, Db, Schema } from '@bigtest/mirage';
/*
A model with a hasMany association can be in eight states
with respect to its association. This helper class
returns a parent (and its children) in these various states.
The return value is an array of the form
[ parent, [child1, child2...] ]
where the children array may be empty.
*/
export default class Helper {
constructor() {
this.db = new Db();
this.schema = new Schema(this.db, {
user: Model.extend({
posts: hasMany()
}),
post: Model.extend({
user: belongsTo()
})
});
}
savedChildNoParent() {
let post = this.db.posts.insert({ title: 'Lorem' });
return [ this.schema.posts.find(post.id), null ];
}
savedChildNewParent() {
let post = this.schema.posts.create({ title: 'Lorem' });
let user = this.schema.users.new({ name: 'Link' });
post.user = user;
return [ post, user ];
}
savedChildSavedParent() {
let { schema } = this;
schema.db.loadData({
posts: [
{ id: '1', title: 'Lorem', userId: '1' }
],
users: [
{ id: '1', name: 'Link', postIds: ['1'] }
]
});
return [ schema.posts.find(1), schema.users.find(1) ];
}
newChildNoParent() {
let post = this.schema.posts.new({ title: 'Lorem' });
return [ post, null ];
}
newChildNewParent() {
let post = this.schema.posts.new({ title: 'Lorem' });
let user = this.schema.users.new({ name: 'Link' });
post.user = user;
return [ post, user ];
}
newChildSavedParent() {
let post = this.schema.posts.create({ title: 'Lorem' });
let user = this.schema.users.new({ name: 'Link' });
post.user = user;
return [ post, user ];
}
// Unassociated models
savedParent() {
let insertedUser = this.db.users.insert({ name: 'Link' });
return this.schema.users.find(insertedUser.id);
}
newParent() {
return this.schema.users.new({ name: 'Link' });
}
}
export const states = [
'savedChildNoParent',
'savedChildNewParent',
'savedChildSavedParent',
'newChildNoParent',
'newChildNewParent',
'newChildSavedParent'
];