Bei Firmenanlage (Registrierung + Betreiber-Firmenanlage) müssen jetzt Adresse (Straße, PLZ, Ort, Land) und Abrechnungsdaten (Rechnungsemail, optional USt-IdNr.) erfasst werden, nicht nur der Firmenname (Migration 0023). USt-IdNr. bewusst optional - Kleinunternehmer nach §19 UStG haben keine. Neue Seite /verwaltung/firma (admin-only) zum Einsehen/ Nachtragen für bestehende Firmen. store.CreateAccount nimmt jetzt ein AccountInput statt nur einen Namen entgegen (Signaturänderung betrifft ~20 Testaufrufe, mechanisch umgestellt). register.html/ betreiber_account_neu.html auf form-card/form-grid umgestellt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
101 lines
3.3 KiB
Go
101 lines
3.3 KiB
Go
package web_test
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"net/url"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/netcell-it/deklarix/internal/store"
|
|
)
|
|
|
|
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", mergeValues(url.Values{
|
|
"account_name": {"Neue Firma GmbH"}, "email": {"admin@neue-firma.example.com"}, "password": {"ein-langes-passwort"},
|
|
}, firmenPflichtfelder()))
|
|
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(), store.AccountInput{Name: "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)
|
|
}
|
|
}
|