web/Request_test.go
Eduard Urbach 4c19cd0e99
All checks were successful
/ test (push) Successful in 18s
Added support for io.ReadAll on requests
2025-06-21 11:37:39 +02:00

96 lines
No EOL
2.3 KiB
Go

package web_test
import (
"fmt"
"io"
"strconv"
"strings"
"testing"
"git.urbach.dev/go/assert"
"git.urbach.dev/go/web"
)
func TestRequest(t *testing.T) {
s := web.NewServer()
s.Get("/request", func(ctx web.Context) error {
req := ctx.Request()
method := req.Method()
scheme := req.Scheme()
host := req.Host()
path := req.Path()
return ctx.String(fmt.Sprintf("%s %s %s %s", method, scheme, host, path))
})
response := s.Request("GET", "http://example.com/request?x=1", []web.Header{{"Accept", "*/*"}}, nil)
assert.Equal(t, response.Status(), 200)
assert.Equal(t, string(response.Body()), "GET http example.com /request")
}
func TestRequestBody(t *testing.T) {
s := web.NewServer()
s.Get("/", func(ctx web.Context) error {
body, err := io.ReadAll(ctx.Request())
if err != nil {
return err
}
return ctx.Bytes(body)
})
body := strings.Repeat("Hello", 1000)
headers := []web.Header{{Key: "Content-Length", Value: strconv.Itoa(len(body))}}
response := s.Request("GET", "/", headers, strings.NewReader(body))
assert.Equal(t, response.Status(), 200)
assert.Equal(t, string(response.Body()), body)
}
func TestRequestBodyMissingLength(t *testing.T) {
s := web.NewServer()
s.Get("/", func(ctx web.Context) error {
body, err := io.ReadAll(ctx.Request())
if err != nil {
return err
}
return ctx.Bytes(body)
})
body := strings.Repeat("Hello", 1000)
response := s.Request("GET", "/", nil, strings.NewReader(body))
assert.Equal(t, response.Status(), 200)
assert.Equal(t, string(response.Body()), "")
}
func TestRequestHeader(t *testing.T) {
s := web.NewServer()
s.Get("/", func(ctx web.Context) error {
accept := ctx.Request().Header("Accept")
empty := ctx.Request().Header("")
return ctx.String(accept + empty)
})
response := s.Request("GET", "/", []web.Header{{"Accept", "*/*"}}, nil)
assert.Equal(t, response.Status(), 200)
assert.Equal(t, string(response.Body()), "*/*")
}
func TestRequestParam(t *testing.T) {
s := web.NewServer()
s.Get("/blog/:article", func(ctx web.Context) error {
article := ctx.Request().Param("article")
empty := ctx.Request().Param("")
return ctx.String(article + empty)
})
response := s.Request("GET", "/blog/my-article", nil, nil)
assert.Equal(t, response.Status(), 200)
assert.Equal(t, string(response.Body()), "my-article")
}