- 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
34 lines
1.1 KiB
Go
34 lines
1.1 KiB
Go
// Negativtest des Gates selbst (QA-01 Prüfung 1): ein Diff mit
|
|
// geänderter mail/internal/auth/login.go ohne begleitende Testdatei
|
|
// muss als Verstoß erkannt werden.
|
|
package pflichttestgate
|
|
|
|
import "testing"
|
|
|
|
func TestCheckDiff_FlagsSensitiveChangeWithoutTest(t *testing.T) {
|
|
violations := CheckDiff([]string{"mail/internal/auth/login.go"})
|
|
if len(violations) != 1 {
|
|
t.Fatalf("erwartet genau 1 verstoß, habe %d: %+v", len(violations), violations)
|
|
}
|
|
if violations[0].Package != "mail/internal/auth" {
|
|
t.Fatalf("falsches package gemeldet: %+v", violations[0])
|
|
}
|
|
}
|
|
|
|
func TestCheckDiff_PassesWhenTestFileAccompanies(t *testing.T) {
|
|
violations := CheckDiff([]string{
|
|
"mail/internal/auth/login.go",
|
|
"mail/internal/auth/login_test.go",
|
|
})
|
|
if len(violations) != 0 {
|
|
t.Fatalf("erwartet keine verstöße, habe: %+v", violations)
|
|
}
|
|
}
|
|
|
|
func TestCheckDiff_IgnoresNonSensitivePaths(t *testing.T) {
|
|
violations := CheckDiff([]string{"mail/internal/example/normalize.go"})
|
|
if len(violations) != 0 {
|
|
t.Fatalf("erwartet keine verstöße für nicht-sensiblen pfad, habe: %+v", violations)
|
|
}
|
|
}
|