package web_test import ( "context" "net/http" "net/url" "strings" "testing" ) func TestRegisterRequiresFirmenadresse(t *testing.T) { fs := newFakeStore() s := newServer(t, fs) resp := postForm(t, s, nil, "/register", url.Values{ "account_name": {"Unvollständig GmbH"}, "email": {"unvollstaendig@example.com"}, "password": {"ein-sicheres-passwort"}, // Adresse/Rechnungsemail fehlen bewusst. }) if resp.Code != http.StatusOK { t.Fatalf("status = %d, want 200 (Formular mit Fehler)", resp.Code) } if !strings.Contains(resp.Body.String(), "Pflicht") { t.Fatalf("erwartet Validierungsfehler, body: %s", resp.Body.String()) } } func TestRegisterSpeichertFirmendaten(t *testing.T) { fs := newFakeStore() s := newServer(t, fs) resp := postForm(t, s, nil, "/register", mergeValues(url.Values{ "account_name": {"Vollständig GmbH"}, "email": {"admin@vollstaendig.example.com"}, "password": {"ein-sicheres-passwort"}, }, firmenPflichtfelder())) if resp.Code != http.StatusSeeOther { t.Fatalf("status = %d, want 303, body: %s", resp.Code, resp.Body.String()) } user, err := fs.GetUserByEmail(context.Background(), "admin@vollstaendig.example.com") if err != nil { t.Fatalf("GetUserByEmail: %v", err) } acc, err := fs.GetAccount(context.Background(), user.AccountID) if err != nil { t.Fatalf("GetAccount: %v", err) } if acc.Strasse != "Teststraße 1" || acc.PLZ != "12345" || acc.Rechnungsemail != "rechnung@example.com" { t.Fatalf("Account = %+v, Firmendaten nicht wie erwartet gespeichert", acc) } } func TestAdminKannFirmendatenBearbeiten(t *testing.T) { fs := newFakeStore() s := newServer(t, fs) cookie := seedAccountWithRole(t, fs, "Alte Firma", "admin@example.com", "admin") getResp := getWithCookie(t, s, cookie, "/verwaltung/firma") if getResp.Code != http.StatusOK { t.Fatalf("GET status = %d, want 200", getResp.Code) } if !strings.Contains(getResp.Body.String(), "Alte Firma") { t.Fatalf("erwartet aktuellen Firmennamen im Formular, body: %s", getResp.Body.String()) } saveResp := postForm(t, s, cookie, "/verwaltung/firma", url.Values{ "account_name": {"Neue Firma"}, "strasse": {"Neue Straße 5"}, "plz": {"99999"}, "ort": {"Neustadt"}, "land": {"Deutschland"}, "rechnungsemail": {"buchhaltung@neue-firma.example.com"}, }) if saveResp.Code != http.StatusSeeOther { t.Fatalf("save status = %d, want 303, body: %s", saveResp.Code, saveResp.Body.String()) } afterResp := getWithCookie(t, s, cookie, "/verwaltung/firma") if !strings.Contains(afterResp.Body.String(), "Neue Firma") || !strings.Contains(afterResp.Body.String(), "Neustadt") { t.Fatalf("gespeicherte Firmendaten fehlen, body: %s", afterResp.Body.String()) } } func TestNichtAdminKannFirmendatenNichtBearbeiten(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/firma") if resp.Code != http.StatusNotFound { t.Fatalf("status = %d, want 404", resp.Code) } }