You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

route_test.go 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package web
  5. import (
  6. "bytes"
  7. "net/http"
  8. "net/http/httptest"
  9. "testing"
  10. chi "github.com/go-chi/chi/v5"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. func TestRoute1(t *testing.T) {
  14. buff := bytes.NewBufferString("")
  15. recorder := httptest.NewRecorder()
  16. recorder.Body = buff
  17. r := NewRoute()
  18. r.Get("/{username}/{reponame}/{type:issues|pulls}", func(resp http.ResponseWriter, req *http.Request) {
  19. username := chi.URLParam(req, "username")
  20. assert.EqualValues(t, "gitea", username)
  21. reponame := chi.URLParam(req, "reponame")
  22. assert.EqualValues(t, "gitea", reponame)
  23. tp := chi.URLParam(req, "type")
  24. assert.EqualValues(t, "issues", tp)
  25. })
  26. req, err := http.NewRequest("GET", "http://localhost:8000/gitea/gitea/issues", nil)
  27. assert.NoError(t, err)
  28. r.ServeHTTP(recorder, req)
  29. assert.EqualValues(t, http.StatusOK, recorder.Code)
  30. }
  31. func TestRoute2(t *testing.T) {
  32. buff := bytes.NewBufferString("")
  33. recorder := httptest.NewRecorder()
  34. recorder.Body = buff
  35. var route int
  36. r := NewRoute()
  37. r.Group("/{username}/{reponame}", func() {
  38. r.Group("", func() {
  39. r.Get("/{type:issues|pulls}", func(resp http.ResponseWriter, req *http.Request) {
  40. username := chi.URLParam(req, "username")
  41. assert.EqualValues(t, "gitea", username)
  42. reponame := chi.URLParam(req, "reponame")
  43. assert.EqualValues(t, "gitea", reponame)
  44. tp := chi.URLParam(req, "type")
  45. assert.EqualValues(t, "issues", tp)
  46. route = 0
  47. })
  48. r.Get("/{type:issues|pulls}/{index}", func(resp http.ResponseWriter, req *http.Request) {
  49. username := chi.URLParam(req, "username")
  50. assert.EqualValues(t, "gitea", username)
  51. reponame := chi.URLParam(req, "reponame")
  52. assert.EqualValues(t, "gitea", reponame)
  53. tp := chi.URLParam(req, "type")
  54. assert.EqualValues(t, "issues", tp)
  55. index := chi.URLParam(req, "index")
  56. assert.EqualValues(t, "1", index)
  57. route = 1
  58. })
  59. }, func(resp http.ResponseWriter, req *http.Request) {
  60. resp.WriteHeader(200)
  61. })
  62. r.Group("/issues/{index}", func() {
  63. r.Get("/view", func(resp http.ResponseWriter, req *http.Request) {
  64. username := chi.URLParam(req, "username")
  65. assert.EqualValues(t, "gitea", username)
  66. reponame := chi.URLParam(req, "reponame")
  67. assert.EqualValues(t, "gitea", reponame)
  68. index := chi.URLParam(req, "index")
  69. assert.EqualValues(t, "1", index)
  70. route = 2
  71. })
  72. })
  73. })
  74. req, err := http.NewRequest("GET", "http://localhost:8000/gitea/gitea/issues", nil)
  75. assert.NoError(t, err)
  76. r.ServeHTTP(recorder, req)
  77. assert.EqualValues(t, http.StatusOK, recorder.Code)
  78. assert.EqualValues(t, 0, route)
  79. req, err = http.NewRequest("GET", "http://localhost:8000/gitea/gitea/issues/1", nil)
  80. assert.NoError(t, err)
  81. r.ServeHTTP(recorder, req)
  82. assert.EqualValues(t, http.StatusOK, recorder.Code)
  83. assert.EqualValues(t, 1, route)
  84. req, err = http.NewRequest("GET", "http://localhost:8000/gitea/gitea/issues/1/view", nil)
  85. assert.NoError(t, err)
  86. r.ServeHTTP(recorder, req)
  87. assert.EqualValues(t, http.StatusOK, recorder.Code)
  88. assert.EqualValues(t, 2, route)
  89. }
  90. func TestRoute3(t *testing.T) {
  91. buff := bytes.NewBufferString("")
  92. recorder := httptest.NewRecorder()
  93. recorder.Body = buff
  94. var route int
  95. m := NewRoute()
  96. r := NewRoute()
  97. r.Mount("/api/v1", m)
  98. m.Group("/repos", func() {
  99. m.Group("/{username}/{reponame}", func() {
  100. m.Group("/branch_protections", func() {
  101. m.Get("", func(resp http.ResponseWriter, req *http.Request) {
  102. route = 0
  103. })
  104. m.Post("", func(resp http.ResponseWriter, req *http.Request) {
  105. route = 1
  106. })
  107. m.Group("/{name}", func() {
  108. m.Get("", func(resp http.ResponseWriter, req *http.Request) {
  109. route = 2
  110. })
  111. m.Patch("", func(resp http.ResponseWriter, req *http.Request) {
  112. route = 3
  113. })
  114. m.Delete("", func(resp http.ResponseWriter, req *http.Request) {
  115. route = 4
  116. })
  117. })
  118. })
  119. })
  120. })
  121. req, err := http.NewRequest("GET", "http://localhost:8000/api/v1/repos/gitea/gitea/branch_protections", nil)
  122. assert.NoError(t, err)
  123. r.ServeHTTP(recorder, req)
  124. assert.EqualValues(t, http.StatusOK, recorder.Code)
  125. assert.EqualValues(t, 0, route)
  126. req, err = http.NewRequest("POST", "http://localhost:8000/api/v1/repos/gitea/gitea/branch_protections", nil)
  127. assert.NoError(t, err)
  128. r.ServeHTTP(recorder, req)
  129. assert.EqualValues(t, http.StatusOK, recorder.Code, http.StatusOK)
  130. assert.EqualValues(t, 1, route)
  131. req, err = http.NewRequest("GET", "http://localhost:8000/api/v1/repos/gitea/gitea/branch_protections/master", nil)
  132. assert.NoError(t, err)
  133. r.ServeHTTP(recorder, req)
  134. assert.EqualValues(t, http.StatusOK, recorder.Code)
  135. assert.EqualValues(t, 2, route)
  136. req, err = http.NewRequest("PATCH", "http://localhost:8000/api/v1/repos/gitea/gitea/branch_protections/master", nil)
  137. assert.NoError(t, err)
  138. r.ServeHTTP(recorder, req)
  139. assert.EqualValues(t, http.StatusOK, recorder.Code)
  140. assert.EqualValues(t, 3, route)
  141. req, err = http.NewRequest("DELETE", "http://localhost:8000/api/v1/repos/gitea/gitea/branch_protections/master", nil)
  142. assert.NoError(t, err)
  143. r.ServeHTTP(recorder, req)
  144. assert.EqualValues(t, http.StatusOK, recorder.Code)
  145. assert.EqualValues(t, 4, route)
  146. }