55 "log"
66 "net/http"
77 "net/http/httptest"
8+ "strings"
89 "sync"
910 "testing"
1011
@@ -35,6 +36,7 @@ func New() *Mock {
3536func (m * Mock ) ServeHTTP (w http.ResponseWriter , r * http.Request ) {
3637 method := r .Method
3738 path := r .URL .Path
39+ mapKey := method + " " + path
3840 var mr * mockResponse
3941 m .Lock ()
4042 defer m .Unlock ()
@@ -47,7 +49,7 @@ func (m *Mock) ServeHTTP(w http.ResponseWriter, r *http.Request) {
4749 if mr == nil {
4850 w .WriteHeader (http .StatusNotFound )
4951 fmt .Fprintf (w , "%s not found" , path )
50- m .unmockedRequests [method + path ]++
52+ m .unmockedRequests [mapKey ]++
5153 return
5254 }
5355
@@ -57,10 +59,10 @@ func (m *Mock) ServeHTTP(w http.ResponseWriter, r *http.Request) {
5759
5860 var status int
5961 if len (mr .callbacks ) > 0 {
60- status = mr .callbacks [m .callCount [method + path ]](r )
62+ status = mr.callbacks [m.callCount [mapKey ]](r )
6163 }
6264
63- m .callCount [method + path ]++
65+ m .callCount [mapKey ]++
6466 if status != 0 {
6567 w .WriteHeader (status )
6668 }
@@ -133,34 +135,46 @@ func (m *Mock) Mock(path, resp string, callback ...func(*http.Request) int) *moc
133135
134136func (m * Mock ) AssertCallCount (tb testing.TB , method , path string , expected int ) {
135137 m .Lock ()
136- cnt , ok := m .callCount [method + path ]
138+ cnt , ok := m .callCount [method + " " + path ]
137139 if ! ok {
138140 tb .Errorf ("mocked but never called path: %s method: %s" , path , method )
139141 m .Unlock ()
140142 return
141143 }
142- m .assertCallCountCalled [method + path ] = true
144+ m .assertCallCountCalled [method + " " + path ] = true
143145 m .Unlock ()
144146 assert .Equal (tb , expected , cnt , path )
145147}
146148
147149func (m * Mock ) AssertCallCountAsserted (tb testing.TB ) {
148- for url , cnt := range m .callCount {
149- if _ , ok := m .assertCallCountCalled [url ]; ! ok {
150+ for request , cnt := range m .callCount {
151+ if _ , ok := m .assertCallCountCalled [request ]; ! ok {
152+ method := strings .Split (request , " " )[0 ]
153+ url := strings .Split (request , " " )[1 ]
150154 tb .Errorf ("url: %s is mocked but never asserted. It was called %d times" , url , cnt )
155+ tb .Errorf (`httpMock.AssertCallCount(t, "%s", "%s", %d)` , method , url , cnt )
156+
151157 }
152158 }
153159}
154160
155161func (m * Mock ) AssertNoMissingMocks (tb testing.TB ) {
156- for url , cnt := range m .unmockedRequests {
157- tb .Errorf ("url: %s is called but not mocked. It was called %d times" , url , cnt )
162+ for request , cnt := range m .unmockedRequests {
163+ method := strings .Split (request , " " )[0 ]
164+ url := strings .Split (request , " " )[1 ]
165+ tb .Errorf ("url: %s is called but not mocked. It was called %d times" , request , cnt )
166+ if method == "GET" {
167+ tb .Errorf (`httpMock.Mock("%s", "response")` , url )
168+ return
169+
170+ }
171+ tb .Errorf (`httpMock.Mock("%s", "response").SetMethod("%s")` , url , method )
158172 }
159173}
160174
161175func (m * Mock ) AssertMocksCalled (tb testing.TB ) {
162176 for _ , mr := range m .mockResponses {
163- if _ , ok := m .callCount [mr .method + mr .path ]; ! ok {
177+ if _ , ok := m .callCount [mr .method + " " + mr .path ]; ! ok {
164178 tb .Errorf ("%s %s mocked but never called." , mr .method , mr .path )
165179 }
166180 }
0 commit comments