From 512fb93d285910f0e3a894e26e6e168690207a37 Mon Sep 17 00:00:00 2001 From: Rahul Lanjewar Date: Wed, 30 Apr 2025 16:04:12 +0530 Subject: [PATCH 1/4] chore: failing test case --- spec/ParseLiveQuery.spec.js | 55 +++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/spec/ParseLiveQuery.spec.js b/spec/ParseLiveQuery.spec.js index 98d7e6a6c9..c8efe9207e 100644 --- a/spec/ParseLiveQuery.spec.js +++ b/spec/ParseLiveQuery.spec.js @@ -1308,4 +1308,59 @@ describe('ParseLiveQuery', function () { await new Promise(resolve => setTimeout(resolve, 100)); expect(createSpy).toHaveBeenCalledTimes(1); }); + + fit('Live query should work if needle is ParsePointer and haystack is any[], checking QueryTools.js>contains', async () => { + await reconfigureServer({ + liveQuery: { + classNames: ['TestObject'], + }, + startLiveQueryServer: true, + verbose: false, + silent: true, + }); + + const child1 = new Parse.Object('Child'); + await child1.save(); + const child2 = new Parse.Object('Child'); + await child2.save(); + const child3 = new Parse.Object('Child'); + await child3.save(); + + const query = new Parse.Query(TestObject); + query.containedIn('childs', [child1, child2, null]); + + const subscription = await query.subscribe(); + subscription.on('create', () => {}); + + // Do not need any expect block, just make sure that the server doesnt crash or throw error + const object1 = new TestObject(); + object1.set('childs', [child3]); + await object1.save(); + }); + + + fit('Live query should work if we set equalTo(someKey,someParseObject) and new Parse object is created but someKey = null', async () => { + await reconfigureServer({ + liveQuery: { + classNames: ['TestObject'], + }, + startLiveQueryServer: true, + verbose: false, + silent: true, + }); + + const child = new Parse.Object('Child'); + await child.save(); + + const query = new Parse.Query(TestObject); + query.equalTo('child', child); + + const subscription = await query.subscribe(); + subscription.on('create', () => {}); + + // Do not need any expect block, just make sure that the server doesnt crash or throw error + const object1 = new TestObject(); + object1.set('child', null); + await object1.save(); + }); }); From bcc0fb319e431301b55d4f76de4becd91ba82907 Mon Sep 17 00:00:00 2001 From: Rahul Lanjewar Date: Wed, 30 Apr 2025 16:04:25 +0530 Subject: [PATCH 2/4] fix: minor fix --- spec/ParseLiveQuery.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/ParseLiveQuery.spec.js b/spec/ParseLiveQuery.spec.js index c8efe9207e..4e244f00e2 100644 --- a/spec/ParseLiveQuery.spec.js +++ b/spec/ParseLiveQuery.spec.js @@ -1332,7 +1332,7 @@ describe('ParseLiveQuery', function () { const subscription = await query.subscribe(); subscription.on('create', () => {}); - // Do not need any expect block, just make sure that the server doesnt crash or throw error + // Do not need any expect block, just make sure that the server doesn't crash or throw error const object1 = new TestObject(); object1.set('childs', [child3]); await object1.save(); @@ -1358,7 +1358,7 @@ describe('ParseLiveQuery', function () { const subscription = await query.subscribe(); subscription.on('create', () => {}); - // Do not need any expect block, just make sure that the server doesnt crash or throw error + // Do not need any expect block, just make sure that the server doesn't crash or throw error const object1 = new TestObject(); object1.set('child', null); await object1.save(); From 2cc82229a9e9a8d6805a3206e34b0cb2459abe70 Mon Sep 17 00:00:00 2001 From: Rahul Lanjewar Date: Wed, 30 Apr 2025 16:15:14 +0530 Subject: [PATCH 3/4] actual fix --- src/LiveQuery/QueryTools.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/LiveQuery/QueryTools.js b/src/LiveQuery/QueryTools.js index a839918088..08aa7e0c4c 100644 --- a/src/LiveQuery/QueryTools.js +++ b/src/LiveQuery/QueryTools.js @@ -99,7 +99,7 @@ function contains(haystack: Array, needle: any): boolean { if (typeof ptr === 'string' && ptr === needle.objectId) { return true; } - if (ptr.className === needle.className && ptr.objectId === needle.objectId) { + if (ptr && ptr.className === needle.className && ptr.objectId === needle.objectId) { return true; } } @@ -212,6 +212,7 @@ function matchesKeyConstraints(object, key, constraints) { return equalObjectsGeneric(object[key], constraints, function (obj, ptr) { return ( typeof obj !== 'undefined' && + obj !== null && ptr.className === obj.className && ptr.objectId === obj.objectId ); From 7e3994748a59a234374cd25654491583b303e67b Mon Sep 17 00:00:00 2001 From: Rahul Lanjewar Date: Wed, 30 Apr 2025 16:15:41 +0530 Subject: [PATCH 4/4] remove fits --- spec/ParseLiveQuery.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/ParseLiveQuery.spec.js b/spec/ParseLiveQuery.spec.js index 4e244f00e2..26ba8d2e75 100644 --- a/spec/ParseLiveQuery.spec.js +++ b/spec/ParseLiveQuery.spec.js @@ -1309,7 +1309,7 @@ describe('ParseLiveQuery', function () { expect(createSpy).toHaveBeenCalledTimes(1); }); - fit('Live query should work if needle is ParsePointer and haystack is any[], checking QueryTools.js>contains', async () => { + it('Live query should work if needle is ParsePointer and haystack is any[], checking QueryTools.js>contains', async () => { await reconfigureServer({ liveQuery: { classNames: ['TestObject'], @@ -1339,7 +1339,7 @@ describe('ParseLiveQuery', function () { }); - fit('Live query should work if we set equalTo(someKey,someParseObject) and new Parse object is created but someKey = null', async () => { + it('Live query should work if we set equalTo(someKey,someParseObject) and new Parse object is created but someKey = null', async () => { await reconfigureServer({ liveQuery: { classNames: ['TestObject'],