summaryrefslogtreecommitdiff
path: root/contrib/sharedhost/replacement_test.go
blob: 67c3754ae2b4c071f97e8d594d7d367f022120b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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(gus.HandlerFunc(func(_ context.Context, request *gus.Request) *gus.Response {
				assert.Equal(t, test.replacedPath, request.Path)
				return &gus.Response{}
			}))

			handler.Handle(context.Background(), request)

			// original request was unmodified
			assert.Equal(t, originalPath, request.Path)
		})
	}
}