code.gitea.io/gitea@v1.22.3/modules/web/route_test.go (about)

     1  // Copyright 2021 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package web
     5  
     6  import (
     7  	"bytes"
     8  	"net/http"
     9  	"net/http/httptest"
    10  	"strconv"
    11  	"testing"
    12  
    13  	chi "github.com/go-chi/chi/v5"
    14  	"github.com/stretchr/testify/assert"
    15  )
    16  
    17  func TestRoute1(t *testing.T) {
    18  	buff := bytes.NewBufferString("")
    19  	recorder := httptest.NewRecorder()
    20  	recorder.Body = buff
    21  
    22  	r := NewRoute()
    23  	r.Get("/{username}/{reponame}/{type:issues|pulls}", func(resp http.ResponseWriter, req *http.Request) {
    24  		username := chi.URLParam(req, "username")
    25  		assert.EqualValues(t, "gitea", username)
    26  		reponame := chi.URLParam(req, "reponame")
    27  		assert.EqualValues(t, "gitea", reponame)
    28  		tp := chi.URLParam(req, "type")
    29  		assert.EqualValues(t, "issues", tp)
    30  	})
    31  
    32  	req, err := http.NewRequest("GET", "http://localhost:8000/gitea/gitea/issues", nil)
    33  	assert.NoError(t, err)
    34  	r.ServeHTTP(recorder, req)
    35  	assert.EqualValues(t, http.StatusOK, recorder.Code)
    36  }
    37  
    38  func TestRoute2(t *testing.T) {
    39  	buff := bytes.NewBufferString("")
    40  	recorder := httptest.NewRecorder()
    41  	recorder.Body = buff
    42  
    43  	hit := -1
    44  
    45  	r := NewRoute()
    46  	r.Group("/{username}/{reponame}", func() {
    47  		r.Group("", func() {
    48  			r.Get("/{type:issues|pulls}", 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  				hit = 0
    56  			})
    57  
    58  			r.Get("/{type:issues|pulls}/{index}", func(resp http.ResponseWriter, req *http.Request) {
    59  				username := chi.URLParam(req, "username")
    60  				assert.EqualValues(t, "gitea", username)
    61  				reponame := chi.URLParam(req, "reponame")
    62  				assert.EqualValues(t, "gitea", reponame)
    63  				tp := chi.URLParam(req, "type")
    64  				assert.EqualValues(t, "issues", tp)
    65  				index := chi.URLParam(req, "index")
    66  				assert.EqualValues(t, "1", index)
    67  				hit = 1
    68  			})
    69  		}, func(resp http.ResponseWriter, req *http.Request) {
    70  			if stop, err := strconv.Atoi(req.FormValue("stop")); err == nil {
    71  				hit = stop
    72  				resp.WriteHeader(http.StatusOK)
    73  			}
    74  		})
    75  
    76  		r.Group("/issues/{index}", func() {
    77  			r.Get("/view", func(resp http.ResponseWriter, req *http.Request) {
    78  				username := chi.URLParam(req, "username")
    79  				assert.EqualValues(t, "gitea", username)
    80  				reponame := chi.URLParam(req, "reponame")
    81  				assert.EqualValues(t, "gitea", reponame)
    82  				index := chi.URLParam(req, "index")
    83  				assert.EqualValues(t, "1", index)
    84  				hit = 2
    85  			})
    86  		})
    87  	})
    88  
    89  	req, err := http.NewRequest("GET", "http://localhost:8000/gitea/gitea/issues", nil)
    90  	assert.NoError(t, err)
    91  	r.ServeHTTP(recorder, req)
    92  	assert.EqualValues(t, http.StatusOK, recorder.Code)
    93  	assert.EqualValues(t, 0, hit)
    94  
    95  	req, err = http.NewRequest("GET", "http://localhost:8000/gitea/gitea/issues/1", nil)
    96  	assert.NoError(t, err)
    97  	r.ServeHTTP(recorder, req)
    98  	assert.EqualValues(t, http.StatusOK, recorder.Code)
    99  	assert.EqualValues(t, 1, hit)
   100  
   101  	req, err = http.NewRequest("GET", "http://localhost:8000/gitea/gitea/issues/1?stop=100", nil)
   102  	assert.NoError(t, err)
   103  	r.ServeHTTP(recorder, req)
   104  	assert.EqualValues(t, http.StatusOK, recorder.Code)
   105  	assert.EqualValues(t, 100, hit)
   106  
   107  	req, err = http.NewRequest("GET", "http://localhost:8000/gitea/gitea/issues/1/view", nil)
   108  	assert.NoError(t, err)
   109  	r.ServeHTTP(recorder, req)
   110  	assert.EqualValues(t, http.StatusOK, recorder.Code)
   111  	assert.EqualValues(t, 2, hit)
   112  }
   113  
   114  func TestRoute3(t *testing.T) {
   115  	buff := bytes.NewBufferString("")
   116  	recorder := httptest.NewRecorder()
   117  	recorder.Body = buff
   118  
   119  	hit := -1
   120  
   121  	m := NewRoute()
   122  	r := NewRoute()
   123  	r.Mount("/api/v1", m)
   124  
   125  	m.Group("/repos", func() {
   126  		m.Group("/{username}/{reponame}", func() {
   127  			m.Group("/branch_protections", func() {
   128  				m.Get("", func(resp http.ResponseWriter, req *http.Request) {
   129  					hit = 0
   130  				})
   131  				m.Post("", func(resp http.ResponseWriter, req *http.Request) {
   132  					hit = 1
   133  				})
   134  				m.Group("/{name}", func() {
   135  					m.Get("", func(resp http.ResponseWriter, req *http.Request) {
   136  						hit = 2
   137  					})
   138  					m.Patch("", func(resp http.ResponseWriter, req *http.Request) {
   139  						hit = 3
   140  					})
   141  					m.Delete("", func(resp http.ResponseWriter, req *http.Request) {
   142  						hit = 4
   143  					})
   144  				})
   145  			})
   146  		})
   147  	})
   148  
   149  	req, err := http.NewRequest("GET", "http://localhost:8000/api/v1/repos/gitea/gitea/branch_protections", nil)
   150  	assert.NoError(t, err)
   151  	r.ServeHTTP(recorder, req)
   152  	assert.EqualValues(t, http.StatusOK, recorder.Code)
   153  	assert.EqualValues(t, 0, hit)
   154  
   155  	req, err = http.NewRequest("POST", "http://localhost:8000/api/v1/repos/gitea/gitea/branch_protections", nil)
   156  	assert.NoError(t, err)
   157  	r.ServeHTTP(recorder, req)
   158  	assert.EqualValues(t, http.StatusOK, recorder.Code, http.StatusOK)
   159  	assert.EqualValues(t, 1, hit)
   160  
   161  	req, err = http.NewRequest("GET", "http://localhost:8000/api/v1/repos/gitea/gitea/branch_protections/master", nil)
   162  	assert.NoError(t, err)
   163  	r.ServeHTTP(recorder, req)
   164  	assert.EqualValues(t, http.StatusOK, recorder.Code)
   165  	assert.EqualValues(t, 2, hit)
   166  
   167  	req, err = http.NewRequest("PATCH", "http://localhost:8000/api/v1/repos/gitea/gitea/branch_protections/master", nil)
   168  	assert.NoError(t, err)
   169  	r.ServeHTTP(recorder, req)
   170  	assert.EqualValues(t, http.StatusOK, recorder.Code)
   171  	assert.EqualValues(t, 3, hit)
   172  
   173  	req, err = http.NewRequest("DELETE", "http://localhost:8000/api/v1/repos/gitea/gitea/branch_protections/master", nil)
   174  	assert.NoError(t, err)
   175  	r.ServeHTTP(recorder, req)
   176  	assert.EqualValues(t, http.StatusOK, recorder.Code)
   177  	assert.EqualValues(t, 4, hit)
   178  }