35 lines
1.1 KiB
Go

package appuser
import (
"net/http"
"net/http/httptest"
"testing"
"github.com/gin-gonic/gin"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
func TestWriteMutationErrorMapsGRPCBusinessFailures(t *testing.T) {
gin.SetMode(gin.TestMode)
tests := []struct {
name string
err error
wantStatus int
}{
{name: "invalid level", err: status.Error(codes.FailedPrecondition, "target must exceed real level"), wantStatus: http.StatusBadRequest},
{name: "missing user", err: status.Error(codes.NotFound, "user not found"), wantStatus: http.StatusNotFound},
{name: "owner unavailable", err: status.Error(codes.Unavailable, "activity unavailable"), wantStatus: http.StatusInternalServerError},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
recorder := httptest.NewRecorder()
context, _ := gin.CreateTestContext(recorder)
writeMutationError(context, test.err, "mutation failed")
if recorder.Code != test.wantStatus {
t.Fatalf("HTTP status=%d want=%d body=%s", recorder.Code, test.wantStatus, recorder.Body.String())
}
})
}
}