goyave.dev/goyave/v5@v5.0.0-rc9.0.20240517145003-d3f977d0b9f3/request_test.go (about) 1 package goyave 2 3 import ( 4 "bytes" 5 "context" 6 "net/http" 7 "net/http/httptest" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func TestRequest(t *testing.T) { 14 15 t.Run("NewRequest", func(t *testing.T) { 16 httpReq := httptest.NewRequest(http.MethodGet, "/test", nil) 17 r := NewRequest(httpReq) 18 19 assert.Equal(t, httpReq, r.httpRequest) 20 assert.False(t, r.Now.IsZero()) 21 assert.NotNil(t, r.Extra) 22 }) 23 24 t.Run("Accessors", func(t *testing.T) { 25 httpReq := httptest.NewRequest(http.MethodPost, "/test", bytes.NewBufferString("hello")) 26 httpReq.Header.Set("X-Test", "value") 27 httpReq.Header.Set("Referer", "referrer") 28 httpReq.Header.Set("User-Agent", "useragent") 29 httpReq.SetBasicAuth("username", "password") 30 httpReq.AddCookie(&http.Cookie{Name: "test-cookie", Value: "value"}) 31 r := NewRequest(httpReq) 32 33 assert.Equal(t, httpReq, r.Request()) 34 assert.Equal(t, http.MethodPost, r.Method()) 35 assert.Equal(t, "HTTP/1.1", r.Protocol()) 36 assert.Equal(t, "/test", r.URL().String()) 37 38 assert.Equal(t, httpReq.Header, r.Header()) 39 assert.Equal(t, "/test", r.URL().String()) 40 assert.Equal(t, int64(5), r.ContentLength()) 41 assert.Equal(t, "192.0.2.1:1234", r.RemoteAddress()) 42 43 cookies := r.Cookies() 44 assert.Equal(t, cookies, r.cookies) 45 assert.Equal(t, []*http.Cookie{{Name: "test-cookie", Value: "value"}}, cookies) 46 47 assert.Equal(t, "referrer", r.Referrer()) 48 assert.Equal(t, "useragent", r.UserAgent()) 49 50 username, password, ok := r.BasicAuth() 51 assert.Equal(t, "username", username) 52 assert.Equal(t, "password", password) 53 assert.True(t, ok) 54 55 assert.NotNil(t, r.Body()) 56 httpReq = httptest.NewRequest(http.MethodGet, "/test", nil) 57 assert.NotNil(t, NewRequest(httpReq).Body()) 58 }) 59 60 t.Run("BearerToken", func(t *testing.T) { 61 httpReq := httptest.NewRequest(http.MethodGet, "/test", nil) 62 httpReq.Header.Set("Authorization", "Bearer token ") 63 r := NewRequest(httpReq) 64 65 token, ok := r.BearerToken() 66 assert.Equal(t, "token", token) 67 assert.True(t, ok) 68 69 httpReq = httptest.NewRequest(http.MethodGet, "/test", nil) 70 r = NewRequest(httpReq) 71 72 token, ok = r.BearerToken() 73 assert.Empty(t, token) 74 assert.False(t, ok) 75 }) 76 77 t.Run("Context", func(t *testing.T) { 78 httpReq := httptest.NewRequest(http.MethodGet, "/test", nil) 79 r := NewRequest(httpReq) 80 81 ctx := r.Context() 82 if !assert.NotNil(t, ctx) { 83 return 84 } 85 assert.Equal(t, httpReq.Context(), ctx) 86 87 key := struct{}{} 88 r2 := r.WithContext(context.WithValue(ctx, key, "value")) 89 assert.Equal(t, r, r2) 90 91 ctx2 := r.Context() 92 assert.Equal(t, "value", ctx2.Value(key)) 93 }) 94 }