Merge pull request #595 from strongloop/feature/fix-issue-594
Make sure relation scope is applied during include
This commit is contained in:
commit
2de19f2d19
|
@ -350,6 +350,7 @@ Inclusion.include = function (objects, include, cb) {
|
||||||
filter.where[modelToIdName] = {
|
filter.where[modelToIdName] = {
|
||||||
inq: targetIds
|
inq: targetIds
|
||||||
};
|
};
|
||||||
|
|
||||||
//make sure that the modelToIdName is included if fields are specified
|
//make sure that the modelToIdName is included if fields are specified
|
||||||
if (Array.isArray(fields) && fields.indexOf(modelToIdName) === -1) {
|
if (Array.isArray(fields) && fields.indexOf(modelToIdName) === -1) {
|
||||||
fields.push(modelToIdName);
|
fields.push(modelToIdName);
|
||||||
|
@ -430,7 +431,7 @@ Inclusion.include = function (objects, include, cb) {
|
||||||
filter.where[relation.keyTo] = {
|
filter.where[relation.keyTo] = {
|
||||||
inq: allTargetIds
|
inq: allTargetIds
|
||||||
};
|
};
|
||||||
|
relation.applyScope(null, filter);
|
||||||
/**
|
/**
|
||||||
* Make the DB Call, fetch all target objects
|
* Make the DB Call, fetch all target objects
|
||||||
*/
|
*/
|
||||||
|
@ -494,6 +495,7 @@ Inclusion.include = function (objects, include, cb) {
|
||||||
filter.where[relation.keyTo] = {
|
filter.where[relation.keyTo] = {
|
||||||
inq: sourceIds
|
inq: sourceIds
|
||||||
};
|
};
|
||||||
|
relation.applyScope(null, filter);
|
||||||
relation.modelTo.find(filter, targetFetchHandler);
|
relation.modelTo.find(filter, targetFetchHandler);
|
||||||
/**
|
/**
|
||||||
* Process fetched related objects
|
* Process fetched related objects
|
||||||
|
@ -571,7 +573,6 @@ Inclusion.include = function (objects, include, cb) {
|
||||||
typeFilter.where[relation.keyTo] = {
|
typeFilter.where[relation.keyTo] = {
|
||||||
inq: targetIds
|
inq: targetIds
|
||||||
};
|
};
|
||||||
var app = relation.modelFrom.app;
|
|
||||||
var Model = lookupModel(relation.modelFrom.dataSource.modelBuilder.
|
var Model = lookupModel(relation.modelFrom.dataSource.modelBuilder.
|
||||||
models, modelType);
|
models, modelType);
|
||||||
if (!Model) {
|
if (!Model) {
|
||||||
|
@ -579,6 +580,7 @@ Inclusion.include = function (objects, include, cb) {
|
||||||
' specified but no model exists with such name'));
|
' specified but no model exists with such name'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
relation.applyScope(null, typeFilter);
|
||||||
Model.find(typeFilter, targetFetchHandler);
|
Model.find(typeFilter, targetFetchHandler);
|
||||||
/**
|
/**
|
||||||
* Process fetched related objects
|
* Process fetched related objects
|
||||||
|
@ -647,6 +649,7 @@ Inclusion.include = function (objects, include, cb) {
|
||||||
filter.where[relation.keyTo] = {
|
filter.where[relation.keyTo] = {
|
||||||
inq: targetIds
|
inq: targetIds
|
||||||
};
|
};
|
||||||
|
relation.applyScope(null, filter);
|
||||||
relation.modelTo.find(filter, targetFetchHandler);
|
relation.modelTo.find(filter, targetFetchHandler);
|
||||||
/**
|
/**
|
||||||
* Process fetched related objects
|
* Process fetched related objects
|
||||||
|
|
|
@ -2890,7 +2890,17 @@ describe('relations', function () {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should find record that match scope', function (done) {
|
it('should include record that matches scope', function(done) {
|
||||||
|
Supplier.findById(supplierId, {include: 'account'}, function(err, supplier) {
|
||||||
|
should.exists(supplier.toJSON().account);
|
||||||
|
supplier.account(function(err, account) {
|
||||||
|
should.exists(account);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not find record that does not match scope', function (done) {
|
||||||
Account.updateAll({ block: true }, function (err) {
|
Account.updateAll({ block: true }, function (err) {
|
||||||
Supplier.findById(supplierId, function (err, supplier) {
|
Supplier.findById(supplierId, function (err, supplier) {
|
||||||
supplier.account(function (err, account) {
|
supplier.account(function (err, account) {
|
||||||
|
@ -2901,6 +2911,18 @@ describe('relations', function () {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should not include record that does not match scope', function (done) {
|
||||||
|
Account.updateAll({ block: true }, function (err) {
|
||||||
|
Supplier.findById(supplierId, {include: 'account'}, function (err, supplier) {
|
||||||
|
should.not.exists(supplier.toJSON().account);
|
||||||
|
supplier.account(function (err, account) {
|
||||||
|
should.not.exists(account);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('can be used to query data with promises', function (done) {
|
it('can be used to query data with promises', function (done) {
|
||||||
db.automigrate(function () {
|
db.automigrate(function () {
|
||||||
Supplier.create({name: 'Supplier 1'})
|
Supplier.create({name: 'Supplier 1'})
|
||||||
|
|
Loading…
Reference in New Issue