httpexpect icon indicating copy to clipboard operation
httpexpect copied to clipboard

WithPath formats very large or very small floating point numbers in scientific notation

Open alvii147 opened this issue 1 year ago • 1 comments

Let's set up a simple server that responds to one endpoint /api/{value}, where value is a floating point path parameter:

// main.go
package main

import (
	"fmt"
	"net/http"
)

func handler() http.Handler {
	mux := http.NewServeMux()
	mux.HandleFunc("/api/{value}", func(w http.ResponseWriter, r *http.Request) {
		fmt.Println(r.URL)
		w.WriteHeader(http.StatusOK)
	})

	return mux
}

func main() {
	http.ListenAndServe(":8080", handler())
}

All this server does is print the requested URL. Now let's use WithPath to test this endpoint with a very large value for value:

// main_test.go
package main

import (
	"net/http"
	"net/http/httptest"
	"testing"

	"github.com/gavv/httpexpect/v2"
)

func TestMainHandlers(t *testing.T) {
	server := httptest.NewServer(handler())
	t.Cleanup(server.Close)

	e := httpexpect.Default(t, server.URL)
	e.
		GET("/api/{value}").
		WithPath("value", 5000000.0).
		Expect().
		Status(http.StatusOK)
}

Running go test, this is what we get:

$ go test
/api/5e+06
PASS
ok      github.com/alvii147/httpexpectplayground        0.309s

Notice that the 5000000.0 has been converted to 5e+06. This is not ideal. I think we should avoid scientific notation in these cases.

alvii147 avatar Oct 05 '24 13:10 alvii147

@gavv I can fix this if you agree this is behaviour is not ideal

alvii147 avatar Oct 05 '24 13:10 alvii147

Landed, thanks

gavv avatar Mar 02 '25 16:03 gavv