mirror of
https://github.com/gin-gonic/gin.git
synced 2026-04-29 23:23:18 +08:00
Replace string literals with http.Method* constants to satisfy the usestdlibvars linter. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
102 lines
2.6 KiB
Go
102 lines
2.6 KiB
Go
// Copyright 2017 Manu Martinez-Almeida. All rights reserved.
|
|
// Use of this source code is governed by a MIT style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package gin
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestRunTestHandlerFlushesStatusCode(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
statusCode int
|
|
}{
|
|
{"201 Created", http.StatusCreated},
|
|
{"204 No Content", http.StatusNoContent},
|
|
{"400 Bad Request", http.StatusBadRequest},
|
|
{"404 Not Found", http.StatusNotFound},
|
|
{"500 Internal Server Error", http.StatusInternalServerError},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
w := httptest.NewRecorder()
|
|
req := httptest.NewRequest(http.MethodGet, "/", nil)
|
|
code := tt.statusCode
|
|
|
|
c := RunTestHandler(w, req, func(c *Context) {
|
|
c.Status(code)
|
|
})
|
|
|
|
assert.Equal(t, code, w.Code)
|
|
assert.Equal(t, code, c.Writer.Status())
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestRunTestHandlerMultipleHandlers(t *testing.T) {
|
|
w := httptest.NewRecorder()
|
|
req := httptest.NewRequest(http.MethodPost, "/resource", nil)
|
|
|
|
callOrder := []string{}
|
|
|
|
middleware := func(c *Context) {
|
|
callOrder = append(callOrder, "middleware")
|
|
c.Next()
|
|
}
|
|
|
|
handler := func(c *Context) {
|
|
callOrder = append(callOrder, "handler")
|
|
c.Status(http.StatusCreated)
|
|
}
|
|
|
|
c := RunTestHandler(w, req, middleware, handler)
|
|
|
|
assert.Equal(t, http.StatusCreated, w.Code)
|
|
assert.Equal(t, http.StatusCreated, c.Writer.Status())
|
|
assert.Equal(t, []string{"middleware", "handler"}, callOrder)
|
|
}
|
|
|
|
func TestRunTestHandlerDefaultStatus(t *testing.T) {
|
|
w := httptest.NewRecorder()
|
|
req := httptest.NewRequest(http.MethodGet, "/", nil)
|
|
|
|
RunTestHandler(w, req, func(c *Context) {
|
|
// Handler that does not set a status explicitly.
|
|
})
|
|
|
|
assert.Equal(t, http.StatusOK, w.Code)
|
|
}
|
|
|
|
func TestRunTestHandlerSetsRequest(t *testing.T) {
|
|
w := httptest.NewRecorder()
|
|
req := httptest.NewRequest(http.MethodPut, "/items/42", nil)
|
|
|
|
c := RunTestHandler(w, req, func(c *Context) {
|
|
c.Status(http.StatusOK)
|
|
})
|
|
|
|
assert.Equal(t, req, c.Request)
|
|
}
|
|
|
|
func TestCreateTestContextBackwardCompatible(t *testing.T) {
|
|
// Verify that CreateTestContext still behaves the same way:
|
|
// status is stored internally but NOT flushed to the ResponseRecorder.
|
|
w := httptest.NewRecorder()
|
|
c, _ := CreateTestContext(w)
|
|
c.Status(http.StatusCreated)
|
|
|
|
// The internal status should be set.
|
|
assert.Equal(t, http.StatusCreated, c.Writer.Status())
|
|
|
|
// But w.Code should still be the default 200 because WriteHeaderNow
|
|
// was never called. This confirms backward compatibility.
|
|
assert.Equal(t, http.StatusOK, w.Code)
|
|
}
|