@@ -1207,6 +1207,61 @@ def test_basequery__normalize_orders_w_name_orders_w_none_cursor():
12071207 assert query ._normalize_orders () == expected
12081208
12091209
1210+ def test_basequery__normalize_orders_w_cursor_descending ():
1211+ """
1212+ Test case for b/306472103
1213+ """
1214+ from google .cloud .firestore_v1 .base_query import FieldFilter
1215+
1216+ collection = _make_collection ("here" )
1217+ snapshot = _make_snapshot (_make_docref ("here" , "doc_id" ), {"a" : 1 , "b" : 2 })
1218+ query = (
1219+ _make_base_query (collection )
1220+ .where (filter = FieldFilter ("a" , "==" , 1 ))
1221+ .where (filter = FieldFilter ("b" , "in" , [1 , 2 , 3 ]))
1222+ .order_by ("c" , "DESCENDING" )
1223+ )
1224+ query_w_snapshot = query .start_after (snapshot )
1225+
1226+ normalized = query ._normalize_orders ()
1227+ expected = [query ._make_order ("c" , "DESCENDING" )]
1228+ assert normalized == expected
1229+
1230+ normalized_w_snapshot = query_w_snapshot ._normalize_orders ()
1231+ expected_w_snapshot = expected + [query ._make_order ("__name__" , "DESCENDING" )]
1232+ assert normalized_w_snapshot == expected_w_snapshot
1233+
1234+
1235+ def test_basequery__normalize_orders_w_cursor_descending_w_inequality ():
1236+ """
1237+ Test case for b/306472103, with extra ineuality filter in "where" clause
1238+ """
1239+ from google .cloud .firestore_v1 .base_query import FieldFilter
1240+
1241+ collection = _make_collection ("here" )
1242+ snapshot = _make_snapshot (_make_docref ("here" , "doc_id" ), {"a" : 1 , "b" : 2 })
1243+ query = (
1244+ _make_base_query (collection )
1245+ .where (filter = FieldFilter ("a" , "==" , 1 ))
1246+ .where (filter = FieldFilter ("b" , "in" , [1 , 2 , 3 ]))
1247+ .where (filter = FieldFilter ("c" , "not-in" , [4 , 5 , 6 ]))
1248+ .order_by ("d" , "DESCENDING" )
1249+ )
1250+ query_w_snapshot = query .start_after (snapshot )
1251+
1252+ normalized = query ._normalize_orders ()
1253+ expected = [query ._make_order ("d" , "DESCENDING" )]
1254+ assert normalized == expected
1255+
1256+ normalized_w_snapshot = query_w_snapshot ._normalize_orders ()
1257+ expected_w_snapshot = [
1258+ query ._make_order ("d" , "DESCENDING" ),
1259+ query ._make_order ("c" , "DESCENDING" ),
1260+ query ._make_order ("__name__" , "DESCENDING" ),
1261+ ]
1262+ assert normalized_w_snapshot == expected_w_snapshot
1263+
1264+
12101265def test_basequery__normalize_cursor_none ():
12111266 query = _make_base_query (mock .sentinel .parent )
12121267 assert query ._normalize_cursor (None , query ._orders ) is None
0 commit comments