Files
nexarch/workflow/internal/moduleadapter/handler_test.go
T
patrickandClaude Sonnet 5 9c31ed0841
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
ENG-02: modul adapter schnittstelle dms mail registrieren objekttypen trigger
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 01:39:07 +02:00

99 lines
3.0 KiB
Go

package moduleadapter
import (
"bytes"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
)
func newTestServer(t *testing.T) (*Server, string) {
t.Helper()
pool := testPool(t)
token := "test-service-token-secret"
return NewServer(pool, token), token
}
func TestHandleRegister_RequiresServiceToken(t *testing.T) {
srv, token := newTestServer(t)
mux := http.NewServeMux()
srv.RegisterRoutes(mux)
ts := httptest.NewServer(mux)
defer ts.Close()
body, _ := json.Marshal(registerRequest{ModuleName: "dms-fiktiv", ObjectType: "invoice", Triggers: []string{"document.uploaded"}})
// Ohne Token: 401.
resp, err := http.Post(ts.URL+"/register", "application/json", bytes.NewReader(body))
if err != nil {
t.Fatalf("anfrage ohne token: %v", err)
}
resp.Body.Close()
if resp.StatusCode != http.StatusUnauthorized {
t.Fatalf("erwarte 401 ohne token, habe %d", resp.StatusCode)
}
// Falsches Token: 401.
req, _ := http.NewRequest(http.MethodPost, ts.URL+"/register", bytes.NewReader(body))
req.Header.Set("X-Service-Token", "falsch")
req.Header.Set("Content-Type", "application/json")
resp, err = http.DefaultClient.Do(req)
if err != nil {
t.Fatalf("anfrage mit falschem token: %v", err)
}
resp.Body.Close()
if resp.StatusCode != http.StatusUnauthorized {
t.Fatalf("erwarte 401 mit falschem token, habe %d", resp.StatusCode)
}
// Richtiges Token: 200.
req, _ = http.NewRequest(http.MethodPost, ts.URL+"/register", bytes.NewReader(body))
req.Header.Set("X-Service-Token", token)
req.Header.Set("Content-Type", "application/json")
resp, err = http.DefaultClient.Do(req)
if err != nil {
t.Fatalf("anfrage mit richtigem token: %v", err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
t.Fatalf("erwarte 200 mit richtigem token, habe %d", resp.StatusCode)
}
}
func TestHandleRegisterAndList_EndToEnd(t *testing.T) {
srv, token := newTestServer(t)
mux := http.NewServeMux()
srv.RegisterRoutes(mux)
ts := httptest.NewServer(mux)
defer ts.Close()
body, _ := json.Marshal(registerRequest{ModuleName: "mail-fiktiv", ObjectType: "message", Triggers: []string{"mail.received"}})
req, _ := http.NewRequest(http.MethodPost, ts.URL+"/register", bytes.NewReader(body))
req.Header.Set("X-Service-Token", token)
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
t.Fatalf("registrieren: %v", err)
}
resp.Body.Close()
if resp.StatusCode != http.StatusOK {
t.Fatalf("erwarte 200, habe %d", resp.StatusCode)
}
req, _ = http.NewRequest(http.MethodGet, ts.URL+"/registrations", nil)
req.Header.Set("X-Service-Token", token)
resp, err = http.DefaultClient.Do(req)
if err != nil {
t.Fatalf("auflisten: %v", err)
}
defer resp.Body.Close()
var regs []Registration
if err := json.NewDecoder(resp.Body).Decode(&regs); err != nil {
t.Fatalf("antwort dekodieren: %v", err)
}
if len(regs) != 1 || regs[0].ModuleName != "mail-fiktiv" {
t.Fatalf("erwarte 1 registrierung fuer mail-fiktiv, habe %+v", regs)
}
}