release / govulncheck (push) Successful in 15s
release / web (push) Failing after 17s
release / go (push) Successful in 1m13s
release / integration (push) Successful in 4m56s
release / android (push) Successful in 5m9s
release / Build signed APK (releases and dev) (push) Successful in 5m19s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Skipped
release / Verify release artifacts (tag releases only) (push) Skipped
Migration 0091 drops lidarr_config and renames the quarantine tables, types, indexes and the history column off the Lidarr name. The Integrations Lidarr card, the Reports "Delete via Lidarr" action, the merge and remove-track unmonitor options, the Lidarr audit actions and error codes go, on the server, web and Android. The README describes acquisition as it is now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
65 lines
1.9 KiB
Go
65 lines
1.9 KiB
Go
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)
|
|
}
|
|
}
|