-
Notifications
You must be signed in to change notification settings - Fork 8
/
requests_test.go
130 lines (106 loc) · 4.07 KB
/
requests_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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package rata_test
import (
. "github.com/tedsuo/rata"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("Requests", func() {
var (
host string
requestGenerator *RequestGenerator
)
const (
PathWithSlash = "WithSlash"
PathWithoutSlash = "WithoutSlash"
PathWithParams = "WithParams"
)
JustBeforeEach(func() {
routes := Routes{
{Name: PathWithSlash, Method: "GET", Path: "/some-route"},
{Name: PathWithoutSlash, Method: "GET", Path: "some-route"},
{Name: PathWithParams, Method: "GET", Path: "/foo/:bar"},
}
requestGenerator = NewRequestGenerator(
host,
routes,
)
})
Describe("CreateRequest", func() {
Context("when the host does not have a trailing slash", func() {
BeforeEach(func() {
host = "http://example.com"
})
Context("when the path starts with a slash", func() {
It("generates a URL with one slash between the host and the path", func() {
request, err := requestGenerator.CreateRequest(PathWithSlash, Params{}, nil)
Expect(err).NotTo(HaveOccurred())
Expect(request.URL.String()).To(Equal("http://example.com/some-route"))
})
})
Context("when the path does not start with a slash", func() {
It("generates a URL with one slash between the host and the path", func() {
request, err := requestGenerator.CreateRequest(PathWithoutSlash, Params{}, nil)
Expect(err).NotTo(HaveOccurred())
Expect(request.URL.String()).To(Equal("http://example.com/some-route"))
})
})
})
Context("when host has a trailing slash", func() {
BeforeEach(func() {
host = "example.com/"
})
Context("when the path starts with a slash", func() {
It("generates a URL with one slash between the host and the path", func() {
request, err := requestGenerator.CreateRequest(PathWithSlash, Params{}, nil)
Expect(err).NotTo(HaveOccurred())
Expect(request.URL.String()).To(Equal("example.com/some-route"))
})
})
Context("when the path does not start with a slash", func() {
It("generates a URL with one slash between the host and the path", func() {
request, err := requestGenerator.CreateRequest(PathWithoutSlash, Params{}, nil)
Expect(err).NotTo(HaveOccurred())
Expect(request.URL.String()).To(Equal("example.com/some-route"))
})
})
})
Context("when using params that can be interpreted as path segments", func() {
Context("without a host", func() {
BeforeEach(func() {
host = ""
})
It("generates a URL with the slash encoded as %2F", func() {
request, err := requestGenerator.CreateRequest(PathWithParams, Params{"bar": "something/with/slashes"}, nil)
Expect(err).NotTo(HaveOccurred())
Expect(request.URL.String()).To(Equal("/foo/something%2Fwith%2Fslashes"))
})
})
Context("with a host", func() {
BeforeEach(func() {
host = "http://example.com/test"
})
Context("when the param has a slash", func() {
It("generates a URL with the slash encoded as %2F", func() {
request, err := requestGenerator.CreateRequest(PathWithParams, Params{"bar": "something/with/slashes"}, nil)
Expect(err).NotTo(HaveOccurred())
Expect(request.URL.String()).To(Equal("http://example.com/test/foo/something%2Fwith%2Fslashes"))
})
})
Context("when the param has a question mark", func() {
It("generates a URL with the question mark encoded as %3F", func() {
request, err := requestGenerator.CreateRequest(PathWithParams, Params{"bar": "something?with?question?marks"}, nil)
Expect(err).NotTo(HaveOccurred())
Expect(request.URL.String()).To(Equal("http://example.com/test/foo/something%3Fwith%3Fquestion%3Fmarks"))
})
})
Context("when the param has a pound sign", func() {
It("generates a URL with the pound sign encoded as %23", func() {
request, err := requestGenerator.CreateRequest(PathWithParams, Params{"bar": "something#with#pound#signs"}, nil)
Expect(err).NotTo(HaveOccurred())
Expect(request.URL.String()).To(Equal("http://example.com/test/foo/something%23with%23pound%23signs"))
})
})
})
})
})
})