mirror of https://github.com/go-gitea/gitea.git
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.
73 lines
1.8 KiB
73 lines
1.8 KiB
// Copyright 2017 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package test |
|
|
|
import ( |
|
"net/http" |
|
"net/http/httptest" |
|
"os" |
|
"path/filepath" |
|
"runtime" |
|
"strings" |
|
|
|
"code.gitea.io/gitea/modules/json" |
|
"code.gitea.io/gitea/modules/util" |
|
) |
|
|
|
// RedirectURL returns the redirect URL of a http response. |
|
// It also works for JSONRedirect: `{"redirect": "..."}` |
|
// FIXME: it should separate the logic of checking from header and JSON body |
|
func RedirectURL(resp http.ResponseWriter) string { |
|
loc := resp.Header().Get("Location") |
|
if loc != "" { |
|
return loc |
|
} |
|
if r, ok := resp.(*httptest.ResponseRecorder); ok { |
|
m := map[string]any{} |
|
err := json.Unmarshal(r.Body.Bytes(), &m) |
|
if err == nil { |
|
if loc, ok := m["redirect"].(string); ok { |
|
return loc |
|
} |
|
} |
|
} |
|
return "" |
|
} |
|
|
|
func ParseJSONError(buf []byte) (ret struct { |
|
ErrorMessage string `json:"errorMessage"` |
|
RenderFormat string `json:"renderFormat"` |
|
}, |
|
) { |
|
_ = json.Unmarshal(buf, &ret) |
|
return ret |
|
} |
|
|
|
func IsNormalPageCompleted(s string) bool { |
|
return strings.Contains(s, `<footer class="page-footer"`) && strings.Contains(s, `</html>`) |
|
} |
|
|
|
func MockVariableValue[T any](p *T, v ...T) (reset func()) { |
|
old := *p |
|
if len(v) > 0 { |
|
*p = v[0] |
|
} |
|
return func() { *p = old } |
|
} |
|
|
|
// SetupGiteaRoot Sets GITEA_ROOT if it is not already set and returns the value |
|
func SetupGiteaRoot() string { |
|
giteaRoot := os.Getenv("GITEA_ROOT") |
|
if giteaRoot != "" { |
|
return giteaRoot |
|
} |
|
_, filename, _, _ := runtime.Caller(0) |
|
giteaRoot = filepath.Dir(filepath.Dir(filepath.Dir(filename))) |
|
fixturesDir := filepath.Join(giteaRoot, "models", "fixtures") |
|
if exist, _ := util.IsDir(fixturesDir); !exist { |
|
panic("fixtures directory not found: " + fixturesDir) |
|
} |
|
_ = os.Setenv("GITEA_ROOT", giteaRoot) |
|
return giteaRoot |
|
}
|
|
|