You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package main
import ( "bytes" "fmt" "io/ioutil" "net/http" )
// newResponse creates a new HTTP response with the given data.
func newResponse(statusCode int, body string) *http.Response { return &http.Response{ StatusCode: statusCode, Body: ioutil.NopCloser(bytes.NewBufferString(body)), } }
// matrixTripper mocks out RoundTrip and calls a registered handler instead.
type matrixTripper struct { handlers map[string]func(req *http.Request) (*http.Response, error) }
func newMatrixTripper() *matrixTripper { return &matrixTripper{ handlers: make(map[string]func(req *http.Request) (*http.Response, error)), } }
func (rt *matrixTripper) RoundTrip(req *http.Request) (*http.Response, error) { key := req.Method + " " + req.URL.Path h := rt.handlers[key] if h == nil { panic(fmt.Sprintf( "RoundTrip: Unhandled request: %s\nHandlers: %d", key, len(rt.handlers), )) } return h(req) }
func (rt *matrixTripper) Handle(method, path string, handler func(req *http.Request) (*http.Response, error)) { key := method + " " + path if _, exists := rt.handlers[key]; exists { panic(fmt.Sprintf("Test handler with key %s already exists", key)) } rt.handlers[key] = handler }
func (rt *matrixTripper) HandlePOSTFilter(userID string) { rt.Handle("POST", "/_matrix/client/r0/user/"+userID+"/filter", func(req *http.Request) (*http.Response, error) { return newResponse(200, `{ "filter_id":"abcdef" }`), nil }, ) }
func (rt *matrixTripper) ClearHandlers() { for k := range rt.handlers { delete(rt.handlers, k) } }
|