2024-03-09 11:21:24 +02:00
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
// SPDX-FileCopyrightText: © 2015 LabStack LLC and Echo contributors
|
|
|
|
|
2017-06-29 02:01:48 +02:00
|
|
|
package echo
|
|
|
|
|
|
|
|
import (
|
2018-10-14 17:16:58 +02:00
|
|
|
"net/http"
|
2017-06-29 02:01:48 +02:00
|
|
|
"net/http/httptest"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestResponse(t *testing.T) {
|
|
|
|
e := New()
|
2018-10-14 17:16:58 +02:00
|
|
|
req := httptest.NewRequest(http.MethodGet, "/", nil)
|
2017-06-29 02:01:48 +02:00
|
|
|
rec := httptest.NewRecorder()
|
|
|
|
c := e.NewContext(req, rec)
|
2017-06-29 19:59:21 +02:00
|
|
|
res := &Response{echo: e, Writer: rec}
|
2017-06-29 02:01:48 +02:00
|
|
|
|
|
|
|
// Before
|
2017-06-29 19:59:21 +02:00
|
|
|
res.Before(func() {
|
2017-06-29 02:01:48 +02:00
|
|
|
c.Response().Header().Set(HeaderServer, "echo")
|
|
|
|
})
|
2020-04-26 15:01:24 +02:00
|
|
|
// After
|
|
|
|
res.After(func() {
|
|
|
|
c.Response().Header().Set(HeaderXFrameOptions, "DENY")
|
|
|
|
})
|
2017-06-29 02:01:48 +02:00
|
|
|
res.Write([]byte("test"))
|
|
|
|
assert.Equal(t, "echo", rec.Header().Get(HeaderServer))
|
2020-04-26 15:01:24 +02:00
|
|
|
assert.Equal(t, "DENY", rec.Header().Get(HeaderXFrameOptions))
|
2017-06-29 02:01:48 +02:00
|
|
|
}
|
2019-05-24 07:13:57 +02:00
|
|
|
|
|
|
|
func TestResponse_Write_FallsBackToDefaultStatus(t *testing.T) {
|
|
|
|
e := New()
|
|
|
|
rec := httptest.NewRecorder()
|
|
|
|
res := &Response{echo: e, Writer: rec}
|
|
|
|
|
|
|
|
res.Write([]byte("test"))
|
|
|
|
assert.Equal(t, http.StatusOK, rec.Code)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestResponse_Write_UsesSetResponseCode(t *testing.T) {
|
|
|
|
e := New()
|
|
|
|
rec := httptest.NewRecorder()
|
|
|
|
res := &Response{echo: e, Writer: rec}
|
|
|
|
|
|
|
|
res.Status = http.StatusBadRequest
|
|
|
|
res.Write([]byte("test"))
|
|
|
|
assert.Equal(t, http.StatusBadRequest, rec.Code)
|
|
|
|
}
|
2020-04-25 20:01:03 +02:00
|
|
|
|
|
|
|
func TestResponse_Flush(t *testing.T) {
|
|
|
|
e := New()
|
|
|
|
rec := httptest.NewRecorder()
|
|
|
|
res := &Response{echo: e, Writer: rec}
|
|
|
|
|
|
|
|
res.Write([]byte("test"))
|
|
|
|
res.Flush()
|
|
|
|
assert.True(t, rec.Flushed)
|
|
|
|
}
|
2020-12-02 14:13:42 +02:00
|
|
|
|
2024-03-09 10:50:47 +02:00
|
|
|
type testResponseWriter struct {
|
|
|
|
}
|
|
|
|
|
|
|
|
func (w *testResponseWriter) WriteHeader(statusCode int) {
|
|
|
|
}
|
|
|
|
|
|
|
|
func (w *testResponseWriter) Write([]byte) (int, error) {
|
|
|
|
return 0, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (w *testResponseWriter) Header() http.Header {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestResponse_FlushPanics(t *testing.T) {
|
|
|
|
e := New()
|
|
|
|
rw := new(testResponseWriter)
|
|
|
|
res := &Response{echo: e, Writer: rw}
|
|
|
|
|
|
|
|
// we test that we behave as before unwrapping flushers - flushing writer that does not support it causes panic
|
|
|
|
assert.PanicsWithError(t, "response writer flushing is not supported", func() {
|
|
|
|
res.Flush()
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2020-12-02 14:13:42 +02:00
|
|
|
func TestResponse_ChangeStatusCodeBeforeWrite(t *testing.T) {
|
|
|
|
e := New()
|
|
|
|
rec := httptest.NewRecorder()
|
|
|
|
res := &Response{echo: e, Writer: rec}
|
|
|
|
|
|
|
|
res.Before(func() {
|
|
|
|
if 200 < res.Status && res.Status < 300 {
|
|
|
|
res.Status = 200
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
res.WriteHeader(209)
|
|
|
|
|
|
|
|
assert.Equal(t, http.StatusOK, rec.Code)
|
|
|
|
}
|
2023-03-28 11:25:11 +02:00
|
|
|
|
|
|
|
func TestResponse_Unwrap(t *testing.T) {
|
|
|
|
e := New()
|
|
|
|
rec := httptest.NewRecorder()
|
|
|
|
res := &Response{echo: e, Writer: rec}
|
|
|
|
|
|
|
|
assert.Equal(t, rec, res.Unwrap())
|
|
|
|
}
|