package
0.11.0
Repository: https://github.com/sublime-security/gadgeto.git
Documentation: pkg.go.dev

# README

iffy helps you test http handlers.

We assume JSON for any marshaling/unmarshaling. If you use something else, that's fine, but the advanced features (responseObject + templating) will not work.

Example:

func TestFoo(t *testing.T) {

    // Instantiate & configure anything that implements http.Handler
    r := gin.Default()
    r.GET("/hello", tonic.Handler(helloHandler, 200))
    r.POST("/foo", tonic.Handler(newFoo, 201))
    r.DELETE("/foo/:fooid", tonic.Handler(delFoo, 204))

    tester := iffy.NewTester(t, r)

    // Variadic list of checker functions = func(r *http.Response, body string, responseObject interface{}) error
    //
    // Checkers can use closures to trap checker-specific configs -> ExpectStatus(200)
    // Some are provided in the iffy package, but you can use your own Checker functions
    tester.AddCall("helloworld", "GET", "/hello?who=world", "").Checkers(iffy.ExpectStatus(200), iffy.ExpectJSONFields("msg", "bla"))
    tester.AddCall("badhello", "GET", "/hello", "").Checkers(iffy.ExpectStatus(400))

    // Optionally, pass an instantiated response object ( &Foo{} )
    // The response body will be unmarshaled into it, then it will be presented to the Checker functions (parameter 'responseObject')
    // That way your custom checkers can directly use your business objects (ExpectValidFoo)
    tester.AddCall("createfoo", "POST", "/foo", `{"bar": "baz"}`).ResponseObject(&Foo{}).Checkers(iffy.ExpectStatus(201), ExpectValidFoo)

    // You can template query string and/or body using partial results from previous calls
    // e.g.: delete the object that was created in a previous step
    tester.AddCall("deletefoo", "DELETE", "/foo/{{.createfoo.id}}", "").Checkers(iffy.ExpectStatus(204))

    tester.Run()

}

For a real-life example, see https://github.com/loopfz/gadgeto/blob/master/tonic/tonic_test.go