@@ -363,6 +363,78 @@ def test_order_permalink_regex(self):
363363 ),
364364 )
365365
366+ def test_resource_sort_order_default_is_desc (self ):
367+ """If resource_sort_order is omitted from config, resources are ordered desc."""
368+ filesystem = self .get_filesystem (filename = "20160901.csv" )
369+ MockFTPStorageAdapter .filesystem = filesystem
370+ path = os .path .join (data .environment , data .folder , "20160902.csv" )
371+ filesystem .writetext (path , data .dataset_content_2 )
372+ self .run_harvester (ftp_server = "testserver" )
373+
374+ package = self .get_package ()
375+ self .assertEqual (package .resources [0 ].extras ["identifier" ], "20160902.csv" )
376+ self .assertEqual (package .resources [1 ].extras ["identifier" ], "20160901.csv" )
377+
378+ def test_resource_sort_order_desc_explicit (self ):
379+ """resource_sort_order 'desc' sorts identifiers descending (newest name first)."""
380+ filesystem = self .get_filesystem (filename = "20160901.csv" )
381+ MockFTPStorageAdapter .filesystem = filesystem
382+ path = os .path .join (data .environment , data .folder , "20160902.csv" )
383+ filesystem .writetext (path , data .dataset_content_2 )
384+ self .run_harvester (ftp_server = "testserver" , resource_sort_order = "desc" )
385+
386+ package = self .get_package ()
387+ self .assertEqual (package .resources [0 ].extras ["identifier" ], "20160902.csv" )
388+ self .assertEqual (package .resources [1 ].extras ["identifier" ], "20160901.csv" )
389+
390+ def test_resource_sort_order_asc (self ):
391+ """resource_sort_order 'asc' sorts identifiers ascending."""
392+ filesystem = self .get_filesystem (filename = "20160901.csv" )
393+ MockFTPStorageAdapter .filesystem = filesystem
394+ path = os .path .join (data .environment , data .folder , "20160902.csv" )
395+ filesystem .writetext (path , data .dataset_content_2 )
396+ self .run_harvester (ftp_server = "testserver" , resource_sort_order = "asc" )
397+
398+ package = self .get_package ()
399+ self .assertEqual (package .resources [0 ].extras ["identifier" ], "20160901.csv" )
400+ self .assertEqual (package .resources [1 ].extras ["identifier" ], "20160902.csv" )
401+ self .assertEqual (
402+ package .extras ["permalink" ],
403+ "http://odp.test/dataset/{}/resource/{}/download/20160901.csv" .format (
404+ package .id , package .resources [0 ].id
405+ ),
406+ )
407+
408+ def test_resource_sort_order_ignored_when_resource_regex_in_config (self ):
409+ """If resource_regex is present in the harvester config, resource_sort_order is
410+ ignored: matched files keep descending identifier order even when asc is set.
411+ Unmatched files still precede the matched block (unchanged).
412+ """
413+ filesystem = self .get_filesystem (filename = "20160901.csv" )
414+ MockFTPStorageAdapter .filesystem = filesystem
415+ path = os .path .join (data .environment , data .folder , "20160902.csv" )
416+ filesystem .writetext (path , data .dataset_content_2 )
417+ path = os .path .join (data .environment , data .folder , "1111Resource.csv" )
418+ filesystem .writetext (path , data .dataset_content_3 )
419+ path = os .path .join (data .environment , data .folder , "9999Resource.csv" )
420+ filesystem .writetext (path , data .dataset_content_3 )
421+
422+ self .run_harvester (
423+ resource_regex = r"\d{8}.csv" ,
424+ resource_sort_order = "asc" ,
425+ ftp_server = "testserver" ,
426+ )
427+ package = self .get_package ()
428+ self .assertEqual (
429+ [r .extras ["identifier" ] for r in package .resources ],
430+ [
431+ "1111Resource.csv" ,
432+ "9999Resource.csv" ,
433+ "20160902.csv" ,
434+ "20160901.csv" ,
435+ ],
436+ )
437+
366438 # cleanup tests
367439 def test_max_resources (self ):
368440 filesystem = self .get_filesystem (filename = "20160901.csv" )
0 commit comments