summaryrefslogtreecommitdiff
path: root/contrib/sharedhost/replacement_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/sharedhost/replacement_test.go')
-rw-r--r--contrib/sharedhost/replacement_test.go57
1 files changed, 57 insertions, 0 deletions
diff --git a/contrib/sharedhost/replacement_test.go b/contrib/sharedhost/replacement_test.go
new file mode 100644
index 0000000..cab80bb
--- /dev/null
+++ b/contrib/sharedhost/replacement_test.go
@@ -0,0 +1,57 @@
+package sharedhost_test
+
+import (
+ "context"
+ "net/url"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+
+ "tildegit.org/tjp/gus"
+ "tildegit.org/tjp/gus/contrib/sharedhost"
+)
+
+func TestReplaceTilde(t *testing.T) {
+ tests := []struct {
+ replacement string
+ inputURL string
+ replacedPath string
+ }{
+ {
+ replacement: "users/",
+ inputURL: "gemini://domain.com/~username/foo/bar",
+ replacedPath: "/users/username/foo/bar",
+ },
+ {
+ replacement: "people-",
+ inputURL: "gemini://domain.com/non/match",
+ replacedPath: "/non/match",
+ },
+ {
+ replacement: "people-",
+ inputURL: "gemini://domain.com/~someone/dir/file",
+ replacedPath: "/people-someone/dir/file",
+ },
+ }
+
+ for _, test := range tests {
+ t.Run(test.inputURL, func(t *testing.T) {
+ u, err := url.Parse(test.inputURL)
+ assert.Nil(t, err)
+
+ originalPath := u.Path
+
+ replacer := sharedhost.ReplaceTilde(test.replacement)
+ request := &gus.Request{URL: u}
+ handler := replacer(func(_ context.Context, request *gus.Request) *gus.Response {
+ assert.Equal(t, test.replacedPath, request.Path)
+ return &gus.Response{}
+ })
+
+ handler(context.Background(), request)
+
+ // original request was unmodified
+ assert.Equal(t, originalPath, request.Path)
+ })
+ }
+}