water-orm
Version:
A monolith version of Standalone waterline ORM
120 lines (93 loc) • 4.06 kB
JavaScript
var _ = require('lodash'),
assert = require('assert');
describe('Association Interface', function() {
describe('1:1 Association', function() {
/////////////////////////////////////////////////////
// TEST SETUP
////////////////////////////////////////////////////
var users, profiles;
before(function(done) {
Associations.User_resource.createEach([{ name: 'foo1' ,quantity : 1}, { name: 'bar1', quantity : 2 }], function(err, models) {
if(err) return done(err);
Associations.User_resource.find()
.sort('quantity asc')
.exec(function(err, models) {
if(err) return done(err);
users = models;
var profileRecords = [
{ name: 'profile one', user: users[0].id, level : 1},
{ name: 'profile two', user: users[1].id, level : 2}
];
Associations.Profile.createEach(profileRecords, function(err, models) {
if(err) return done(err);
Associations.User_resource.update({ name: 'foo1' }, { profile: models[0].id }).exec(function(err, user) {
if(err) return done(err);
Associations.User_resource.update({ name: 'bar1' }, { profile: models[1].id }).exec(function(err, user) {
if(err) return done(err);
profiles = models;
done();
});
});
});
});
});
});
describe('.find()', function() {
/////////////////////////////////////////////////////
// TEST METHODS
////////////////////////////////////////////////////
it('should return user when the populate criteria is added on profile', function(done) {
Associations.Profile.find()
.sort('level asc')
.populate('user')
.exec(function(err, profiles) {
assert.ifError(err);
assert(profiles[0].user);
assert(profiles[1].user);
assert.equal(profiles[0].user.name, 'foo1');
assert.equal(profiles[1].user.name, 'bar1');
done();
});
});
it('should return profile when the populate criteria is added on user', function(done) {
Associations.User_resource.find()
.populate('profile')
.sort('quantity asc')
.exec(function(err, users) {
assert.ifError(err);
assert(users[0].profile);
assert(users[1].profile);
assert.equal(users[0].profile.name, 'profile one');
assert.equal(users[1].profile.name, 'profile two');
done();
});
});
it('should return a user object when the profile is undefined', function(done) {
Associations.User_resource.create({ name: 'foobar', profile: undefined }).exec(function(err, usr) {
assert(!err, err);
Associations.User_resource.find({ name: 'foobar' })
.populate('profile')
.exec(function(err, users) {
assert.ifError(err);
assert(users[0].name);
assert(!users[0].profile, 'Expected `users[0].profile` to be falsy, but instead users[0] looks like ==> '+require('util').inspect(users[0], false, null));
done();
});
});
});
it('should return undefined for profile when the profile is a non-existent foreign key', function(done) {
Associations.User_resource.create({ name: 'foobar2', profile: '123' }).exec(function(err, usr) {
assert(!err, err);
Associations.User_resource.find({ name: 'foobar2' })
.populate('profile')
.exec(function(err, users) {
assert.ifError(err);
assert(users[0].name);
assert(!users[0].profile, 'Expected `users[0].profile` to be falsy, but instead users[0] looks like ==> '+require('util').inspect(users[0], false, null));
done();
});
});
});
});
});
});