@@ -73,6 +73,88 @@ func setupAccountDataRouter() (*gin.Engine, *stubAdminService) {
7373 return router , adminSvc
7474}
7575
76+ func setupAccountListRouter () (* gin.Engine , * stubAdminService ) {
77+ gin .SetMode (gin .TestMode )
78+ router := gin .New ()
79+ adminSvc := newStubAdminService ()
80+
81+ h := NewAccountHandler (
82+ adminSvc ,
83+ nil ,
84+ nil ,
85+ nil ,
86+ nil ,
87+ nil ,
88+ nil ,
89+ nil ,
90+ nil ,
91+ nil ,
92+ nil ,
93+ nil ,
94+ nil ,
95+ nil ,
96+ )
97+
98+ router .GET ("/api/v1/admin/accounts" , h .List )
99+ return router , adminSvc
100+ }
101+
102+ func TestListAccountsPassesProxyFilter (t * testing.T ) {
103+ router , adminSvc := setupAccountListRouter ()
104+
105+ rec := httptest .NewRecorder ()
106+ req := httptest .NewRequest (http .MethodGet , "/api/v1/admin/accounts?proxy_id=34" , nil )
107+ router .ServeHTTP (rec , req )
108+ require .Equal (t , http .StatusOK , rec .Code )
109+
110+ require .Equal (t , 1 , adminSvc .lastListAccounts .calls )
111+ require .Equal (t , int64 (34 ), adminSvc .lastListAccounts .proxyID )
112+ }
113+
114+ func TestListAccountsPassesUnassignedProxyFilter (t * testing.T ) {
115+ router , adminSvc := setupAccountListRouter ()
116+
117+ rec := httptest .NewRecorder ()
118+ req := httptest .NewRequest (http .MethodGet , "/api/v1/admin/accounts?proxy_id=-1" , nil )
119+ router .ServeHTTP (rec , req )
120+ require .Equal (t , http .StatusOK , rec .Code )
121+
122+ require .Equal (t , 1 , adminSvc .lastListAccounts .calls )
123+ require .Equal (t , service .AccountListProxyUnassigned , adminSvc .lastListAccounts .proxyID )
124+ }
125+
126+ func TestListAccountsRejectsInvalidProxyFilter (t * testing.T ) {
127+ router , adminSvc := setupAccountListRouter ()
128+
129+ rec := httptest .NewRecorder ()
130+ req := httptest .NewRequest (http .MethodGet , "/api/v1/admin/accounts?proxy_id=abc" , nil )
131+ router .ServeHTTP (rec , req )
132+ require .Equal (t , http .StatusBadRequest , rec .Code )
133+ require .Equal (t , 0 , adminSvc .lastListAccounts .calls )
134+ }
135+
136+ func TestListAccountsRejectsUnsupportedNegativeProxyFilter (t * testing.T ) {
137+ router , adminSvc := setupAccountListRouter ()
138+
139+ rec := httptest .NewRecorder ()
140+ req := httptest .NewRequest (http .MethodGet , "/api/v1/admin/accounts?proxy_id=-2" , nil )
141+ router .ServeHTTP (rec , req )
142+ require .Equal (t , http .StatusBadRequest , rec .Code )
143+ require .Equal (t , 0 , adminSvc .lastListAccounts .calls )
144+ }
145+
146+ func TestListAccountsPassesLegacyProxyFilterAlias (t * testing.T ) {
147+ router , adminSvc := setupAccountListRouter ()
148+
149+ rec := httptest .NewRecorder ()
150+ req := httptest .NewRequest (http .MethodGet , "/api/v1/admin/accounts?proxy=35" , nil )
151+ router .ServeHTTP (rec , req )
152+ require .Equal (t , http .StatusOK , rec .Code )
153+
154+ require .Equal (t , 1 , adminSvc .lastListAccounts .calls )
155+ require .Equal (t , int64 (35 ), adminSvc .lastListAccounts .proxyID )
156+ }
157+
76158func TestExportDataIncludesSecrets (t * testing.T ) {
77159 router , adminSvc := setupAccountDataRouter ()
78160
@@ -182,7 +264,7 @@ func TestExportDataPassesAccountFiltersAndSort(t *testing.T) {
182264 rec := httptest .NewRecorder ()
183265 req := httptest .NewRequest (
184266 http .MethodGet ,
185- "/api/v1/admin/accounts/data?platform=openai&type=oauth&status=active&group=12&privacy_mode=blocked&search=keyword&sort_by=priority&sort_order=desc" ,
267+ "/api/v1/admin/accounts/data?platform=openai&type=oauth&status=active&group=12&proxy_id=34& privacy_mode=blocked&search=keyword&sort_by=priority&sort_order=desc" ,
186268 nil ,
187269 )
188270 router .ServeHTTP (rec , req )
@@ -193,6 +275,7 @@ func TestExportDataPassesAccountFiltersAndSort(t *testing.T) {
193275 require .Equal (t , "oauth" , adminSvc .lastListAccounts .accountType )
194276 require .Equal (t , "active" , adminSvc .lastListAccounts .status )
195277 require .Equal (t , int64 (12 ), adminSvc .lastListAccounts .groupID )
278+ require .Equal (t , int64 (34 ), adminSvc .lastListAccounts .proxyID )
196279 require .Equal (t , "blocked" , adminSvc .lastListAccounts .privacyMode )
197280 require .Equal (t , "keyword" , adminSvc .lastListAccounts .search )
198281 require .Equal (t , "priority" , adminSvc .lastListAccounts .sortBy )
0 commit comments