| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
- // SPDX-License-Identifier: Apache-2.0
- package request // import "miniflux.app/v2/internal/http/request"
- import (
- "net/http"
- "net/http/httptest"
- "net/url"
- "reflect"
- "testing"
- )
- func TestFormInt64Value(t *testing.T) {
- f := url.Values{}
- f.Set("integer value", "42")
- f.Set("invalid value", "invalid integer")
- r := &http.Request{Form: f}
- result := FormInt64Value(r, "integer value")
- expected := int64(42)
- if result != expected {
- t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
- }
- result = FormInt64Value(r, "invalid value")
- expected = int64(0)
- if result != expected {
- t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
- }
- result = FormInt64Value(r, "missing value")
- expected = int64(0)
- if result != expected {
- t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
- }
- }
- func TestRouteStringParamWithServerMux(t *testing.T) {
- router := http.NewServeMux()
- router.HandleFunc("GET /route/{variable}/index", func(w http.ResponseWriter, r *http.Request) {
- result := RouteStringParam(r, "variable")
- expected := "value"
- if result != expected {
- t.Errorf(`Unexpected result, got %q instead of %q`, result, expected)
- }
- result = RouteStringParam(r, "missing variable")
- expected = ""
- if result != expected {
- t.Errorf(`Unexpected result, got %q instead of %q`, result, expected)
- }
- })
- r, err := http.NewRequest(http.MethodGet, "/route/value/index", nil)
- if err != nil {
- t.Fatal(err)
- }
- w := httptest.NewRecorder()
- router.ServeHTTP(w, r)
- }
- func TestRouteInt64ParamWithServerMux(t *testing.T) {
- router := http.NewServeMux()
- router.HandleFunc("GET /a/{variable1}/b/{variable2}/c/{variable3}", func(w http.ResponseWriter, r *http.Request) {
- result := RouteInt64Param(r, "variable1")
- expected := int64(42)
- if result != expected {
- t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
- }
- result = RouteInt64Param(r, "missing variable")
- expected = 0
- if result != expected {
- t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
- }
- result = RouteInt64Param(r, "variable2")
- expected = 0
- if result != expected {
- t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
- }
- result = RouteInt64Param(r, "variable3")
- expected = 0
- if result != expected {
- t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
- }
- })
- r, err := http.NewRequest(http.MethodGet, "/a/42/b/not-int/c/-10", nil)
- if err != nil {
- t.Fatal(err)
- }
- w := httptest.NewRecorder()
- router.ServeHTTP(w, r)
- }
- func TestQueryStringParam(t *testing.T) {
- u, _ := url.Parse("http://example.org/?key=value")
- r := &http.Request{URL: u}
- result := QueryStringParam(r, "key", "fallback")
- expected := "value"
- if result != expected {
- t.Errorf(`Unexpected result, got %q instead of %q`, result, expected)
- }
- result = QueryStringParam(r, "missing key", "fallback")
- expected = "fallback"
- if result != expected {
- t.Errorf(`Unexpected result, got %q instead of %q`, result, expected)
- }
- }
- func TestQueryIntParam(t *testing.T) {
- u, _ := url.Parse("http://example.org/?key=42&invalid=value&negative=-5")
- r := &http.Request{URL: u}
- result := QueryIntParam(r, "key", 84)
- expected := 42
- if result != expected {
- t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
- }
- result = QueryIntParam(r, "missing key", 84)
- expected = 84
- if result != expected {
- t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
- }
- result = QueryIntParam(r, "negative", 69)
- expected = 69
- if result != expected {
- t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
- }
- result = QueryIntParam(r, "invalid", 99)
- expected = 99
- if result != expected {
- t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
- }
- }
- func TestQueryInt64Param(t *testing.T) {
- u, _ := url.Parse("http://example.org/?key=42&invalid=value&negative=-5")
- r := &http.Request{URL: u}
- result := QueryInt64Param(r, "key", int64(84))
- expected := int64(42)
- if result != expected {
- t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
- }
- result = QueryInt64Param(r, "missing key", int64(84))
- expected = int64(84)
- if result != expected {
- t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
- }
- result = QueryInt64Param(r, "negative", int64(69))
- expected = int64(69)
- if result != expected {
- t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
- }
- result = QueryInt64Param(r, "invalid", int64(99))
- expected = int64(99)
- if result != expected {
- t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
- }
- }
- func TestQueryBoolParam(t *testing.T) {
- u, _ := url.Parse("http://example.org/?truthy=true&falsy=false&invalid=wat")
- r := &http.Request{URL: u}
- result := QueryBoolParam(r, "truthy", false)
- expected := true
- if result != expected {
- t.Errorf(`Unexpected result, got %v instead of %v`, result, expected)
- }
- result = QueryBoolParam(r, "falsy", true)
- expected = false
- if result != expected {
- t.Errorf(`Unexpected result, got %v instead of %v`, result, expected)
- }
- result = QueryBoolParam(r, "missing", true)
- expected = true
- if result != expected {
- t.Errorf(`Unexpected result, got %v instead of %v`, result, expected)
- }
- result = QueryBoolParam(r, "invalid", true)
- expected = true
- if result != expected {
- t.Errorf(`Unexpected result, got %v instead of %v`, result, expected)
- }
- }
- func TestQueryStringParamList(t *testing.T) {
- u, _ := url.Parse("http://example.org/?tag=alpha&tag=beta&tag=+&tag=%20%20gamma%20%20&empty=")
- r := &http.Request{URL: u}
- result := QueryStringParamList(r, "tag")
- expected := []string{"alpha", "beta", "gamma"}
- if !reflect.DeepEqual(result, expected) {
- t.Errorf(`Unexpected result, got %v instead of %v`, result, expected)
- }
- result = QueryStringParamList(r, "missing")
- expected = nil
- if !reflect.DeepEqual(result, expected) {
- t.Errorf(`Unexpected result, got %v instead of %v`, result, expected)
- }
- }
- func TestHasQueryParam(t *testing.T) {
- u, _ := url.Parse("http://example.org/?key=42")
- r := &http.Request{URL: u}
- result := HasQueryParam(r, "key")
- expected := true
- if result != expected {
- t.Errorf(`Unexpected result, got %v instead of %v`, result, expected)
- }
- result = HasQueryParam(r, "missing key")
- expected = false
- if result != expected {
- t.Errorf(`Unexpected result, got %v instead of %v`, result, expected)
- }
- }
|