github.com/onsi/gomega@v1.32.0/matchers/have_http_header_with_value_matcher_test.go (about) 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 })