package admin import ( "encoding/json" "net/http" "net/http/httptest" "testing" "github.com/Wei-Shaw/sub2api/internal/service" "github.com/gin-gonic/gin" "github.com/stretchr/testify/require" ) type proxyDataResponse struct { Code int `json:"code"` Data DataPayload `json:"data"` } func setupProxyDataRouter() (*gin.Engine, *stubAdminService) { gin.SetMode(gin.TestMode) router := gin.New() adminSvc := newStubAdminService() h := NewProxyHandler(adminSvc) router.GET("/api/v1/admin/proxies/data", h.ExportData) return router, adminSvc } func TestProxyExportDataRespectsFilters(t *testing.T) { router, adminSvc := setupProxyDataRouter() adminSvc.proxies = []service.Proxy{ { ID: 1, Name: "proxy-a", Protocol: "http", Host: "127.0.0.1", Port: 8080, Username: "user", Password: "pass", Status: service.StatusActive, }, { ID: 2, Name: "proxy-b", Protocol: "https", Host: "10.0.0.2", Port: 443, Username: "u", Password: "p", Status: service.StatusDisabled, }, } rec := httptest.NewRecorder() req := httptest.NewRequest(http.MethodGet, "/api/v1/admin/proxies/data?protocol=https", nil) router.ServeHTTP(rec, req) require.Equal(t, http.StatusOK, rec.Code) var resp proxyDataResponse require.NoError(t, json.Unmarshal(rec.Body.Bytes(), &resp)) require.Equal(t, 0, resp.Code) require.Equal(t, dataType, resp.Data.Type) require.Len(t, resp.Data.Proxies, 1) require.Len(t, resp.Data.Accounts, 0) require.Equal(t, "https", resp.Data.Proxies[0].Protocol) }