Included models from include operations do not change defined `strict` model option (#1259)
* Fixes #1252 * Allowed setting of dynamic relation property * Fixed tests to also consider other connectors
This commit is contained in:
parent
2bfc769c4d
commit
77c4cd7b01
|
@ -971,7 +971,7 @@ Inclusion.include = function(objects, include, options, cb) {
|
|||
result = new List(result, relation.modelTo);
|
||||
}
|
||||
obj.__data[relationName] = result;
|
||||
obj.setStrict(false);
|
||||
// obj.setStrict(false); issue #1252
|
||||
} else {
|
||||
obj[relationName] = result;
|
||||
}
|
||||
|
|
|
@ -211,7 +211,9 @@ ModelBaseClass.prototype._initProperties = function(data, options) {
|
|||
var typeName = multiple ? 'Array' : modelTo.modelName;
|
||||
var propType = multiple ? [modelTo] : modelTo;
|
||||
properties[p] = {name: typeName, type: propType};
|
||||
/* Issue #1252
|
||||
this.setStrict(false);
|
||||
*/
|
||||
}
|
||||
|
||||
// Relation
|
||||
|
|
|
@ -60,6 +60,60 @@ describe('include', function() {
|
|||
});
|
||||
});
|
||||
|
||||
it('should not have changed the __strict flag of the model', function(done) {
|
||||
const originalStrict = User.definition.settings.strict;
|
||||
User.definition.settings.strict = true; // Change to test regression for issue #1252
|
||||
const finish = (err) => {
|
||||
// Restore original user strict property
|
||||
User.definition.settings.strict = originalStrict;
|
||||
done(err);
|
||||
};
|
||||
User.find({include: 'posts'}, function(err, users) {
|
||||
if (err) return finish(err);
|
||||
users.forEach(user => {
|
||||
user.should.have.property('__strict', true); // we changed it
|
||||
});
|
||||
finish();
|
||||
});
|
||||
});
|
||||
|
||||
it('should not save in db included models, in query returned models', function(done) {
|
||||
const originalStrict = User.definition.settings.strict;
|
||||
User.definition.settings.strict = true; // Change to test regression for issue #1252
|
||||
const finish = (err) => {
|
||||
// Restore original user strict property
|
||||
User.definition.settings.strict = originalStrict;
|
||||
done(err);
|
||||
};
|
||||
User.findOne({where: {name: 'User A'}, include: 'posts'}, function(err, user) {
|
||||
if (err) return finish(err);
|
||||
if (!user) return finish(new Error('User Not found to check relation not saved'));
|
||||
user.save(function(err) { // save the returned user
|
||||
if (err) return finish(err);
|
||||
// should not store in db the posts
|
||||
var dsName = User.dataSource.name;
|
||||
if (dsName === 'memory') {
|
||||
JSON.parse(User.dataSource.adapter.cache.User[1]).should.not.have.property('posts');
|
||||
finish();
|
||||
} else if (dsName === 'mongodb') { // Check native mongodb connector
|
||||
// get hold of native mongodb collection
|
||||
var dbCollection = User.dataSource.connector.collection(User.modelName);
|
||||
dbCollection.findOne({_id: user.id})
|
||||
.then(function(foundUser) {
|
||||
if (!foundUser) {
|
||||
finish(new Error('User not found to check posts not saved'));
|
||||
}
|
||||
foundUser.should.not.have.property('posts');
|
||||
finish();
|
||||
})
|
||||
.catch(finish);
|
||||
} else { // TODO make native checks for other connectors as well
|
||||
finish();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should fetch Passport - Owner - Posts', function(done) {
|
||||
Passport.find({include: {owner: 'posts'}}, function(err, passports) {
|
||||
should.not.exist(err);
|
||||
|
|
Loading…
Reference in New Issue