- 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
52 lines
1.5 KiB
Go
52 lines
1.5 KiB
Go
// E2E-Test-Beispiel (QA-01 Akzeptanzkriterium 1/Prüfung 2): echter
|
|
// HTTP-Request über einen laufenden httptest.Server (TCP-Roundtrip),
|
|
// nicht nur ein Funktionsaufruf im selben Prozess.
|
|
package example
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
)
|
|
|
|
func TestNormalizeHandler_RealHTTPRoundTrip(t *testing.T) {
|
|
server := httptest.NewServer(http.HandlerFunc(NormalizeHandler))
|
|
defer server.Close()
|
|
|
|
body, _ := json.Marshal(normalizeRequest{Address: "Kunde@Beispiel.DE"})
|
|
resp, err := http.Post(server.URL, "application/json", bytes.NewReader(body))
|
|
if err != nil {
|
|
t.Fatalf("post: %v", err)
|
|
}
|
|
defer func() { _ = resp.Body.Close() }()
|
|
|
|
if resp.StatusCode != http.StatusOK {
|
|
t.Fatalf("status = %d, want 200", resp.StatusCode)
|
|
}
|
|
var out normalizeResponse
|
|
if err := json.NewDecoder(resp.Body).Decode(&out); err != nil {
|
|
t.Fatalf("antwort dekodieren: %v", err)
|
|
}
|
|
if out.Normalized != "Kunde@beispiel.de" {
|
|
t.Fatalf("got %q", out.Normalized)
|
|
}
|
|
}
|
|
|
|
func TestNormalizeHandler_InvalidAddressReturns400(t *testing.T) {
|
|
server := httptest.NewServer(http.HandlerFunc(NormalizeHandler))
|
|
defer server.Close()
|
|
|
|
body, _ := json.Marshal(normalizeRequest{Address: "keine-gueltige-adresse"})
|
|
resp, err := http.Post(server.URL, "application/json", bytes.NewReader(body))
|
|
if err != nil {
|
|
t.Fatalf("post: %v", err)
|
|
}
|
|
defer func() { _ = resp.Body.Close() }()
|
|
|
|
if resp.StatusCode != http.StatusBadRequest {
|
|
t.Fatalf("status = %d, want 400", resp.StatusCode)
|
|
}
|
|
}
|