1 package matchers_test
2
3 import (
4 "net/http"
5 "net/http/httptest"
6
7 . "github.com/onsi/ginkgo/v2"
8 . "github.com/onsi/gomega"
9 )
10
11 var _ = Describe("HaveHTTPHeader", func() {
12 It("can match an HTTP header", func() {
13 resp := &http.Response{}
14 resp.Header = make(http.Header)
15 resp.Header.Add("fake-header", "fake value")
16 Expect(resp).To(HaveHTTPHeaderWithValue("fake-header", "fake value"))
17 })
18
19 It("can mismatch an HTTP header", func() {
20 resp := &http.Response{}
21 resp.Header = make(http.Header)
22 resp.Header.Add("fake-header", "fake value")
23 Expect(resp).NotTo(HaveHTTPHeaderWithValue("other-header", "fake value"))
24 Expect(resp).NotTo(HaveHTTPHeaderWithValue("fake-header", "other value"))
25 })
26
27 When("the header is set more than once", func() {
28 It("matches the first value and not the second", func() {
29 resp := &http.Response{}
30 resp.Header = make(http.Header)
31 resp.Header.Add("fake-header", "fake value1")
32 resp.Header.Add("fake-header", "fake value2")
33 Expect(resp).To(HaveHTTPHeaderWithValue("fake-header", "fake value1"))
34 Expect(resp).NotTo(HaveHTTPHeaderWithValue("fake-header", "fake value2"))
35 })
36 })
37
38 When("ACTUAL is *httptest.ResponseRecorder", func() {
39 It("can match an HTTP header", func() {
40 resp := &httptest.ResponseRecorder{}
41 resp.Header().Add("fake-header", "fake value")
42 Expect(resp).To(HaveHTTPHeaderWithValue("fake-header", "fake value"))
43 })
44
45 It("can mismatch an HTTP header", func() {
46 resp := &httptest.ResponseRecorder{}
47 resp.Header().Add("fake-header", "fake value")
48 Expect(resp).NotTo(HaveHTTPHeaderWithValue("other-header", "fake value"))
49 Expect(resp).NotTo(HaveHTTPHeaderWithValue("fake-header", "other value"))
50 })
51 })
52
53 When("ACTUAL is neither *http.Response nor *httptest.ResponseRecorder", func() {
54 It("errors", func() {
55 failures := InterceptGomegaFailures(func() {
56 Expect("foo").To(HaveHTTPHeaderWithValue("bar", "baz"))
57 })
58 Expect(failures).To(HaveLen(1))
59 Expect(failures[0]).To(Equal("HaveHTTPHeaderWithValue matcher expects *http.Response or *httptest.ResponseRecorder. Got:\n <string>: foo"))
60 })
61 })
62
63 When("EXPECTED VALUE is a matcher", func() {
64 It("can match an HTTP header", func() {
65 resp := &http.Response{}
66 resp.Header = make(http.Header)
67 resp.Header.Add("fake-header", "fake value")
68 Expect(resp).To(HaveHTTPHeaderWithValue("fake-header", ContainSubstring("value")))
69 })
70
71 It("can mismatch an HTTP header", func() {
72 resp := &http.Response{}
73 resp.Header = make(http.Header)
74 resp.Header.Add("fake-header", "fake value")
75 Expect(resp).NotTo(HaveHTTPHeaderWithValue("fake-header", ContainSubstring("foo")))
76 })
77 })
78
79 When("EXPECTED VALUE is something else", func() {
80 It("errors", func() {
81 failures := InterceptGomegaFailures(func() {
82 resp := &http.Response{}
83 Expect(resp).To(HaveHTTPHeaderWithValue("bar", 42))
84 })
85 Expect(failures).To(HaveLen(1))
86 Expect(failures[0]).To(Equal("HaveHTTPHeaderWithValue matcher must be passed a string or a GomegaMatcher. Got:\n <int>: 42"))
87 })
88 })
89
90 Describe("FailureMessage", func() {
91 When("matching a string", func() {
92 It("returns message", func() {
93 failures := InterceptGomegaFailures(func() {
94 resp := &http.Response{}
95 resp.Header = make(http.Header)
96 resp.Header.Add("fake-header", "fake value")
97 Expect(resp).To(HaveHTTPHeaderWithValue("fake-header", "other value"))
98 })
99 Expect(failures).To(HaveLen(1))
100 Expect(failures[0]).To(Equal(`HTTP header "fake-header":
101 Expected
102 <string>: fake value
103 to equal
104 <string>: other value`), failures[0])
105 })
106 })
107
108 When("matching a matcher", func() {
109 It("returns message", func() {
110 failures := InterceptGomegaFailures(func() {
111 resp := &http.Response{}
112 resp.Header = make(http.Header)
113 resp.Header.Add("fake-header", "fake value")
114 Expect(resp).To(HaveHTTPHeaderWithValue("fake-header", ContainSubstring("other")))
115 })
116 Expect(failures).To(HaveLen(1))
117 Expect(failures[0]).To(Equal(`HTTP header "fake-header":
118 Expected
119 <string>: fake value
120 to contain substring
121 <string>: other`), failures[0])
122 })
123 })
124 })
125
126 Describe("NegatedFailureMessage", func() {
127 When("matching a string", func() {
128 It("returns message", func() {
129 failures := InterceptGomegaFailures(func() {
130 resp := &http.Response{}
131 resp.Header = make(http.Header)
132 resp.Header.Add("fake-header", "fake value")
133 Expect(resp).NotTo(HaveHTTPHeaderWithValue("fake-header", "fake value"))
134 })
135 Expect(failures).To(HaveLen(1))
136 Expect(failures[0]).To(Equal(`HTTP header "fake-header":
137 Expected
138 <string>: fake value
139 not to equal
140 <string>: fake value`), failures[0])
141 })
142 })
143
144 When("matching a matcher", func() {
145 It("returns message", func() {
146 failures := InterceptGomegaFailures(func() {
147 resp := &http.Response{}
148 resp.Header = make(http.Header)
149 resp.Header.Add("fake-header", "fake value")
150 Expect(resp).NotTo(HaveHTTPHeaderWithValue("fake-header", ContainSubstring("value")))
151 })
152 Expect(failures).To(HaveLen(1))
153 Expect(failures[0]).To(Equal(`HTTP header "fake-header":
154 Expected
155 <string>: fake value
156 not to contain substring
157 <string>: value`), failures[0])
158 })
159 })
160 })
161 })
162
View as plain text