func AssertRequest()

in pkg/api/mock/request.go [44:100]


func AssertRequest(want *RequestAssertion, req *http.Request) error {
	var merr = multierror.NewPrefixed("request assertion")
	if req.Body != nil || want.Body != nil {
		if !reflect.DeepEqual(want.Body, req.Body) {
			var wantB []byte
			if want.Body != nil {
				wantB, _ = io.ReadAll(
					io.TeeReader(want.Body, new(bytes.Buffer)),
				)
			}
			var gotB []byte
			if req.Body != nil {
				gotB, _ = io.ReadAll(
					io.TeeReader(req.Body, new(bytes.Buffer)),
				)
			}
			if !reflect.DeepEqual(wantB, gotB) {
				merr = merr.Append(
					fmt.Errorf("actual body %s, expected %s", gotB, wantB),
				)
			}
		}
	}

	if !reflect.DeepEqual(want.Header, req.Header) {
		merr = merr.Append(fmt.Errorf(
			"headers do not match (expected != actual): %v != %v", want.Header, req.Header),
		)
	}

	if !reflect.DeepEqual(want.Method, req.Method) {
		merr = merr.Append(fmt.Errorf(
			"methods do not match (expected != actual): %s != %s", want.Method, req.Method),
		)
	}

	if req.URL != nil {
		if !reflect.DeepEqual(want.Path, req.URL.Path) {
			merr = merr.Append(fmt.Errorf(
				"paths do not match (expected != actual): %s != %s", want.Path, req.URL.Path),
			)
		}
		if (len(req.URL.Query()) > 0 || len(want.Query) > 0) && !reflect.DeepEqual(want.Query, req.URL.Query()) {
			merr = merr.Append(fmt.Errorf(
				"query does not match (expected != actual): %s != %s", want.Query, req.URL.Query()),
			)
		}
	}

	if !reflect.DeepEqual(want.Host, req.Host) {
		merr = merr.Append(fmt.Errorf(
			"hosts do not match (expected != actual): %s != %s", want.Host, req.Host),
		)
	}

	return merr.ErrorOrNil()
}