优化结构
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
package routepath
|
||||
|
||||
import "strings"
|
||||
|
||||
// Normalize removes only a complete configured router prefix. Paths
|
||||
// such as /administrator must not be shortened when the prefix is /admin.
|
||||
func Normalize(path, routerPrefix string) string {
|
||||
prefix := strings.TrimSuffix(strings.TrimSpace(routerPrefix), "/")
|
||||
if prefix == "" || prefix == "/" {
|
||||
return path
|
||||
}
|
||||
if path == prefix {
|
||||
return "/"
|
||||
}
|
||||
if strings.HasPrefix(path, prefix+"/") {
|
||||
return strings.TrimPrefix(path, prefix)
|
||||
}
|
||||
return path
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package routepath
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestNormalize(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
path string
|
||||
prefix string
|
||||
want string
|
||||
}{
|
||||
{name: "empty prefix", path: "/api/login", prefix: "", want: "/api/login"},
|
||||
{name: "configured prefix", path: "/admin/api/login", prefix: "/admin", want: "/api/login"},
|
||||
{name: "trailing slash prefix", path: "/admin/api/login", prefix: "/admin/", want: "/api/login"},
|
||||
{name: "prefix root", path: "/admin", prefix: "/admin", want: "/"},
|
||||
{name: "prefix boundary", path: "/administrator/api/login", prefix: "/admin", want: "/administrator/api/login"},
|
||||
{name: "already normalized", path: "/api/login", prefix: "/admin", want: "/api/login"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := Normalize(tt.path, tt.prefix); got != tt.want {
|
||||
t.Fatalf("Normalize(%q, %q) = %q, want %q", tt.path, tt.prefix, got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user