@@ -169,87 +169,26 @@ def test_api_documents_list_authenticated_distinct():
169169 assert content ["results" ][0 ]["id" ] == str (document .id )
170170
171171
172- def test_api_documents_order_created_at_desc ():
172+ def test_api_documents_order_updated_at_desc_default ():
173173 """
174- Test that the endpoint GET documents is sorted in 'created_at' descending order by default.
175- """
176- user = factories .UserFactory ()
177- client = APIClient ()
178- client .force_login (user )
179-
180- documents_created = [
181- document .created_at .isoformat ().replace ("+00:00" , "Z" )
182- for document in factories .DocumentFactory .create_batch (5 , is_public = True )
183- ]
184-
185- documents_created .sort (reverse = True )
186-
187- response = client .get (
188- "/api/v1.0/documents/" ,
189- )
190-
191- assert response .status_code == 200
192-
193- response_data = response .json ()
194- response_document_created = [
195- document ["created_at" ] for document in response_data ["results" ]
196- ]
197-
198- assert (
199- response_document_created == documents_created
200- ), "created_at values are not sorted from newest to oldest"
201-
202-
203- def test_api_documents_order_created_at_asc ():
204- """
205- Test that the 'created_at' field is sorted in ascending order
206- when the 'ordering' query parameter is set.
207- """
208- user = factories .UserFactory ()
209- client = APIClient ()
210- client .force_login (user )
211-
212- documents_created = [
213- document .created_at .isoformat ().replace ("+00:00" , "Z" )
214- for document in factories .DocumentFactory .create_batch (5 , is_public = True )
215- ]
216-
217- documents_created .sort ()
218-
219- response = client .get (
220- "/api/v1.0/documents/?ordering=created_at" ,
221- )
222-
223- assert response .status_code == 200
224-
225- response_data = response .json ()
226- response_document_created = [
227- document ["created_at" ] for document in response_data ["results" ]
228- ]
229-
230- assert (
231- response_document_created == documents_created
232- ), "created_at values are not sorted from oldest to newest"
233-
234-
235- def test_api_documents_order_updated_at_desc ():
236- """
237- Test that the 'updated_at' field is sorted in descending order
238- when the 'ordering' query parameter is set.
174+ Test that the endpoint GET documents is sorted in 'updated_at' descending order by default.
239175 """
240176 user = factories .UserFactory ()
241177 client = APIClient ()
242178 client .force_login (user )
243179
180+ # Updated at next year to ensure the order is correct
244181 documents_updated = [
245182 document .updated_at .isoformat ().replace ("+00:00" , "Z" )
246- for document in factories .DocumentFactory .create_batch (5 , is_public = True )
183+ for document in factories .DocumentFactory .create_batch (
184+ 5 , is_public = True , updated_at = fake .date_time_this_year (before_now = False )
185+ )
247186 ]
248187
249188 documents_updated .sort (reverse = True )
250189
251190 response = APIClient ().get (
252- "/api/v1.0/documents/?ordering=-updated_at " ,
191+ "/api/v1.0/documents/" ,
253192 )
254193 assert response .status_code == 200
255194
@@ -264,97 +203,99 @@ def test_api_documents_order_updated_at_desc():
264203 ), "updated_at values are not sorted from newest to oldest"
265204
266205
267- def test_api_documents_order_updated_at_asc ():
268- """
269- Test that the 'updated_at' field is sorted in ascending order
270- when the 'ordering' query parameter is set.
271- """
272- user = factories .UserFactory ()
273- client = APIClient ()
274- client .force_login (user )
275-
276- documents_updated = [
277- document .updated_at .isoformat ().replace ("+00:00" , "Z" )
278- for document in factories .DocumentFactory .create_batch (5 , is_public = True )
279- ]
280-
281- documents_updated .sort ()
282-
283- response = APIClient ().get (
284- "/api/v1.0/documents/?ordering=updated_at" ,
285- )
286- assert response .status_code == 200
287-
288- response_data = response .json ()
289-
290- response_document_updated = [
291- document ["updated_at" ] for document in response_data ["results" ]
292- ]
293-
294- assert (
295- response_document_updated == documents_updated
296- ), "updated_at values are not sorted from oldest to newest"
297-
298-
299- def test_api_documents_order_title_desc ():
206+ @pytest .mark .parametrize (
207+ "ordering_field, factory_field" ,
208+ [
209+ ("-created_at" , "created_at" ),
210+ ("-updated_at" , "updated_at" ),
211+ ("-title" , "title" ),
212+ ],
213+ )
214+ def test_api_documents_ordering_desc (ordering_field , factory_field ):
300215 """
301- Test that the 'title' field is sorted in descending order
216+ Test that the specified field is sorted in descending order
302217 when the 'ordering' query parameter is set.
303218 """
304219 user = factories .UserFactory ()
305220 client = APIClient ()
306221 client .force_login (user )
307222
308- documents_title = [
309- factories .DocumentFactory (is_public = True , title = fake .sentence (nb_words = 4 )).title
310- for _ in range (5 )
311- ]
312-
313- documents_title .sort (reverse = True )
223+ if factory_field == "title" :
224+ documents_field_values = [
225+ factories .DocumentFactory (
226+ is_public = True , title = fake .sentence (nb_words = 4 )
227+ ).title
228+ for _ in range (5 )
229+ ]
230+ else :
231+ documents_field_values = [
232+ getattr (document , factory_field ).isoformat ().replace ("+00:00" , "Z" )
233+ for document in factories .DocumentFactory .create_batch (5 , is_public = True )
234+ ]
235+
236+ documents_field_values .sort (reverse = True )
314237
315- response = APIClient ().get (
316- "/api/v1.0/documents/?ordering=-title" ,
238+ response = client .get (
239+ f"/api/v1.0/documents/?ordering={ ordering_field } "
240+ if ordering_field != "-created_at"
241+ else "/api/v1.0/documents/" ,
317242 )
318243 assert response .status_code == 200
319244
320245 response_data = response .json ()
321246
322- response_documents_title = [
323- document ["title" ] for document in response_data ["results" ]
247+ response_documents_field_values = [
248+ document [factory_field ] for document in response_data ["results" ]
324249 ]
325250
326251 assert (
327- response_documents_title == documents_title
328- ), "title values are not sorted descending"
329-
330-
331- def test_api_documents_order_title_asc ():
252+ response_documents_field_values == documents_field_values
253+ ), f"{ factory_field } values are not sorted as expected"
254+
255+
256+ @pytest .mark .parametrize (
257+ "field" ,
258+ [
259+ ("updated_at" ),
260+ ("title" ),
261+ ("created_at" ),
262+ ],
263+ )
264+ def test_api_documents_ordering_asc (field ):
332265 """
333- Test that the 'title' field is sorted in ascending order
266+ Test that the specified field is sorted in ascending order
334267 when the 'ordering' query parameter is set.
335268 """
336269 user = factories .UserFactory ()
337270 client = APIClient ()
338271 client .force_login (user )
339272
340- documents_title = [
341- factories .DocumentFactory (is_public = True , title = fake .sentence (nb_words = 4 )).title
342- for _ in range (5 )
343- ]
344-
345- documents_title .sort ()
273+ if field == "title" :
274+ documents_field_values = [
275+ factories .DocumentFactory (
276+ is_public = True , title = fake .sentence (nb_words = 4 )
277+ ).title
278+ for _ in range (5 )
279+ ]
280+ else :
281+ documents_field_values = [
282+ getattr (document , field ).isoformat ().replace ("+00:00" , "Z" )
283+ for document in factories .DocumentFactory .create_batch (5 , is_public = True )
284+ ]
285+
286+ documents_field_values .sort ()
346287
347- response = APIClient () .get (
348- "/api/v1.0/documents/?ordering=title " ,
288+ response = client .get (
289+ f "/api/v1.0/documents/?ordering={ field } " ,
349290 )
350291 assert response .status_code == 200
351292
352293 response_data = response .json ()
353294
354- response_documents_title = [
355- document ["title" ] for document in response_data ["results" ]
295+ response_documents_field_values = [
296+ document [field ] for document in response_data ["results" ]
356297 ]
357298
358299 assert (
359- response_documents_title == documents_title
360- ), "title values are not sorted ascending "
300+ response_documents_field_values == documents_field_values
301+ ), f" { field } values are not sorted as expected "
0 commit comments