package admin import ( "net/http" "net/http/httptest" "testing" "github.com/gin-gonic/gin" "github.com/stretchr/testify/require" ) func setupRedeemExportRouter() (*gin.Engine, *stubAdminService) { gin.SetMode(gin.TestMode) router := gin.New() adminSvc := newStubAdminService() h := NewRedeemHandler(adminSvc, nil) router.GET("/api/v1/admin/redeem-codes/export", h.Export) return router, adminSvc } func TestRedeemExportPassesSearchAndSort(t *testing.T) { router, adminSvc := setupRedeemExportRouter() rec := httptest.NewRecorder() req := httptest.NewRequest(http.MethodGet, "/api/v1/admin/redeem-codes/export?type=balance&status=unused&search=ABC&sort_by=value&sort_order=asc", nil) router.ServeHTTP(rec, req) require.Equal(t, http.StatusOK, rec.Code) require.Equal(t, 1, adminSvc.lastListRedeemCodes.calls) require.Equal(t, "balance", adminSvc.lastListRedeemCodes.codeType) require.Equal(t, "unused", adminSvc.lastListRedeemCodes.status) require.Equal(t, "ABC", adminSvc.lastListRedeemCodes.search) require.Equal(t, "value", adminSvc.lastListRedeemCodes.sortBy) require.Equal(t, "asc", adminSvc.lastListRedeemCodes.sortOrder) } func TestRedeemExportSortDefaults(t *testing.T) { router, adminSvc := setupRedeemExportRouter() rec := httptest.NewRecorder() req := httptest.NewRequest(http.MethodGet, "/api/v1/admin/redeem-codes/export", nil) router.ServeHTTP(rec, req) require.Equal(t, http.StatusOK, rec.Code) require.Equal(t, 1, adminSvc.lastListRedeemCodes.calls) require.Equal(t, "id", adminSvc.lastListRedeemCodes.sortBy) require.Equal(t, "desc", adminSvc.lastListRedeemCodes.sortOrder) }