@@ -53,6 +53,76 @@ func TestResponderFromResponse(t *testing.T) {
5353 }
5454}
5555
56+ func TestResponderFromResponses (t * testing.T ) {
57+ jsonResponse , err := NewJsonResponse (200 , map [string ]string {"test" : "toto" })
58+ if err != nil {
59+ t .Errorf ("NewJsonResponse failed: %s" , err )
60+ }
61+
62+ responder := ResponderFromMultipleResponses (
63+ []* http.Response {
64+ jsonResponse ,
65+ NewStringResponse (200 , "hello world" ),
66+ },
67+ )
68+
69+ req , err := http .NewRequest (http .MethodGet , testURL , nil )
70+ if err != nil {
71+ t .Fatal ("Error creating request" )
72+ }
73+ response1 , err := responder (req )
74+ if err != nil {
75+ t .Error ("Error should be nil" )
76+ }
77+
78+ testURLWithQuery := testURL + "?a=1"
79+ req , err = http .NewRequest (http .MethodGet , testURLWithQuery , nil )
80+ if err != nil {
81+ t .Fatal ("Error creating request" )
82+ }
83+ response2 , err := responder (req )
84+ if err != nil {
85+ t .Error ("Error should be nil" )
86+ }
87+
88+ // Body should be the same for both responses
89+ assertBody (t , response1 , `{"test":"toto"}` )
90+ assertBody (t , response2 , "hello world" )
91+
92+ // Request should be non-nil and different for each response
93+ if response1 .Request != nil && response2 .Request != nil {
94+ if response1 .Request .URL .String () != testURL {
95+ t .Errorf ("Expected request url %s, got: %s" , testURL , response1 .Request .URL .String ())
96+ }
97+ if response2 .Request .URL .String () != testURLWithQuery {
98+ t .Errorf ("Expected request url %s, got: %s" , testURLWithQuery , response2 .Request .URL .String ())
99+ }
100+ } else {
101+ t .Error ("response.Request should not be nil" )
102+ }
103+
104+ // ensure we can't call the responder more than the number of responses it embeds
105+ _ , err = responder (req )
106+ if err == nil {
107+ t .Error ("Error should not be nil" )
108+ } else if err .Error () != "not enough responses provided: responder called 3 time(s) but 2 response(s) provided" {
109+ t .Error ("Invalid error message" )
110+ }
111+
112+ // fn usage
113+ responder = ResponderFromMultipleResponses ([]* http.Response {}, func (args ... interface {}) {})
114+ _ , err = responder (req )
115+ if err == nil {
116+ t .Error ("Error should not be nil" )
117+ } else if err .Error () != "not enough responses provided: responder called 1 time(s) but 0 response(s) provided" {
118+ t .Errorf ("Invalid error message" )
119+ } else if ne , ok := err .(internal.StackTracer ); ! ok {
120+ t .Errorf (`err type mismatch, got %T, expected internal.StackTracer` , err )
121+ } else if ne .CustomFn == nil {
122+ t .Error (`ne.CustomFn should not be nil` )
123+ }
124+ }
125+
56126func TestNewNotFoundResponder (t * testing.T ) {
57127 responder := NewNotFoundResponder (func (args ... interface {}) {})
58128
0 commit comments