@@ -30,55 +30,57 @@ def setUp(self) -> None:
3030 def test_simple_aggregate (self ):
3131 """Test simple aggregate with Sum"""
3232 queryset = StoreProduct .objects .filter ()
33- aggregate_queryset = queryset .aggregate (total_price = Sum ("selling_price" ))
33+ aggregate_expressions = {'total_price' : Sum ("selling_price" )}
34+ expected_result = queryset .aggregate (** aggregate_expressions )
3435
3536 with self .assertNumQueries (1 ):
3637 results = QuerysetsSingleQueryFetch (
37- querysets = [QuerysetAggregateWrapper (queryset = queryset , ** aggregate_queryset )]
38+ querysets = [QuerysetAggregateWrapper (queryset = queryset , ** aggregate_expressions )]
3839 ).execute ()
3940
4041 self .assertEqual (len (results ), 1 )
4142 aggregate_result = results [0 ]
4243
43- self .assertEqual (len (aggregate_result ), len (aggregate_queryset ))
44+ self .assertEqual (len (aggregate_result ), len (expected_result ))
4445 self .assertIn ('total_price' , aggregate_result )
4546 self .assertAlmostEqual (
4647 float (aggregate_result ['total_price' ]),
47- float (aggregate_queryset ['total_price' ]),
48+ float (expected_result ['total_price' ]),
4849 places = 2
4950 )
5051
5152 def test_multiple_aggregates (self ):
5253 """Test multiple aggregates in a single query"""
5354 queryset = StoreProduct .objects .filter ()
54- aggregate_queryset = queryset .aggregate (
55- total_price = Sum ("selling_price" ),
56- count = Count ("id" ),
57- avg_price = Avg ("selling_price" ),
58- max_price = Max ("selling_price" ),
59- min_price = Min ("selling_price" ),
60- )
55+ aggregate_expressions = {
56+ 'total_price' : Sum ("selling_price" ),
57+ 'count' : Count ("id" ),
58+ 'avg_price' : Avg ("selling_price" ),
59+ 'max_price' : Max ("selling_price" ),
60+ 'min_price' : Min ("selling_price" ),
61+ }
62+ expected_result = queryset .aggregate (** aggregate_expressions )
6163
6264 with self .assertNumQueries (1 ):
6365 results = QuerysetsSingleQueryFetch (
64- querysets = [QuerysetAggregateWrapper (queryset = queryset , ** aggregate_queryset )]
66+ querysets = [QuerysetAggregateWrapper (queryset = queryset , ** aggregate_expressions )]
6567 ).execute ()
6668
6769 self .assertEqual (len (results ), 1 )
6870 aggregate_result = results [0 ]
6971
70- self .assertEqual (len (aggregate_result ), len (aggregate_queryset ))
72+ self .assertEqual (len (aggregate_result ), len (expected_result ))
7173
72- for key in aggregate_queryset .keys ():
74+ for key in expected_result .keys ():
7375 self .assertIn (key , aggregate_result )
74- if isinstance (aggregate_queryset [key ], Decimal ) or isinstance (aggregate_result [key ], (int , float , Decimal )):
76+ if isinstance (expected_result [key ], Decimal ) or isinstance (aggregate_result [key ], (int , float , Decimal )):
7577 self .assertAlmostEqual (
7678 float (aggregate_result [key ]),
77- float (aggregate_queryset [key ]),
79+ float (expected_result [key ]),
7880 places = 2
7981 )
8082 else :
81- self .assertEqual (aggregate_result [key ], aggregate_queryset [key ])
83+ self .assertEqual (aggregate_result [key ], expected_result [key ])
8284
8385 self .assertEqual (aggregate_result ['count' ], 4 )
8486 self .assertAlmostEqual (
@@ -90,31 +92,32 @@ def test_multiple_aggregates(self):
9092 def test_filtered_aggregate (self ):
9193 """Test aggregate with filter"""
9294 queryset = StoreProduct .objects .filter (category = self .category1 )
93- aggregate_queryset = queryset .aggregate (
94- total_price = Sum ("selling_price" ),
95- count = Count ("id" ),
96- )
95+ aggregate_expressions = {
96+ 'total_price' : Sum ("selling_price" ),
97+ 'count' : Count ("id" ),
98+ }
99+ expected_result = queryset .aggregate (** aggregate_expressions )
97100
98101 with self .assertNumQueries (1 ):
99102 results = QuerysetsSingleQueryFetch (
100- querysets = [QuerysetAggregateWrapper (queryset = queryset , ** aggregate_queryset )]
103+ querysets = [QuerysetAggregateWrapper (queryset = queryset , ** aggregate_expressions )]
101104 ).execute ()
102105
103106 self .assertEqual (len (results ), 1 )
104107 aggregate_result = results [0 ]
105108
106- self .assertEqual (len (aggregate_result ), len (aggregate_queryset ))
109+ self .assertEqual (len (aggregate_result ), len (expected_result ))
107110
108- for key in aggregate_queryset .keys ():
111+ for key in expected_result .keys ():
109112 self .assertIn (key , aggregate_result )
110- if isinstance (aggregate_queryset [key ], Decimal ) or isinstance (aggregate_result [key ], (int , float , Decimal )):
113+ if isinstance (expected_result [key ], Decimal ) or isinstance (aggregate_result [key ], (int , float , Decimal )):
111114 self .assertAlmostEqual (
112115 float (aggregate_result [key ]),
113- float (aggregate_queryset [key ]),
116+ float (expected_result [key ]),
114117 places = 2
115118 )
116119 else :
117- self .assertEqual (aggregate_result [key ], aggregate_queryset [key ])
120+ self .assertEqual (aggregate_result [key ], expected_result [key ])
118121
119122 self .assertEqual (aggregate_result ['count' ], 2 ) # Only products in category1
120123 self .assertAlmostEqual (
@@ -126,40 +129,43 @@ def test_filtered_aggregate(self):
126129 def test_empty_aggregate (self ):
127130 """Test aggregate on empty queryset"""
128131 queryset = StoreProduct .objects .filter (id = - 1 ) # No matches
129- aggregate_queryset = queryset .aggregate (
130- total_price = Sum ("selling_price" ),
131- count = Count ("id" ),
132- )
132+ aggregate_expressions = {
133+ 'total_price' : Sum ("selling_price" ),
134+ 'count' : Count ("id" ),
135+ }
136+ expected_result = queryset .aggregate (** aggregate_expressions )
133137
134138 with self .assertNumQueries (1 ):
135139 results = QuerysetsSingleQueryFetch (
136- querysets = [QuerysetAggregateWrapper (queryset = queryset , ** aggregate_queryset )]
140+ querysets = [QuerysetAggregateWrapper (queryset = queryset , ** aggregate_expressions )]
137141 ).execute ()
138142
139143 self .assertEqual (len (results ), 1 )
140144 aggregate_result = results [0 ]
141145
142- self .assertEqual (len (aggregate_result ), len (aggregate_queryset ))
146+ self .assertEqual (len (aggregate_result ), len (expected_result ))
143147
144- for key in aggregate_queryset .keys ():
148+ for key in expected_result .keys ():
145149 self .assertIn (key , aggregate_result )
146- self .assertEqual (aggregate_result [key ], aggregate_queryset [key ])
150+ self .assertEqual (aggregate_result [key ], expected_result [key ])
147151
148152 self .assertEqual (aggregate_result ['count' ], 0 )
149153 self .assertIsNone (aggregate_result ['total_price' ])
150154
151155 def test_mix_with_other_querysets (self ):
152156 """Test mixture of aggregate wrapper and other querysets"""
153- aggregate_queryset = StoreProduct .objects .filter ().aggregate (
154- total_price = Sum ("selling_price" ),
155- count = Count ("id" ),
156- )
157+ queryset = StoreProduct .objects .filter ()
158+ aggregate_expressions = {
159+ 'total_price' : Sum ("selling_price" ),
160+ 'count' : Count ("id" ),
161+ }
162+ expected_result = queryset .aggregate (** aggregate_expressions )
157163 regular_queryset = StoreProductCategory .objects .filter ()
158164
159165 with self .assertNumQueries (1 ):
160166 results = QuerysetsSingleQueryFetch (
161167 querysets = [
162- QuerysetAggregateWrapper (queryset = StoreProduct . objects . filter () , ** aggregate_queryset ),
168+ QuerysetAggregateWrapper (queryset = queryset , ** aggregate_expressions ),
163169 regular_queryset
164170 ]
165171 ).execute ()
@@ -168,18 +174,18 @@ def test_mix_with_other_querysets(self):
168174 aggregate_result = results [0 ]
169175 categories = results [1 ]
170176
171- self .assertEqual (len (aggregate_result ), len (aggregate_queryset ))
177+ self .assertEqual (len (aggregate_result ), len (expected_result ))
172178
173- for key in aggregate_queryset .keys ():
179+ for key in expected_result .keys ():
174180 self .assertIn (key , aggregate_result )
175- if isinstance (aggregate_queryset [key ], Decimal ) or isinstance (aggregate_result [key ], (int , float , Decimal )):
181+ if isinstance (expected_result [key ], Decimal ) or isinstance (aggregate_result [key ], (int , float , Decimal )):
176182 self .assertAlmostEqual (
177183 float (aggregate_result [key ]),
178- float (aggregate_queryset [key ]),
184+ float (expected_result [key ]),
179185 places = 2
180186 )
181187 else :
182- self .assertEqual (aggregate_result [key ], aggregate_queryset [key ])
188+ self .assertEqual (aggregate_result [key ], expected_result [key ])
183189
184190 regular_categories = list (regular_queryset )
185191 self .assertEqual (len (categories ), len (regular_categories ))
0 commit comments