def testPagination(self): fd=orders.get_full_order_fetchdef() filter=orders.Customer.account_id>=-1 # This selects all records - in future allow None filter to do this. # Page 1 results1, curs1, more1=fetch_page(fd, 6, filter=filter, order=orders.Customer.account_id) self.assertEqual(len(results1), 6) customer=results1[0] curs1_str=curs1.urlsafe() self.assertTrue(isinstance(customer.orders, types.ListType), "Customer.orders should be a list") # Page 2 new_curs1 = ndb.Cursor(urlsafe=curs1_str) results2, curs2, more2=fetch_page(fd, 6, filter=filter, start_cursor=new_curs1, order=orders.Customer.account_id) self.assertEqual(len(results2), 4) self.assertFalse(more2) # Page 3 should be the same as page 1, except with the results in the opposite order. prev_cursor=new_curs1.reversed() results3, curs3, more3=fetch_page(fd, 6, filter=filter, start_cursor=prev_cursor, order=-orders.Customer.account_id) results3.reverse() self.assertEqual(results3[0].key.id(), results1[0].key.id()) # Page 4 is the page after Page 2 (should have no results) results4, curs4, more4=fetch_page(fd, 6, filter=filter, start_cursor=curs2, order=orders.Customer.account_id)
def testQueryNoResults(self): fd = FetchDefinition(Foo) results = fetch(fd, filter=Foo.name=='NOTHING MATCHES THIS') self.assertTrue(len(results)==0, "non empty results returned") results2, curs, more = fetch_page(fd, 10, filter=Foo.name=='NOTHING MATCHES THIS') self.assertTrue(len(results2)==0, "non empty results returned")