LiveQuery should match subobjects with dot notation (#3322)
* LiveQuery should match subobjects with dot notation * one additional test case
This commit is contained in:
committed by
Arthur Cinader
parent
edba550cf6
commit
df029b82eb
@@ -412,4 +412,66 @@ describe('matchesQuery', function() {
|
|||||||
expect(matchesQuery(caltrainStation, q)).toBe(false);
|
expect(matchesQuery(caltrainStation, q)).toBe(false);
|
||||||
expect(matchesQuery(santaClara, q)).toBe(false);
|
expect(matchesQuery(santaClara, q)).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('matches on subobjects with dot notation', function() {
|
||||||
|
var message = {
|
||||||
|
id: new Id('Message', 'O1'),
|
||||||
|
text: "content",
|
||||||
|
status: {x: "read", y: "delivered"}
|
||||||
|
};
|
||||||
|
|
||||||
|
var q = new Parse.Query('Message');
|
||||||
|
q.equalTo("status.x", "read");
|
||||||
|
expect(matchesQuery(message, q)).toBe(true);
|
||||||
|
|
||||||
|
q = new Parse.Query('Message');
|
||||||
|
q.equalTo("status.z", "read");
|
||||||
|
expect(matchesQuery(message, q)).toBe(false);
|
||||||
|
|
||||||
|
q = new Parse.Query('Message');
|
||||||
|
q.equalTo("status.x", "delivered");
|
||||||
|
expect(matchesQuery(message, q)).toBe(false);
|
||||||
|
|
||||||
|
q = new Parse.Query('Message');
|
||||||
|
q.notEqualTo("status.x", "read");
|
||||||
|
expect(matchesQuery(message, q)).toBe(false);
|
||||||
|
|
||||||
|
q = new Parse.Query('Message');
|
||||||
|
q.notEqualTo("status.z", "read");
|
||||||
|
expect(matchesQuery(message, q)).toBe(true);
|
||||||
|
|
||||||
|
q = new Parse.Query('Message');
|
||||||
|
q.notEqualTo("status.x", "delivered");
|
||||||
|
expect(matchesQuery(message, q)).toBe(true);
|
||||||
|
|
||||||
|
q = new Parse.Query('Message');
|
||||||
|
q.exists("status.x");
|
||||||
|
expect(matchesQuery(message, q)).toBe(true);
|
||||||
|
|
||||||
|
q = new Parse.Query('Message');
|
||||||
|
q.exists("status.z");
|
||||||
|
expect(matchesQuery(message, q)).toBe(false);
|
||||||
|
|
||||||
|
q = new Parse.Query('Message');
|
||||||
|
q.exists("nonexistent.x");
|
||||||
|
expect(matchesQuery(message, q)).toBe(false);
|
||||||
|
|
||||||
|
q = new Parse.Query('Message');
|
||||||
|
q.doesNotExist("status.x");
|
||||||
|
expect(matchesQuery(message, q)).toBe(false);
|
||||||
|
|
||||||
|
q = new Parse.Query('Message');
|
||||||
|
q.doesNotExist("status.z");
|
||||||
|
expect(matchesQuery(message, q)).toBe(true);
|
||||||
|
|
||||||
|
q = new Parse.Query('Message');
|
||||||
|
q.doesNotExist("nonexistent.z");
|
||||||
|
expect(matchesQuery(message, q)).toBe(true);
|
||||||
|
|
||||||
|
q = new Parse.Query('Message');
|
||||||
|
q.equalTo("status.x", "read");
|
||||||
|
q.doesNotExist("status.y");
|
||||||
|
expect(matchesQuery(message, q)).toBe(false);
|
||||||
|
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -133,6 +133,13 @@ function matchesKeyConstraints(object, key, constraints) {
|
|||||||
if (constraints === null) {
|
if (constraints === null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if(key.indexOf(".") >= 0){
|
||||||
|
// Key references a subobject
|
||||||
|
var keyComponents = key.split(".");
|
||||||
|
var subObjectKey = keyComponents[0];
|
||||||
|
var keyRemainder = keyComponents.slice(1).join(".");
|
||||||
|
return matchesKeyConstraints(object[subObjectKey] || {}, keyRemainder, constraints);
|
||||||
|
}
|
||||||
var i;
|
var i;
|
||||||
if (key === '$or') {
|
if (key === '$or') {
|
||||||
for (i = 0; i < constraints.length; i++) {
|
for (i = 0; i < constraints.length; i++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user