- mail/go.mod: erstes eigenstaendiges Go-Modul fuer NEXARCH Mail - mail/docs/TESTSTRATEGIE-MAIL.md: Testpyramide (Unit/Integration/ Protokoll-Zustandsmaschinen/E2E/Vertragstests), Pflichttest-Merge-Gate, Bug-Tracking-Konvention (Gitea-Issues), analog Core QA-01 - mail/internal/example: ein reales, kleines Beispiel (Adress- Normalisierung) mit je einem Test pro Testart (Unit/Integration/E2E), 6 Tests real bestanden - mail/internal/pflichttestgate + cmd/pflichttestgate: Merge-Gate-CLI, echter End-zu-Ende-Beweis (Binary lehnt Verstoss ab, akzeptiert begleiteten Test), .gitea/workflows/mail-pflichttest-gate.yml - Ehrlich dokumentiert: kein Gitea-API-Token verfuegbar, daher kein echter Issue angelegt - Bug-Tracking-Vorgehen stattdessen anhand eines realen, bereits dokumentierten Befunds (RET-10) durchgespielt, als offener Punkt vermerkt - Gegenlesen durch zweite Person (Nutzer) noch ausstehend Pruefungen siehe mail/docs/TESTSTRATEGIE-MAIL.md
39 lines
1014 B
Go
39 lines
1014 B
Go
// Unit-Test-Beispiel (QA-01 Akzeptanzkriterium 1/Prüfung 2): keine
|
|
// externe Abhängigkeit (DB, Netzwerk), reine Funktionsprüfung.
|
|
package example
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
)
|
|
|
|
func TestNormalizeAddress_LowercasesDomainOnly(t *testing.T) {
|
|
got, err := NormalizeAddress("User.Name@Example.COM")
|
|
if err != nil {
|
|
t.Fatalf("unerwarteter fehler: %v", err)
|
|
}
|
|
want := "User.Name@example.com"
|
|
if got != want {
|
|
t.Fatalf("got %q, want %q", got, want)
|
|
}
|
|
}
|
|
|
|
func TestNormalizeAddress_TrimsWhitespace(t *testing.T) {
|
|
got, err := NormalizeAddress(" user@example.com ")
|
|
if err != nil {
|
|
t.Fatalf("unerwarteter fehler: %v", err)
|
|
}
|
|
if got != "user@example.com" {
|
|
t.Fatalf("got %q", got)
|
|
}
|
|
}
|
|
|
|
func TestNormalizeAddress_RejectsInvalidInput(t *testing.T) {
|
|
cases := []string{"", "no-at-sign", "@nolocalpart.com", "trailing@"}
|
|
for _, c := range cases {
|
|
if _, err := NormalizeAddress(c); !errors.Is(err, ErrInvalidAddress) {
|
|
t.Fatalf("input %q: erwartet ErrInvalidAddress, habe: %v", c, err)
|
|
}
|
|
}
|
|
}
|