@@ -14,10 +14,14 @@ import (
1414 . "github.com/onsi/gomega"
1515)
1616
17- type hoverflySpyStub struct {}
17+ type hoverflySpyStub struct {
18+ savedRequest * models.RequestDetails
19+ savedResponse * models.ResponseDetails
20+ savedArguments * modes.ModeArguments
21+ }
1822
1923// DoRequest - Stub implementation of modes.HoverflySpy interface
20- func (this hoverflySpyStub ) DoRequest (request * http.Request ) (* http.Response , * time.Duration , error ) {
24+ func (this * hoverflySpyStub ) DoRequest (request * http.Request ) (* http.Response , * time.Duration , error ) {
2125 response := & http.Response {}
2226 if request .Host == "error.com" {
2327 return nil , nil , fmt .Errorf ("Could not reach error.com" )
@@ -30,7 +34,7 @@ func (this hoverflySpyStub) DoRequest(request *http.Request) (*http.Response, *t
3034 return response , & duration , nil
3135}
3236
33- func (this hoverflySpyStub ) GetResponse (requestDetails models.RequestDetails ) (* models.ResponseDetails , * errors.HoverflyError ) {
37+ func (this * hoverflySpyStub ) GetResponse (requestDetails models.RequestDetails ) (* models.ResponseDetails , * errors.HoverflyError ) {
3438 if requestDetails .Destination == "positive-match.com" {
3539 return & models.ResponseDetails {
3640 Status : 200 ,
@@ -42,22 +46,25 @@ func (this hoverflySpyStub) GetResponse(requestDetails models.RequestDetails) (*
4246 }
4347}
4448
45- func (this hoverflySpyStub ) ApplyMiddleware (pair models.RequestResponsePair ) (models.RequestResponsePair , error ) {
49+ func (this * hoverflySpyStub ) ApplyMiddleware (pair models.RequestResponsePair ) (models.RequestResponsePair , error ) {
4650 if pair .Request .Path == "middleware-error" {
4751 return pair , fmt .Errorf ("middleware-error" )
4852 }
4953 return pair , nil
5054}
5155
52- func (this hoverflySpyStub ) Save (request * models.RequestDetails , response * models.ResponseDetails , arguments * modes.ModeArguments ) error {
56+ func (this * hoverflySpyStub ) Save (request * models.RequestDetails , response * models.ResponseDetails , arguments * modes.ModeArguments ) error {
57+ this .savedRequest = request
58+ this .savedResponse = response
59+ this .savedArguments = arguments
5360 return nil
5461}
5562
5663func Test_SpyMode_WhenGivenAMatchingRequestItReturnsTheCorrectResponse (t * testing.T ) {
5764 RegisterTestingT (t )
5865
5966 unit := & modes.SpyMode {
60- Hoverfly : hoverflySpyStub {},
67+ Hoverfly : & hoverflySpyStub {},
6168 }
6269
6370 request := models.RequestDetails {
@@ -74,7 +81,7 @@ func Test_SpyMode_WhenGivenANonMatchingRequestItWillMakeTheRequestAndReturnIt(t
7481 RegisterTestingT (t )
7582
7683 unit := & modes.SpyMode {
77- Hoverfly : hoverflySpyStub {},
84+ Hoverfly : & hoverflySpyStub {},
7885 }
7986
8087 requestDetails := models.RequestDetails {
@@ -100,7 +107,7 @@ func Test_SpyMode_WhenGivenAMatchingRequesAndMiddlewareFaislItReturnsAnError(t *
100107 RegisterTestingT (t )
101108
102109 unit := & modes.SpyMode {
103- Hoverfly : hoverflySpyStub {},
110+ Hoverfly : & hoverflySpyStub {},
104111 }
105112
106113 request := models.RequestDetails {
@@ -124,7 +131,7 @@ func Test_SpyMode_ShouldReturnErrorOnRemoteServiceCall(t *testing.T) {
124131 RegisterTestingT (t )
125132
126133 unit := & modes.SpyMode {
127- Hoverfly : hoverflySpyStub {},
134+ Hoverfly : & hoverflySpyStub {},
128135 }
129136
130137 requestDetails := models.RequestDetails {
@@ -147,3 +154,55 @@ func Test_SpyMode_ShouldReturnErrorOnRemoteServiceCall(t *testing.T) {
147154 Expect (string (responseBody )).To (ContainSubstring ("Could not reach error.com" ))
148155
149156}
157+
158+ func Test_SpyMode_OnCacheMiss_WhenCaptureOnMissEnabled_SavesRequestAndResponse (t * testing.T ) {
159+ RegisterTestingT (t )
160+
161+ stub := & hoverflySpyStub {}
162+ unit := & modes.SpyMode {
163+ Hoverfly : stub ,
164+ Arguments : modes.ModeArguments {CaptureOnMiss : true },
165+ }
166+
167+ requestDetails := models.RequestDetails {
168+ Scheme : "http" ,
169+ Destination : "negative-match.com" ,
170+ }
171+
172+ request , err := http .NewRequest ("GET" , "http://negative-match.com" , nil )
173+ Expect (err ).To (BeNil ())
174+
175+ result , err := unit .Process (request , requestDetails )
176+ Expect (err ).To (BeNil ())
177+ Expect (result .Response .StatusCode ).To (Equal (200 ))
178+
179+ Expect (stub .savedRequest ).ToNot (BeNil ())
180+ Expect (stub .savedResponse ).ToNot (BeNil ())
181+ Expect (stub .savedResponse .Status ).To (Equal (200 ))
182+ Expect (stub .savedResponse .Body ).To (Equal ("test" ))
183+ }
184+
185+ func Test_SpyMode_OnCacheMiss_WhenCaptureOnMissDisabled_DoesNotSave (t * testing.T ) {
186+ RegisterTestingT (t )
187+
188+ stub := & hoverflySpyStub {}
189+ unit := & modes.SpyMode {
190+ Hoverfly : stub ,
191+ Arguments : modes.ModeArguments {CaptureOnMiss : false },
192+ }
193+
194+ requestDetails := models.RequestDetails {
195+ Scheme : "http" ,
196+ Destination : "negative-match.com" ,
197+ }
198+
199+ request , err := http .NewRequest ("GET" , "http://negative-match.com" , nil )
200+ Expect (err ).To (BeNil ())
201+
202+ result , err := unit .Process (request , requestDetails )
203+ Expect (err ).To (BeNil ())
204+ Expect (result .Response .StatusCode ).To (Equal (200 ))
205+
206+ Expect (stub .savedRequest ).To (BeNil ())
207+ Expect (stub .savedResponse ).To (BeNil ())
208+ }
0 commit comments