def test_queryset_transform(self): # We test with the SiteEvent model because it's a simple model # with no translated fields, no caching or other fancy features. SiteEvent.objects.create(start=datetime.now(), description='Zero') first = SiteEvent.objects.create(start=datetime.now(), description='First') second = SiteEvent.objects.create(start=datetime.now(), description='Second') SiteEvent.objects.create(start=datetime.now(), description='Third') SiteEvent.objects.create(start=datetime.now(), description='') seen_by_first_transform = [] seen_by_second_transform = [] with self.assertNumQueries(0): # No database hit yet, everything is still lazy. qs = amo_models.BaseQuerySet(SiteEvent) qs = qs.exclude(description='').order_by('id')[1:3] qs = qs.transform( lambda items: seen_by_first_transform.extend(list(items))) qs = qs.transform(lambda items: seen_by_second_transform.extend( list(reversed(items)))) with self.assertNumQueries(1): assert list(qs) == [first, second] # Check that each transform function was hit correctly, once. assert seen_by_first_transform == [first, second] assert seen_by_second_transform == [second, first]
def test_queryset_transform(self): # We test with the Config model because it's a simple model # with no translated fields, no caching or other fancy features. Config.objects.create(key='a', value='Zero') first = Config.objects.create(key='b', value='First') second = Config.objects.create(key='c', value='Second') Config.objects.create(key='d', value='Third') Config.objects.create(key='e', value='') seen_by_first_transform = [] seen_by_second_transform = [] with self.assertNumQueries(0): # No database hit yet, everything is still lazy. qs = amo_models.BaseQuerySet(Config) qs = qs.exclude(value='').order_by('key')[1:3] qs = qs.transform( lambda items: seen_by_first_transform.extend(list(items))) qs = qs.transform( lambda items: seen_by_second_transform.extend( list(reversed(items)))) with self.assertNumQueries(1): assert list(qs) == [first, second] # Check that each transform function was hit correctly, once. assert seen_by_first_transform == [first, second] assert seen_by_second_transform == [second, first]