def test_or_condition(self): """Test OR conditions.""" query = datastore_query._KeyQuery(TestDatastoreModel) query.filter('IN', 'tokens', ['a', 'b', 'c']) query.filter('IN', 'boolean_value', [True, False]) query.order('datetime_value', True) queries = query.flatten() for q in queries: self.assertListEqual([], q.or_filters) self.assertEqual('datetime_value', q.order_property) self.assertTrue(q.order_desc) def _make(token, boolean): return [('=', 'tokens', token), ('=', 'boolean_value', boolean)] self.assertEqual(6, len(queries)) self.assertListEqual(_make('a', True), queries[0].filters) self.assertListEqual(_make('b', True), queries[1].filters) self.assertListEqual(_make('c', True), queries[2].filters) self.assertListEqual(_make('a', False), queries[3].filters) self.assertListEqual(_make('b', False), queries[4].filters) self.assertListEqual(_make('c', False), queries[5].filters) items, count, has_more = query.fetch(offset=8, limit=2, more_limit=40) self.assertListEqual([self.mocks[8].key.id(), self.mocks[9].key.id()], [item.key.id() for item in items]) self.assertEqual(30, count) self.assertFalse(has_more)
def test_empty(self): """Test when there's no record.""" query = datastore_query._KeyQuery(TestDatastoreModel) query.filter('=', 'tokens', 'c') query.order('datetime_value', True) items, count, has_more = query.fetch(offset=0, limit=10, more_limit=20) self.assertListEqual([], items) self.assertEqual(0, count) self.assertFalse(has_more)
def test_get_more(self): """Test multiple OR conditions and get more items for total count.""" query = datastore_query._KeyQuery(TestDatastoreModel) query.filter('IN', 'tokens', ['a', 'b']) query.order('datetime_value', True) items, count, has_more = query.fetch(offset=8, limit=2, more_limit=15) self.assertListEqual([self.mocks[8].key.id(), self.mocks[9].key.id()], [item.key.id() for item in items]) self.assertEqual(25, count) self.assertTrue(has_more)
def test_no_or_condition(self): """Test no OR condition.""" query = datastore_query._KeyQuery(TestDatastoreModel) query.filter('=', 'tokens', 'a') query.order('datetime_value', True) items, count, has_more = query.fetch(offset=8, limit=2, more_limit=10) self.assertListEqual([self.mocks[16].key.id(), self.mocks[18].key.id()], [item.key.id() for item in items]) self.assertEqual(15, count) self.assertFalse(has_more)