Vor Board-Flip bemerkt: Akzeptanzkriterium 1 fordert Objekttyp MIT Aufbewahrungsklasse UND Rueckruf-Adresse, retention_class fehlte im ersten Entwurf komplett. Migration, Registration-Struct, Register, ListRegistrations und RegisterHandler ergaenzt, Tests angepasst (Idempotenz jetzt auch fuer retention_class geprueft, nicht nur callback_url). Real auf 131 gedroppt und neu angewendet.
68 lines
2.3 KiB
Go
68 lines
2.3 KiB
Go
package moduleadapter
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
)
|
|
|
|
// TestRegisterHandler_RealHTTPRoundTrip beweist die REST-Schnittstelle
|
|
// (Ticket-Technikvorgabe) end-to-end: echter HTTP-Server, echter POST,
|
|
// zweiter POST mit abweichender callback_url aendert nichts (Pruefung 3
|
|
// auch ueber die HTTP-Schicht, nicht nur die Go-Funktion direkt).
|
|
func TestRegisterHandler_RealHTTPRoundTrip(t *testing.T) {
|
|
pool := requireTestPool(t)
|
|
server := httptest.NewServer(RegisterHandler(pool))
|
|
defer server.Close()
|
|
|
|
post := func(body registerRequest) (int, Registration) {
|
|
t.Helper()
|
|
data, _ := json.Marshal(body)
|
|
resp, err := http.Post(server.URL, "application/json", bytes.NewReader(data))
|
|
if err != nil {
|
|
t.Fatalf("post: %v", err)
|
|
}
|
|
defer func() { _ = resp.Body.Close() }()
|
|
var reg Registration
|
|
if resp.StatusCode == http.StatusOK {
|
|
if err := json.NewDecoder(resp.Body).Decode(®); err != nil {
|
|
t.Fatalf("antwort dekodieren: %v", err)
|
|
}
|
|
}
|
|
return resp.StatusCode, reg
|
|
}
|
|
|
|
status1, reg1 := post(registerRequest{ModuleName: "dms", ObjectType: "document", RetentionClass: "klasse-original", CallbackURL: "https://dms.example.test/original"})
|
|
if status1 != http.StatusOK {
|
|
t.Fatalf("erster post: status = %d, want 200", status1)
|
|
}
|
|
|
|
status2, reg2 := post(registerRequest{ModuleName: "dms", ObjectType: "document", RetentionClass: "klasse-ANDERE", CallbackURL: "https://dms.example.test/andere"})
|
|
if status2 != http.StatusOK {
|
|
t.Fatalf("zweiter post: status = %d, want 200", status2)
|
|
}
|
|
if reg2.ID != reg1.ID || reg2.CallbackURL != "https://dms.example.test/original" {
|
|
t.Fatalf("zweiter post veraenderte bestehenden zustand: %+v, erster war %+v", reg2, reg1)
|
|
}
|
|
}
|
|
|
|
// TestRegisterHandler_RejectsMissingFields ist Nachweis des
|
|
// Fehlerverhaltens auf der REST-Schicht.
|
|
func TestRegisterHandler_RejectsMissingFields(t *testing.T) {
|
|
pool := requireTestPool(t)
|
|
server := httptest.NewServer(RegisterHandler(pool))
|
|
defer server.Close()
|
|
|
|
data, _ := json.Marshal(registerRequest{ModuleName: "dms"})
|
|
resp, err := http.Post(server.URL, "application/json", bytes.NewReader(data))
|
|
if err != nil {
|
|
t.Fatalf("post: %v", err)
|
|
}
|
|
defer func() { _ = resp.Body.Close() }()
|
|
if resp.StatusCode != http.StatusBadRequest {
|
|
t.Fatalf("status = %d, want 400 bei fehlenden pflichtfeldern", resp.StatusCode)
|
|
}
|
|
}
|