- 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
37 lines
1.2 KiB
Go
37 lines
1.2 KiB
Go
package example
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
)
|
|
|
|
// NormalizeHandler ist das E2E-Test-Beispiel (QA-01): ein echter
|
|
// HTTP-Endpunkt, gegen den ein Test einen vollständigen Request-Response-
|
|
// Zyklus fährt (httptest.Server, echter TCP-Roundtrip, kein reiner
|
|
// Funktionsaufruf). Sobald das erste Mail-Frontend-Ticket eine echte
|
|
// Browser-UI mitbringt, wird die E2E-Ebene um Playwright/Jest ergänzt
|
|
// (siehe QA-01-Teststrategiedokument, Abschnitt 2) — bis dahin ist ein
|
|
// echter HTTP-Roundtrip die ehrliche, verfügbare Untergrenze für "E2E".
|
|
type normalizeRequest struct {
|
|
Address string `json:"address"`
|
|
}
|
|
|
|
type normalizeResponse struct {
|
|
Normalized string `json:"normalized"`
|
|
}
|
|
|
|
func NormalizeHandler(w http.ResponseWriter, r *http.Request) {
|
|
var req normalizeRequest
|
|
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
|
http.Error(w, "ungültiger request-body", http.StatusBadRequest)
|
|
return
|
|
}
|
|
normalized, err := NormalizeAddress(req.Address)
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusBadRequest)
|
|
return
|
|
}
|
|
w.Header().Set("Content-Type", "application/json")
|
|
_ = json.NewEncoder(w).Encode(normalizeResponse{Normalized: normalized})
|
|
}
|