package retentionapi import ( "net/http" "net/http/httptest" "testing" ) // TestRequireRole_MissingRoleReturns403 ist die vom Nutzer geforderte // Negativpruefung fuer den provisorischen Rollen-Check: keine/falsche // Rolle => 403, sonst waere der Check nicht pruefbar. func TestRequireRole_MissingRoleReturns403(t *testing.T) { handler := RequireRole(adminRole, func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) }) server := httptest.NewServer(handler) defer server.Close() // Kein Header gesetzt. resp, err := http.Get(server.URL) if err != nil { t.Fatalf("get: %v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusForbidden { t.Fatalf("ohne rollen-header: status = %d, want 403", resp.StatusCode) } // Falsche Rolle gesetzt. req, _ := http.NewRequest(http.MethodGet, server.URL, nil) req.Header.Set("X-Admin-Roles", "irgendwas_anderes") resp2, err := http.DefaultClient.Do(req) if err != nil { t.Fatalf("get: %v", err) } defer func() { _ = resp2.Body.Close() }() if resp2.StatusCode != http.StatusForbidden { t.Fatalf("mit falscher rolle: status = %d, want 403", resp2.StatusCode) } } // TestRequireRole_CorrectRoleAllowsAccess ist der positive Gegentest. func TestRequireRole_CorrectRoleAllowsAccess(t *testing.T) { handler := RequireRole(adminRole, func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) }) server := httptest.NewServer(handler) defer server.Close() req, _ := http.NewRequest(http.MethodGet, server.URL, nil) req.Header.Set("X-Admin-Roles", "irgendwas_anderes, archive_admin") resp, err := http.DefaultClient.Do(req) if err != nil { t.Fatalf("get: %v", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { t.Fatalf("mit korrekter rolle: status = %d, want 200", resp.StatusCode) } }