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