package web_test import ( "context" "net/http" "net/url" "strings" "testing" ) func TestBetreiberKannFirmaAnlegen(t *testing.T) { fs := newFakeStore() s := newServer(t, fs) betreiberCookie := seedAccountWithRole(t, fs, "Deklarix Betreiber", "betreiber@example.com", "betreiber") resp := postForm(t, s, betreiberCookie, "/betreiber/accounts", url.Values{ "account_name": {"Neue Firma GmbH"}, "email": {"admin@neue-firma.example.com"}, "password": {"ein-langes-passwort"}, }) if resp.Code != http.StatusSeeOther { t.Fatalf("status = %d, body: %s", resp.Code, resp.Body.String()) } user, err := fs.GetUserByEmail(context.Background(), "admin@neue-firma.example.com") if err != nil { t.Fatalf("GetUserByEmail: %v", err) } if user.Role != "admin" { t.Errorf("Role = %q, want admin", user.Role) } acc, err := fs.GetAccount(context.Background(), user.AccountID) if err != nil { t.Fatalf("GetAccount: %v", err) } if acc.Name != "Neue Firma GmbH" { t.Errorf("Name = %q, want Neue Firma GmbH", acc.Name) } // Der neue Login funktioniert tatsächlich. loginResp := postForm(t, s, nil, "/login", url.Values{ "email": {"admin@neue-firma.example.com"}, "password": {"ein-langes-passwort"}, }) if loginResp.Code != http.StatusSeeOther { t.Fatalf("login status = %d, body: %s", loginResp.Code, loginResp.Body.String()) } } func TestBetreiberFirmaAnlegenRejectsMissingFields(t *testing.T) { fs := newFakeStore() s := newServer(t, fs) betreiberCookie := seedAccountWithRole(t, fs, "Deklarix Betreiber", "betreiber@example.com", "betreiber") resp := postForm(t, s, betreiberCookie, "/betreiber/accounts", url.Values{"account_name": {"Nur Name"}}) if resp.Code != http.StatusOK { t.Fatalf("status = %d, want 200 (Formular mit Fehler)", resp.Code) } if !strings.Contains(resp.Body.String(), "Pflicht") { t.Errorf("expected a validation error, got: %s", resp.Body.String()) } } func TestBetreiberKannFirmaUmbenennen(t *testing.T) { fs := newFakeStore() s := newServer(t, fs) betreiberCookie := seedAccountWithRole(t, fs, "Deklarix Betreiber", "betreiber@example.com", "betreiber") acc, err := fs.CreateAccount(context.Background(), "Alter Name") if err != nil { t.Fatalf("CreateAccount: %v", err) } resp := postForm(t, s, betreiberCookie, "/betreiber/accounts/"+acc.ID+"/umbenennen", url.Values{"name": {"Neuer Name"}}) if resp.Code != http.StatusSeeOther { t.Fatalf("status = %d, body: %s", resp.Code, resp.Body.String()) } got, err := fs.GetAccount(context.Background(), acc.ID) if err != nil { t.Fatalf("GetAccount: %v", err) } if got.Name != "Neuer Name" { t.Errorf("Name = %q, want Neuer Name", got.Name) } detail := getWithCookie(t, s, betreiberCookie, "/betreiber/accounts/"+acc.ID) if !strings.Contains(detail.Body.String(), "Neuer Name") { t.Errorf("expected the new name on the detail page, got: %s", detail.Body.String()) } } func TestMitarbeiterCannotCreateFirma(t *testing.T) { fs := newFakeStore() s := newServer(t, fs) cookie := seedAccountWithRole(t, fs, "Test-Mandant", "mitarbeiter@example.com", "mitarbeiter") resp := getWithCookie(t, s, cookie, "/betreiber/accounts/neu") if resp.Code != http.StatusNotFound { t.Fatalf("status = %d, want 404 for role mitarbeiter", resp.Code) } }