package web import ( "context" "errors" "log/slog" "net/http" "net/url" "strings" "testing" "gitea.mynodes.xyz/ilker/llmgw/internal/control/adminapi" "gitea.mynodes.xyz/ilker/llmgw/internal/control/quota" "gitea.mynodes.xyz/ilker/llmgw/internal/store" ) type fakeCapacity struct { views []adminapi.QuotaView set []adminapi.QuotaRequest cleared []string } func (f *fakeCapacity) QuotaViews(context.Context) ([]adminapi.QuotaView, error) { return f.views, nil } func (f *fakeCapacity) SetQuota(_ context.Context, r adminapi.QuotaRequest, _ string) (string, error) { if r.Scope == "team:nope" { return "", errors.New(`there is no team "nope"`) } f.set = append(f.set, r) return r.Scope, nil } func (f *fakeCapacity) ClearQuota(_ context.Context, s string) (string, error) { f.cleared = append(f.cleared, s) return s, nil } func (f *fakeCapacity) Scopes(context.Context) ([]adminapi.ScopeName, error) { return []adminapi.ScopeName{{Key: "org:o1", Name: "Acme"}, {Key: "team:t1", Name: "Acme / ml"}}, nil } func TestCapacityQuotasAreShownAndSetFromTheQuotasPage(t *testing.T) { eight, sixteen := 8, 16 fc := &fakeCapacity{views: []adminapi.QuotaView{{Scope: "team:t1", Name: "Acme / ml", Guarantee: store.Resources{GPUs: &eight}, Limit: store.Resources{GPUs: &sixteen}, Holds: quota.Amount{GPUs: 6}, UpdatedBy: "ops@acme"}}} a := fakeAccounts{user: store.User{ID: "u1", Email: "a@example.com", IsAdmin: true}} p := NewAccountPages(a, nil, nil, "v0", slog.New(slog.DiscardHandler)) p.SetCapacity(fc) mux := http.NewServeMux() p.RegisterAdminQuotas(mux, &fakeQuotas{}, pricedYes{}) body := mirrorGet(t, mux, "/admin/quotas").Body.String() for _, want := range []string{`id="capacity"`, "Acme / ml", "6 of 8 (at most 16)", "ops@acme", ``} { if !strings.Contains(body, want) { t.Errorf("the page lacks %q", want) } } // "change" fills the form with the scope's figures. edit := mirrorGet(t, mux, "/admin/quotas?cap=team:t1").Body.String() if !strings.Contains(edit, `