Files
WeiCHEN 9071c272bf refactor(server): drop Server pool; route health/heal/vault via Runtime
Remove production *pgxpool.Pool from Server, centralize domain→HTTP
status mapping, and expose Runtime ports for task-store readiness,
duty heal, and artifact vault registry. Allow app→docduty for heal wiring.
2026-09-22 21:44:56 +08:00

83 lines
2.5 KiB
Go

package server
import (
"encoding/json"
"errors"
"net/http"
"net/http/httptest"
"testing"
"chat-agent-system/internal/docgov"
"chat-agent-system/internal/projectworkflow"
)
func TestDomainHTTPStatus_MapsKnownSentinels(t *testing.T) {
cases := []struct {
err error
status int
ok bool
}{
{nil, 0, false},
{errors.New("other"), 0, false},
{docgov.ErrDocumentBusy, http.StatusConflict, true},
{&docgov.DocumentBusyError{DocID: "d1"}, http.StatusConflict, true},
{docgov.ErrDocumentLocked, http.StatusConflict, true},
{docgov.ErrForceEditNotAllowed, http.StatusConflict, true},
{docgov.ErrLeaseNotHeld, http.StatusConflict, true},
{docgov.ErrLeaseExpired, http.StatusConflict, true},
{docgov.ErrDocumentNotFound, http.StatusNotFound, true},
{docgov.ErrProposalNotFound, http.StatusNotFound, true},
{docgov.ErrUnauthorizedActor, http.StatusForbidden, true},
{projectworkflow.ErrPrerequisiteNotMet, http.StatusBadRequest, true},
{&docgov.ContentError{Code: docgov.ErrCodeDocumentNotFound}, http.StatusNotFound, true},
{&docgov.ContentError{Code: docgov.ErrCodeProjectionMissing}, http.StatusConflict, true},
}
for _, tc := range cases {
got, ok := domainHTTPStatus(tc.err)
if ok != tc.ok || got != tc.status {
t.Fatalf("%v: got status=%d ok=%v want status=%d ok=%v", tc.err, got, ok, tc.status, tc.ok)
}
}
}
func TestWriteDocGovError_UsesAdapterStatuses(t *testing.T) {
rec := httptest.NewRecorder()
writeDocGovError(rec, docgov.ErrProposalNotFound)
if rec.Code != http.StatusNotFound {
t.Fatalf("status %d", rec.Code)
}
rec = httptest.NewRecorder()
writeDocGovError(rec, docgov.ErrUnauthorizedActor)
if rec.Code != http.StatusForbidden {
t.Fatalf("status %d", rec.Code)
}
rec = httptest.NewRecorder()
writeDocGovError(rec, &docgov.DocumentBusyError{DocID: "d", Reason: "held"})
if rec.Code != http.StatusConflict {
t.Fatalf("status %d", rec.Code)
}
var body map[string]any
if err := json.Unmarshal(rec.Body.Bytes(), &body); err != nil {
t.Fatal(err)
}
if body["error"] != "document_busy" {
t.Fatalf("body=%v", body)
}
}
func TestWriteTaskError_DefaultsTo500(t *testing.T) {
rec := httptest.NewRecorder()
writeTaskError(rec, errors.New("boom"), nil)
if rec.Code != http.StatusInternalServerError {
t.Fatalf("status %d", rec.Code)
}
rec = httptest.NewRecorder()
writeTaskError(rec, docgov.ErrDocumentBusy, map[string]string{"ok": "no"})
if rec.Code != http.StatusConflict {
t.Fatalf("status %d", rec.Code)
}
}