httpexpect
httpexpect copied to clipboard
WithPath formats very large or very small floating point numbers in scientific notation
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.
@gavv I can fix this if you agree this is behaviour is not ideal
Landed, thanks