From c8410acd79fe6f8f4cd36b4eacb384c5874d61d2 Mon Sep 17 00:00:00 2001 From: Guillaume Bernos Date: Thu, 16 Nov 2023 09:17:38 +0100 Subject: [PATCH] fix(firestore, web): fix being able to use normal `where` conditions and `Filter.OR` together (#11891) --- .../example/integration_test/query_e2e.dart | 40 +++++++++++++++++++ .../lib/src/query_web.dart | 2 +- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/packages/cloud_firestore/cloud_firestore/example/integration_test/query_e2e.dart b/packages/cloud_firestore/cloud_firestore/example/integration_test/query_e2e.dart index 3b367c154f13..bdf26e4a5b1c 100644 --- a/packages/cloud_firestore/cloud_firestore/example/integration_test/query_e2e.dart +++ b/packages/cloud_firestore/cloud_firestore/example/integration_test/query_e2e.dart @@ -1984,6 +1984,46 @@ void runQueryTests() { expect(results.docs[0].data()['genre'], equals(['sci-fi', 'action'])); }); + testWidgets('returns documents with OR filter and a previous condition', + (_) async { + CollectionReference> collection = + await initializeTest('where-filter-and'); + await Future.wait([ + collection.doc('doc1').set({ + 'genre': 'fantasy', + 'rating': 4.5, + 'year': 1970, + }), + collection.doc('doc2').set({ + 'genre': 'fantasy', + 'rating': 3.8, + 'year': 1980, + }), + collection.doc('doc3').set({ + 'genre': 'sci-fi', + 'rating': 4.2, + 'year': 1980, + }), + ]); + + final results = await collection + .where('genre', isEqualTo: 'fantasy') + .where( + Filter.or( + Filter('year', isEqualTo: 1980), + Filter('rating', isGreaterThanOrEqualTo: 4.0), + ), + ) + .orderBy('rating') + .get(); + + expect(results.docs.length, equals(2)); + expect(results.docs[0].id, equals('doc2')); + expect(results.docs[0].data()['rating'], equals(3.8)); + expect(results.docs[1].id, equals('doc1')); + expect(results.docs[1].data()['rating'], equals(4.5)); + }); + testWidgets('returns documents with nested OR and AND filters', (_) async { CollectionReference> collection = diff --git a/packages/cloud_firestore/cloud_firestore_web/lib/src/query_web.dart b/packages/cloud_firestore/cloud_firestore_web/lib/src/query_web.dart index fce7490ac006..f8deceeac48f 100644 --- a/packages/cloud_firestore/cloud_firestore_web/lib/src/query_web.dart +++ b/packages/cloud_firestore/cloud_firestore_web/lib/src/query_web.dart @@ -101,7 +101,7 @@ class QueryWeb extends QueryPlatform { if (parameters['filters'] != null) { final Map filter = parameters['filters']!; - return query.filterWith(filter); + query = query.filterWith(filter); } for (final List condition in parameters['where']) {