mirror of
https://github.com/gin-gonic/gin.git
synced 2026-06-06 20:18:19 +08:00
test(render): add comprehensive error handling tests
Add error case tests for XML, Data, BSON, and HTML renderers to improve test coverage and ensure proper error handling: - TestRenderXMLError: validates XML marshal error handling for unsupported types - TestRenderDataError: validates Data write error handling - TestRenderBSONError: validates BSON marshal error handling for unsupported types - TestRenderBSONWriteError: validates BSON write error handling - TestRenderHTMLTemplateError: validates HTML template execution error with invalid field access - TestRenderHTMLTemplateExecuteError: validates HTML template execution error with invalid nested field All tests pass and maintain 100% coverage for the render package.
This commit is contained in:
parent
5260de6a83
commit
f7f1f07d93
@ -23,9 +23,6 @@ import (
|
|||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO unit tests
|
|
||||||
// test errors
|
|
||||||
|
|
||||||
func TestRenderJSON(t *testing.T) {
|
func TestRenderJSON(t *testing.T) {
|
||||||
w := httptest.NewRecorder()
|
w := httptest.NewRecorder()
|
||||||
data := map[string]any{
|
data := map[string]any{
|
||||||
@ -385,6 +382,31 @@ func TestRenderBSON(t *testing.T) {
|
|||||||
assert.Equal(t, "application/bson", w.Header().Get("Content-Type"))
|
assert.Equal(t, "application/bson", w.Header().Get("Content-Type"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRenderBSONError(t *testing.T) {
|
||||||
|
w := httptest.NewRecorder()
|
||||||
|
data := make(chan int)
|
||||||
|
|
||||||
|
err := (BSON{data}).Render(w)
|
||||||
|
require.Error(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRenderBSONWriteError(t *testing.T) {
|
||||||
|
type testStruct struct {
|
||||||
|
Value string
|
||||||
|
}
|
||||||
|
data := &testStruct{Value: "test"}
|
||||||
|
bsonData, err := bson.Marshal(data)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
ew := &errorWriter{
|
||||||
|
bufString: string(bsonData),
|
||||||
|
ResponseRecorder: httptest.NewRecorder(),
|
||||||
|
}
|
||||||
|
|
||||||
|
err = (BSON{data}).Render(ew)
|
||||||
|
require.Error(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
func TestRenderXML(t *testing.T) {
|
func TestRenderXML(t *testing.T) {
|
||||||
w := httptest.NewRecorder()
|
w := httptest.NewRecorder()
|
||||||
data := xmlmap{
|
data := xmlmap{
|
||||||
@ -401,6 +423,15 @@ func TestRenderXML(t *testing.T) {
|
|||||||
assert.Equal(t, "application/xml; charset=utf-8", w.Header().Get("Content-Type"))
|
assert.Equal(t, "application/xml; charset=utf-8", w.Header().Get("Content-Type"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRenderXMLError(t *testing.T) {
|
||||||
|
w := httptest.NewRecorder()
|
||||||
|
data := make(chan int)
|
||||||
|
|
||||||
|
err := (XML{data}).Render(w)
|
||||||
|
require.Error(t, err)
|
||||||
|
assert.Contains(t, err.Error(), "xml: unsupported type: chan int")
|
||||||
|
}
|
||||||
|
|
||||||
func TestRenderRedirect(t *testing.T) {
|
func TestRenderRedirect(t *testing.T) {
|
||||||
req, err := http.NewRequest(http.MethodGet, "/test-redirect", nil)
|
req, err := http.NewRequest(http.MethodGet, "/test-redirect", nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@ -455,6 +486,22 @@ func TestRenderData(t *testing.T) {
|
|||||||
assert.Equal(t, "image/png", w.Header().Get("Content-Type"))
|
assert.Equal(t, "image/png", w.Header().Get("Content-Type"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRenderDataError(t *testing.T) {
|
||||||
|
ew := &errorWriter{
|
||||||
|
bufString: "#!PNG some raw data",
|
||||||
|
ResponseRecorder: httptest.NewRecorder(),
|
||||||
|
}
|
||||||
|
data := []byte("#!PNG some raw data")
|
||||||
|
|
||||||
|
err := (Data{
|
||||||
|
ContentType: "image/png",
|
||||||
|
Data: data,
|
||||||
|
}).Render(ew)
|
||||||
|
|
||||||
|
require.Error(t, err)
|
||||||
|
assert.Contains(t, err.Error(), "write \"#!PNG some raw data\" error")
|
||||||
|
}
|
||||||
|
|
||||||
func TestRenderString(t *testing.T) {
|
func TestRenderString(t *testing.T) {
|
||||||
w := httptest.NewRecorder()
|
w := httptest.NewRecorder()
|
||||||
|
|
||||||
@ -594,6 +641,32 @@ func TestRenderHTMLDebugPanics(t *testing.T) {
|
|||||||
assert.Panics(t, func() { htmlRender.Instance("", nil) })
|
assert.Panics(t, func() { htmlRender.Instance("", nil) })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRenderHTMLTemplateError(t *testing.T) {
|
||||||
|
w := httptest.NewRecorder()
|
||||||
|
templ := template.Must(template.New("t").Parse(`Hello {{if .name}}{{.name.DoesNotExist}}{{end}}`))
|
||||||
|
|
||||||
|
htmlRender := HTMLProduction{Template: templ}
|
||||||
|
instance := htmlRender.Instance("t", map[string]any{
|
||||||
|
"name": "alexandernyquist",
|
||||||
|
})
|
||||||
|
|
||||||
|
err := instance.Render(w)
|
||||||
|
require.Error(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRenderHTMLTemplateExecuteError(t *testing.T) {
|
||||||
|
w := httptest.NewRecorder()
|
||||||
|
templ := template.Must(template.New("t").Parse(`Hello {{.name.invalid}}`))
|
||||||
|
|
||||||
|
htmlRender := HTMLProduction{Template: templ}
|
||||||
|
instance := htmlRender.Instance("t", map[string]any{
|
||||||
|
"name": "alexandernyquist",
|
||||||
|
})
|
||||||
|
|
||||||
|
err := instance.Render(w)
|
||||||
|
require.Error(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
func TestRenderReader(t *testing.T) {
|
func TestRenderReader(t *testing.T) {
|
||||||
w := httptest.NewRecorder()
|
w := httptest.NewRecorder()
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user