Passed
Push — main ( 853831...e0857a )
by Acho
02:36
created

helpers.MakeRequestCapturingTestServer   A

Complexity

Conditions 4

Size

Total Lines 21
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 15
nop 3
dl 0
loc 21
rs 9.65
c 0
b 0
f 0
1
package helpers
2
3
import (
4
	"bytes"
5
	"context"
6
	"io/ioutil"
7
	"net/http"
8
	"net/http/httptest"
9
)
10
11
// MakeRequestCapturingTestServer creates an api server that captures the request object
12
func MakeRequestCapturingTestServer(responseCode int, responses [][]byte, requests *[]*http.Request) *httptest.Server {
13
	index := 0
14
	return httptest.NewServer(http.HandlerFunc(func(responseWriter http.ResponseWriter, request *http.Request) {
15
		clonedRequest := request.Clone(context.Background())
16
17
		// clone body
18
		body, err := ioutil.ReadAll(request.Body)
19
		if err != nil {
20
			panic(err)
21
		}
22
		request.Body = ioutil.NopCloser(bytes.NewReader(body))
23
		clonedRequest.Body = ioutil.NopCloser(bytes.NewReader(body))
24
25
		*requests = append(*requests, clonedRequest)
26
27
		responseWriter.WriteHeader(responseCode)
28
		_, err = responseWriter.Write(responses[index])
29
		if err != nil {
30
			panic(err)
31
		}
32
		index++
33
	}))
34
}
35