Files
descrybe/apps/api/internal/httpapi/admin_analytics_handlers_test.go
T
greeneclipse 8580c996c3 Initial commit of Descrybe v2 without local scratch artifacts.
Drop one-shot tmp/axe scripts and agent i18n scratch so the Gitea tree is deployable.
2026-08-09 22:47:43 +02:00

70 lines
1.6 KiB
Go

package httpapi
import (
"net/http"
"net/http/httptest"
"testing"
"time"
)
func TestAdminAnalyticsSummaryOnly(t *testing.T) {
t.Parallel()
cases := []struct {
raw string
want bool
}{
{"", false},
{"summary=0", false},
{"summary=1", true},
{"summary=true", true},
{"summary_only=yes", true},
{"summary_only=no", false},
}
for _, c := range cases {
req := httptest.NewRequest(http.MethodGet, "/api/admin/analytics?"+c.raw, nil)
if got := adminAnalyticsSummaryOnly(req); got != c.want {
t.Fatalf("%q: got %v want %v", c.raw, got, c.want)
}
}
}
func TestClampAdminAnalyticsDays(t *testing.T) {
t.Parallel()
cases := []struct {
in, want int
}{
{0, adminAnalyticsMinDays},
{3, adminAnalyticsMinDays},
{7, 7},
{30, 30},
{90, 90},
{120, adminAnalyticsMaxDays},
}
for _, c := range cases {
if got := clampAdminAnalyticsDays(c.in); got != c.want {
t.Fatalf("clamp(%d)=%d want %d", c.in, got, c.want)
}
}
}
func TestFillAdminDaySeries(t *testing.T) {
t.Parallel()
since := time.Date(2026, 8, 1, 0, 0, 0, 0, time.UTC)
src := map[string]adminDayPoint{
"2026-08-01": {Date: "2026-08-01", Tokens: 10, Products: 2},
"2026-08-03": {Date: "2026-08-03", Tokens: 5, Products: 1},
}
out := fillAdminDaySeries(since, 3, src, func(p adminDayPoint) adminDayPoint {
return adminDayPoint{Date: p.Date, Tokens: p.Tokens, Products: p.Products}
})
if len(out) != 3 {
t.Fatalf("len=%d", len(out))
}
if out[0].Tokens != 10 || out[1].Tokens != 0 || out[2].Tokens != 5 {
t.Fatalf("unexpected series: %+v", out)
}
if out[1].Date != "2026-08-02" {
t.Fatalf("gap date=%s", out[1].Date)
}
}