@@ -78,3 +78,88 @@ def test_push_and_delete_raw_package(
7878 )
7979 data = json .loads (result .output )["data" ]
8080 assert len (data ) == 0
81+
82+
83+ @pytest .mark .usefixtures ("set_api_key_env_var" , "set_api_host_env_var" )
84+ def test_list_packages_with_sort (runner , organization , tmp_repository , tmp_path ):
85+ """Test listing packages with different sort options."""
86+ org_repo = f'{ organization } /{ tmp_repository ["slug" ]} '
87+
88+ # Create and push two packages with different names
89+ for name in ["aaa" , "zzz" ]:
90+ pkg_file = tmp_path / f"{ name } .txt"
91+ with open (pkg_file , "wb" ) as f :
92+ f .write (b"test content" )
93+
94+ runner .invoke (
95+ push ,
96+ args = ["raw" , org_repo , str (pkg_file .resolve ())],
97+ catch_exceptions = False ,
98+ )
99+
100+ # Wait for package to sync
101+ result = runner .invoke (
102+ list_ , args = ["pkgs" , org_repo , "-F" , "json" ], catch_exceptions = False
103+ )
104+ data = json .loads (result .output )["data" ]
105+ pkg_slug = next (pkg ["slug" ] for pkg in data if pkg ["filename" ] == pkg_file .name )
106+ org_repo_package = f"{ org_repo } /{ pkg_slug } "
107+
108+ for _ in range (10 ):
109+ time .sleep (5 )
110+ result = runner .invoke (
111+ status , args = [org_repo_package ], catch_exceptions = False
112+ )
113+ if "Fully Synchronised" in result .output :
114+ break
115+ else :
116+ raise TimeoutError ("Test timed out waiting for package sync" )
117+
118+ # Test ascending sort by name
119+ result = runner .invoke (
120+ list_ ,
121+ args = ["pkgs" , org_repo , "--sort" , "name" , "-F" , "json" ],
122+ catch_exceptions = False ,
123+ )
124+ data = json .loads (result .output )["data" ]
125+ assert len (data ) == 2
126+ assert data [0 ]["filename" ] == "aaa.txt"
127+ assert data [1 ]["filename" ] == "zzz.txt"
128+
129+ # Test descending sort by name
130+ result = runner .invoke (
131+ list_ ,
132+ args = ["pkgs" , org_repo , "--sort" , "-name" , "-F" , "json" ],
133+ catch_exceptions = False ,
134+ )
135+ data = json .loads (result .output )["data" ]
136+ assert len (data ) == 2
137+ assert data [0 ]["filename" ] == "zzz.txt"
138+ assert data [1 ]["filename" ] == "aaa.txt"
139+
140+ # Test sort by date (newest first)
141+ result = runner .invoke (
142+ list_ ,
143+ args = ["pkgs" , org_repo , "--sort" , "-date" , "-F" , "json" ],
144+ catch_exceptions = False ,
145+ )
146+ data = json .loads (result .output )["data" ]
147+ assert len (data ) == 2
148+ assert data [0 ]["filename" ] == "zzz.txt" # Last uploaded
149+ assert data [1 ]["filename" ] == "aaa.txt" # First uploaded
150+
151+ # Cleanup - delete both packages
152+ for pkg in data :
153+ org_repo_package = f"{ org_repo } /{ pkg ['slug' ]} "
154+ runner .invoke (delete , args = ["-y" , org_repo_package ], catch_exceptions = False )
155+
156+ # Wait for deletion
157+ for _ in range (10 ):
158+ time .sleep (5 )
159+ result = runner .invoke (
160+ status , args = [org_repo_package ], catch_exceptions = False
161+ )
162+ if "status: 404 - Not Found" in result .output :
163+ break
164+ else :
165+ raise TimeoutError ("Test timed out waiting for package deletion" )
0 commit comments