code.gitea.io/gitea@v1.22.3/services/context/base_test.go (about) 1 // Copyright 2024 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package context 5 6 import ( 7 "net/http" 8 "net/http/httptest" 9 "testing" 10 11 "code.gitea.io/gitea/modules/setting" 12 13 "github.com/stretchr/testify/assert" 14 ) 15 16 func TestRedirect(t *testing.T) { 17 req, _ := http.NewRequest("GET", "/", nil) 18 19 cases := []struct { 20 url string 21 keep bool 22 }{ 23 {"http://test", false}, 24 {"https://test", false}, 25 {"//test", false}, 26 {"/://test", true}, 27 {"/test", true}, 28 } 29 for _, c := range cases { 30 resp := httptest.NewRecorder() 31 b, cleanup := NewBaseContext(resp, req) 32 resp.Header().Add("Set-Cookie", (&http.Cookie{Name: setting.SessionConfig.CookieName, Value: "dummy"}).String()) 33 b.Redirect(c.url) 34 cleanup() 35 has := resp.Header().Get("Set-Cookie") == "i_like_gitea=dummy" 36 assert.Equal(t, c.keep, has, "url = %q", c.url) 37 } 38 39 req, _ = http.NewRequest("GET", "/", nil) 40 resp := httptest.NewRecorder() 41 req.Header.Add("HX-Request", "true") 42 b, cleanup := NewBaseContext(resp, req) 43 b.Redirect("/other") 44 cleanup() 45 assert.Equal(t, "/other", resp.Header().Get("HX-Redirect")) 46 assert.Equal(t, http.StatusNoContent, resp.Code) 47 }