fix(DatabaseController): Do not match any entry when searching for null in relation field (#3924)

This commit is contained in:
Antonio Davi Macedo Coelho de Castro
2017-06-21 09:23:20 -03:00
committed by Florent Vilmart
parent 4509d25471
commit a0d1a3517f
4 changed files with 220 additions and 33 deletions

View File

@@ -23,6 +23,60 @@ describe('Parse.Query testing', () => {
});
});
it("searching for null", function(done) {
var baz = new TestObject({ foo: null });
var qux = new TestObject({ foo: 'qux' });
var qux2 = new TestObject({ });
Parse.Object.saveAll([baz, qux, qux2], function() {
var query = new Parse.Query(TestObject);
query.equalTo('foo', null);
query.find({
success: function(results) {
equal(results.length, 2);
qux.set('foo', null);
qux.save({
success: function () {
query.find({
success: function (results) {
equal(results.length, 3);
done();
}
});
}
});
}
});
});
});
it("searching for not null", function(done) {
var baz = new TestObject({ foo: null });
var qux = new TestObject({ foo: 'qux' });
var qux2 = new TestObject({ });
Parse.Object.saveAll([baz, qux, qux2], function() {
var query = new Parse.Query(TestObject);
query.notEqualTo('foo', null);
query.find({
success: function(results) {
equal(results.length, 1);
qux.set('foo', null);
qux.save({
success: function () {
query.find({
success: function (results) {
equal(results.length, 0);
done();
}
});
},
error: function (error) { console.log(error); }
});
},
error: function (error) { console.log(error); }
});
});
});
it("notEqualTo with Relation is working", function(done) {
var user = new Parse.User();
user.setPassword("asdf");
@@ -52,6 +106,7 @@ describe('Parse.Query testing', () => {
var relDislike1 = cake1.relation("hater");
relDislike1.add(user2);
return cake1.save();
}).then(function(){
var rellike2 = cake2.relation("liker");
@@ -60,6 +115,9 @@ describe('Parse.Query testing', () => {
var relDislike2 = cake2.relation("hater");
relDislike2.add(user2);
var relSomething = cake2.relation("something");
relSomething.add(user);
return cake2.save();
}).then(function(){
var rellike3 = cake3.relation("liker");
@@ -143,6 +201,21 @@ describe('Parse.Query testing', () => {
return query.find().then(function(results){
equal(results.length, 0);
});
}).then(function(){
var query = new Parse.Query(Cake);
query.equalTo("hater", null);
query.equalTo("liker", null);
// user doesn't hate any cake so this should be 0
return query.find().then(function(results){
equal(results.length, 0);
});
}).then(function(){
var query = new Parse.Query(Cake);
query.equalTo("something", null);
// user doesn't hate any cake so this should be 0
return query.find().then(function(results){
equal(results.length, 0);
});
}).then(function(){
done();
}).catch((err) => {
@@ -2485,6 +2558,24 @@ describe('Parse.Query testing', () => {
});
});
it('query should not match on array when searching for null', (done) => {
var target = {__type: 'Pointer', className: 'TestObject', objectId: '123'};
var obj = new Parse.Object('TestObject');
obj.set('someKey', 'someValue');
obj.set('someObjs', [target]);
obj.save().then(() => {
var query = new Parse.Query('TestObject');
query.equalTo('someKey', 'someValue');
query.equalTo('someObjs', null);
return query.find();
}).then((results) => {
expect(results.length).toEqual(0);
done();
}, (error) => {
console.log(error);
});
});
// #371
it('should properly interpret a query v1', (done) => {
var query = new Parse.Query("C1");

View File

@@ -448,4 +448,83 @@ describe('Parse Role testing', () => {
.catch(done.fail);
});
it('should match when matching in users relation', (done) => {
var user = new Parse.User();
user
.save({ username: 'admin', password: 'admin' })
.then((user) => {
var aCL = new Parse.ACL();
aCL.setPublicReadAccess(true);
aCL.setPublicWriteAccess(true);
var role = new Parse.Role('admin', aCL);
var users = role.relation('users');
users.add(user);
role
.save({}, { useMasterKey: true })
.then(() => {
var query = new Parse.Query(Parse.Role);
query.equalTo('name', 'admin');
query.equalTo('users', user);
query.find().then(function (roles) {
expect(roles.length).toEqual(1);
done();
});
});
});
});
it('should not match any entry when not matching in users relation', (done) => {
var user = new Parse.User();
user
.save({ username: 'admin', password: 'admin' })
.then((user) => {
var aCL = new Parse.ACL();
aCL.setPublicReadAccess(true);
aCL.setPublicWriteAccess(true);
var role = new Parse.Role('admin', aCL);
var users = role.relation('users');
users.add(user);
role
.save({}, { useMasterKey: true })
.then(() => {
var otherUser = new Parse.User();
otherUser
.save({ username: 'otherUser', password: 'otherUser' })
.then((otherUser) => {
var query = new Parse.Query(Parse.Role);
query.equalTo('name', 'admin');
query.equalTo('users', otherUser);
query.find().then(function(roles) {
expect(roles.length).toEqual(0);
done();
});
});
});
});
});
it('should not match any entry when searching for null in users relation', (done) => {
var user = new Parse.User();
user
.save({ username: 'admin', password: 'admin' })
.then((user) => {
var aCL = new Parse.ACL();
aCL.setPublicReadAccess(true);
aCL.setPublicWriteAccess(true);
var role = new Parse.Role('admin', aCL);
var users = role.relation('users');
users.add(user);
role
.save({}, { useMasterKey: true })
.then(() => {
var query = new Parse.Query(Parse.Role);
query.equalTo('name', 'admin');
query.equalTo('users', null);
query.find().then(function (roles) {
expect(roles.length).toEqual(0);
done();
});
});
});
});
});