@@ -53,6 +53,76 @@ func TestResponderFromResponse(t *testing.T) {
53
53
}
54
54
}
55
55
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
+
56
126
func TestNewNotFoundResponder (t * testing.T ) {
57
127
responder := NewNotFoundResponder (func (args ... interface {}) {})
58
128
0 commit comments