package web_test import ( "net/http" "net/url" "strings" "testing" "github.com/netcell-it/deklarix/internal/store" ) func TestAdminCanSperrenUndEntsperrenZentralesWerkzeug(t *testing.T) { fs := newFakeStore() s := newServer(t, fs) fs.werkzeuge["werkzeug-central"] = store.Werkzeug{ID: "werkzeug-central", Name: "ChatGPT Enterprise", Anbieter: "OpenAI"} adminCookie := seedAccountWithRole(t, fs, "Test-Mandant", "admin@example.com", "admin") list := getWithCookie(t, s, adminCookie, "/verwaltung/werkzeuge") if !strings.Contains(list.Body.String(), "ChatGPT Enterprise") { t.Fatalf("expected the zentrale werkzeug in the list, got: %s", list.Body.String()) } resp := postForm(t, s, adminCookie, "/verwaltung/werkzeuge/werkzeug-central/sperren", url.Values{"grund": {"zu teuer"}}) if resp.Code != http.StatusSeeOther { t.Fatalf("sperren status = %d, body: %s", resp.Code, resp.Body.String()) } afterSperren := getWithCookie(t, s, adminCookie, "/verwaltung/werkzeuge") if !strings.Contains(afterSperren.Body.String(), `gesperrt`) { t.Errorf("expected the werkzeug to show as gesperrt, got: %s", afterSperren.Body.String()) } resp = postForm(t, s, adminCookie, "/verwaltung/werkzeuge/werkzeug-central/entsperren", url.Values{}) if resp.Code != http.StatusSeeOther { t.Fatalf("entsperren status = %d, body: %s", resp.Code, resp.Body.String()) } afterEntsperren := getWithCookie(t, s, adminCookie, "/verwaltung/werkzeuge") if strings.Contains(afterEntsperren.Body.String(), `gesperrt`) { t.Errorf("expected the werkzeug to no longer show as gesperrt, got: %s", afterEntsperren.Body.String()) } } func TestSperreIstProMandantIsoliert(t *testing.T) { fs := newFakeStore() s := newServer(t, fs) fs.werkzeuge["werkzeug-central"] = store.Werkzeug{ID: "werkzeug-central", Name: "ChatGPT Enterprise", Anbieter: "OpenAI"} adminA := seedAccountWithRole(t, fs, "Mandant A", "admin-a@example.com", "admin") adminB := seedAccountWithRole(t, fs, "Mandant B", "admin-b@example.com", "admin") postForm(t, s, adminA, "/verwaltung/werkzeuge/werkzeug-central/sperren", url.Values{}) respB := getWithCookie(t, s, adminB, "/verwaltung/werkzeuge") if strings.Contains(respB.Body.String(), `gesperrt`) { t.Errorf("expected Mandant B to see the werkzeug as unsperrt, got: %s", respB.Body.String()) } } func TestMitarbeiterCannotAccessWerkzeugverwaltung(t *testing.T) { fs := newFakeStore() s := newServer(t, fs) cookie := seedAccountWithRole(t, fs, "Test-Mandant", "mitarbeiter@example.com", "mitarbeiter") resp := getWithCookie(t, s, cookie, "/verwaltung/werkzeuge") if resp.Code != http.StatusNotFound { t.Fatalf("status = %d, want 404 for role mitarbeiter", resp.Code) } }