package httpapi import ( "encoding/json" "io" "net/http" "net/http/httptest" "strings" "testing" ) func TestRevisionPruneEstimateViewerOK(t *testing.T) { srv, err := New(Options{InsecureDev: true, SeedDemo: true}) if err != nil { t.Fatal(err) } defer srv.Close() tenant, _, _, _, _ := srv.Store().DemoIDs() mustSetTestAPIKeys(t, srv, "vwkey|"+tenant+"|viewer") ts := httptest.NewServer(srv.Handler()) defer ts.Close() req, _ := http.NewRequest(http.MethodGet, ts.URL+"/v1/revisions/prune-estimate?retention_minutes=15", nil) req.Header.Set("Authorization", "Bearer vwkey") resp, err := ts.Client().Do(req) if err != nil { t.Fatal(err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { b, _ := io.ReadAll(resp.Body) t.Fatalf("status %d: %s", resp.StatusCode, b) } var body map[string]any if err := json.NewDecoder(resp.Body).Decode(&body); err != nil { t.Fatal(err) } if _, ok := body["revision_count"]; !ok { t.Fatalf("missing revision_count: %v", body) } } func TestRevisionPruneViewerForbidden(t *testing.T) { srv, err := New(Options{InsecureDev: true, SeedDemo: true}) if err != nil { t.Fatal(err) } defer srv.Close() tenant, _, _, _, _ := srv.Store().DemoIDs() mustSetTestAPIKeys(t, srv, "vwkey|"+tenant+"|viewer") ts := httptest.NewServer(srv.Handler()) defer ts.Close() req, _ := http.NewRequest(http.MethodPost, ts.URL+"/v1/revisions/prune", strings.NewReader(`{"retention_minutes":43200}`)) req.Header.Set("Authorization", "Bearer vwkey") req.Header.Set("Content-Type", "application/json") resp, err := ts.Client().Do(req) if err != nil { t.Fatal(err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusForbidden { b, _ := io.ReadAll(resp.Body) t.Fatalf("status %d: %s", resp.StatusCode, b) } } func TestRevisionPruneOperatorOK(t *testing.T) { srv, err := New(Options{InsecureDev: true, SeedDemo: true}) if err != nil { t.Fatal(err) } defer srv.Close() tenant, _, _, _, _ := srv.Store().DemoIDs() mustSetTestAPIKeys(t, srv, "opkey|"+tenant+"|operator") ts := httptest.NewServer(srv.Handler()) defer ts.Close() req, _ := http.NewRequest(http.MethodPost, ts.URL+"/v1/revisions/prune", strings.NewReader(`{"retention_minutes":15}`)) req.Header.Set("Authorization", "Bearer opkey") req.Header.Set("Content-Type", "application/json") resp, err := ts.Client().Do(req) if err != nil { t.Fatal(err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { b, _ := io.ReadAll(resp.Body) t.Fatalf("status %d: %s", resp.StatusCode, b) } }