forked from ttacon/uri
-
Notifications
You must be signed in to change notification settings - Fork 1
/
builder_test.go
90 lines (74 loc) · 2.34 KB
/
builder_test.go
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package uri
import (
"fmt"
"net/url"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func Test_Builder(t *testing.T) {
t.Parallel()
tests := []struct {
uri, uriChanged string
name string
}{
{
"mailto://user@domain.com",
"http://yolo@newdomain.com:443",
"yolo",
},
{
"https://user@domain.com",
"http://yolo2@newdomain.com:443",
"yolo2",
},
}
t.Run("when building from existing URI", func(t *testing.T) {
for _, toPin := range tests {
test := toPin
t.Run(fmt.Sprintf("change to %q", test.uriChanged), func(t *testing.T) {
t.Parallel()
auri, err := Parse(test.uri)
require.NoErrorf(t, err,
"failed to parse uri: %v", err,
)
nuri := auri.Builder().SetUserInfo(test.name).SetHost("newdomain.com").SetScheme("http").SetPort("443")
zuri, ok := nuri.(URI)
require.True(t, ok)
assert.Equal(t, "//"+test.name+"@newdomain.com:443", zuri.Authority().String())
assert.Equal(t, "443", nuri.URI().Authority().Port())
val := nuri.String()
assert.Equalf(t, val, test.uriChanged,
"val: %#v", val,
"test: %#v", test.uriChanged,
"values don't match: %v != %v (actual: %#v, expected: %#v)", val, test.uriChanged,
)
assert.Equal(t, "http", nuri.URI().Scheme())
_ = nuri.SetPath("/abcd")
assert.Equal(t, "/abcd", nuri.URI().Authority().Path())
_ = nuri.SetQuery("a=b&x=5").SetFragment("chapter")
assert.Equal(t, url.Values{"a": []string{"b"}, "x": []string{"5"}}, nuri.URI().Query())
assert.Equal(t, "chapter", nuri.URI().Fragment())
assert.Equal(t, test.uriChanged+"/abcd?a=b&x=5#chapter", nuri.URI().String())
assert.Equal(t, test.uriChanged+"/abcd?a=b&x=5#chapter", nuri.String())
})
}
})
t.Run("when building from scratch", func(t *testing.T) {
u, _ := Parse("http:")
b := u.Builder()
require.Empty(t, u.Authority())
assert.Equal(t, "", u.Authority().UserInfo())
b = b.SetUserInfo("user:pwd").SetHost("newdomain").SetPort("444")
assert.Equal(t, "http://user:pwd@newdomain:444", b.String())
})
t.Run("when overriding with an invalid value", func(t *testing.T) {
const uriRaw = "https://host:8080/a?query=value#fragment"
u, err := Parse(uriRaw)
require.NoError(t, err)
b := u.Builder()
b.SetPort("X8080")
auth := u.Authority()
require.Error(t, auth.Validate())
})
}