params_test.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package request // import "miniflux.app/v2/internal/http/request"
  4. import (
  5. "net/http"
  6. "net/http/httptest"
  7. "net/url"
  8. "testing"
  9. "github.com/gorilla/mux"
  10. )
  11. func TestFormInt64Value(t *testing.T) {
  12. f := url.Values{}
  13. f.Set("integer value", "42")
  14. f.Set("invalid value", "invalid integer")
  15. r := &http.Request{Form: f}
  16. result := FormInt64Value(r, "integer value")
  17. expected := int64(42)
  18. if result != expected {
  19. t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
  20. }
  21. result = FormInt64Value(r, "invalid value")
  22. expected = int64(0)
  23. if result != expected {
  24. t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
  25. }
  26. result = FormInt64Value(r, "missing value")
  27. expected = int64(0)
  28. if result != expected {
  29. t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
  30. }
  31. }
  32. func TestRouteStringParam(t *testing.T) {
  33. router := mux.NewRouter()
  34. router.HandleFunc("/route/{variable}/index", func(w http.ResponseWriter, r *http.Request) {
  35. result := RouteStringParam(r, "variable")
  36. expected := "value"
  37. if result != expected {
  38. t.Errorf(`Unexpected result, got %q instead of %q`, result, expected)
  39. }
  40. result = RouteStringParam(r, "missing variable")
  41. expected = ""
  42. if result != expected {
  43. t.Errorf(`Unexpected result, got %q instead of %q`, result, expected)
  44. }
  45. })
  46. r, err := http.NewRequest("GET", "/route/value/index", nil)
  47. if err != nil {
  48. t.Fatal(err)
  49. }
  50. w := httptest.NewRecorder()
  51. router.ServeHTTP(w, r)
  52. }
  53. func TestRouteInt64Param(t *testing.T) {
  54. router := mux.NewRouter()
  55. router.HandleFunc("/a/{variable1}/b/{variable2}/c/{variable3}", func(w http.ResponseWriter, r *http.Request) {
  56. result := RouteInt64Param(r, "variable1")
  57. expected := int64(42)
  58. if result != expected {
  59. t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
  60. }
  61. result = RouteInt64Param(r, "missing variable")
  62. expected = 0
  63. if result != expected {
  64. t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
  65. }
  66. result = RouteInt64Param(r, "variable2")
  67. expected = 0
  68. if result != expected {
  69. t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
  70. }
  71. result = RouteInt64Param(r, "variable3")
  72. expected = 0
  73. if result != expected {
  74. t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
  75. }
  76. })
  77. r, err := http.NewRequest("GET", "/a/42/b/not-int/c/-10", nil)
  78. if err != nil {
  79. t.Fatal(err)
  80. }
  81. w := httptest.NewRecorder()
  82. router.ServeHTTP(w, r)
  83. }
  84. func TestQueryStringParam(t *testing.T) {
  85. u, _ := url.Parse("http://example.org/?key=value")
  86. r := &http.Request{URL: u}
  87. result := QueryStringParam(r, "key", "fallback")
  88. expected := "value"
  89. if result != expected {
  90. t.Errorf(`Unexpected result, got %q instead of %q`, result, expected)
  91. }
  92. result = QueryStringParam(r, "missing key", "fallback")
  93. expected = "fallback"
  94. if result != expected {
  95. t.Errorf(`Unexpected result, got %q instead of %q`, result, expected)
  96. }
  97. }
  98. func TestQueryIntParam(t *testing.T) {
  99. u, _ := url.Parse("http://example.org/?key=42&invalid=value&negative=-5")
  100. r := &http.Request{URL: u}
  101. result := QueryIntParam(r, "key", 84)
  102. expected := 42
  103. if result != expected {
  104. t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
  105. }
  106. result = QueryIntParam(r, "missing key", 84)
  107. expected = 84
  108. if result != expected {
  109. t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
  110. }
  111. result = QueryIntParam(r, "negative", 69)
  112. expected = 69
  113. if result != expected {
  114. t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
  115. }
  116. result = QueryIntParam(r, "invalid", 99)
  117. expected = 99
  118. if result != expected {
  119. t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
  120. }
  121. }
  122. func TestQueryInt64Param(t *testing.T) {
  123. u, _ := url.Parse("http://example.org/?key=42&invalid=value&negative=-5")
  124. r := &http.Request{URL: u}
  125. result := QueryInt64Param(r, "key", int64(84))
  126. expected := int64(42)
  127. if result != expected {
  128. t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
  129. }
  130. result = QueryInt64Param(r, "missing key", int64(84))
  131. expected = int64(84)
  132. if result != expected {
  133. t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
  134. }
  135. result = QueryInt64Param(r, "invalid", int64(69))
  136. expected = int64(69)
  137. if result != expected {
  138. t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
  139. }
  140. result = QueryInt64Param(r, "invalid", int64(99))
  141. expected = int64(99)
  142. if result != expected {
  143. t.Errorf(`Unexpected result, got %d instead of %d`, result, expected)
  144. }
  145. }
  146. func TestHasQueryParam(t *testing.T) {
  147. u, _ := url.Parse("http://example.org/?key=42")
  148. r := &http.Request{URL: u}
  149. result := HasQueryParam(r, "key")
  150. expected := true
  151. if result != expected {
  152. t.Errorf(`Unexpected result, got %v instead of %v`, result, expected)
  153. }
  154. result = HasQueryParam(r, "missing key")
  155. expected = false
  156. if result != expected {
  157. t.Errorf(`Unexpected result, got %v instead of %v`, result, expected)
  158. }
  159. }