package api import ( "context" "encoding/json" "net/http" "net/http/httptest" "testing" "github.com/go-chi/chi/v5" "git.fabledsword.com/bvandeusen/minstrel/internal/auth" "git.fabledsword.com/bvandeusen/minstrel/internal/db/dbq" ) func getAdminSummary(t *testing.T, h *handlers, user dbq.User) (int, adminSummaryView) { t.Helper() r := chi.NewRouter() r.Route("/api/admin", func(admin chi.Router) { admin.Use(auth.RequireAdmin()) admin.Get("/summary", h.handleGetAdminSummary) }) w := httptest.NewRecorder() r.ServeHTTP(w, withUser(httptest.NewRequest(http.MethodGet, "/api/admin/summary", nil), user)) var out adminSummaryView if w.Code == http.StatusOK { if err := json.Unmarshal(w.Body.Bytes(), &out); err != nil { t.Fatal(err) } } return w.Code, out } // The summary counts each queue an admin acts on and says since when the // oldest item has waited; an empty queue has no since (#5605). func TestAdminSummary_CountsTheQueuesAndSinceWhen(t *testing.T) { h, _ := testHandlers(t) admin := seedUser(t, h.pool, "admin", "pw", true) listener := seedUser(t, h.pool, "listener", "pw", false) ctx := context.Background() code, empty := getAdminSummary(t, h, admin) if code != http.StatusOK { t.Fatalf("status = %d", code) } if empty.Requests.Count != 0 || empty.Requests.Since != nil || empty.Missing.Count != 0 { t.Errorf("empty summary = %+v", empty) } if _, err := dbq.New(h.pool).CreateRequest(ctx, dbq.CreateRequestParams{ UserID: listener.ID, Kind: dbq.RequestKindArtist, ArtistMbid: "a0000000-0000-4000-8000-000000000001", ArtistName: "Annadale", }); err != nil { t.Fatal(err) } _, got := getAdminSummary(t, h, admin) if got.Requests.Count != 1 || got.Requests.Since == nil { t.Errorf("requests = %+v, want 1 with a since", got.Requests) } if code, _ := getAdminSummary(t, h, listener); code != http.StatusForbidden { t.Errorf("a listener got %d, want 403", code) } }