// ShowBottleOK Show runs the method Show of the given controller with the given parameters. // It returns the response writer so it's possible to inspect the response headers and the media type struct written to the response. // If ctx is nil then context.Background() is used. // If service is nil then a default service is created. func ShowBottleOK(t *testing.T, ctx context.Context, service *goa.Service, ctrl app.BottleController, id int) (http.ResponseWriter, *app.Bottle) { // Setup service var ( logBuf bytes.Buffer resp interface{} respSetter goatest.ResponseSetterFunc = func(r interface{}) { resp = r } ) if service == nil { service = goatest.Service(&logBuf, respSetter) } else { logger := log.New(&logBuf, "", log.Ltime) service.WithLogger(goa.NewLogger(logger)) newEncoder := func(io.Writer) goa.Encoder { return respSetter } service.Encoder = goa.NewHTTPEncoder() // Make sure the code ends up using this decoder service.Encoder.Register(newEncoder, "*/*") } // Setup request context rw := httptest.NewRecorder() u := &url.URL{ Path: fmt.Sprintf("/bottles/%v", id), } req, err := http.NewRequest("GET", u.String(), nil) if err != nil { panic("invalid test " + err.Error()) // bug } prms := url.Values{} prms["id"] = []string{fmt.Sprintf("%v", id)} if ctx == nil { ctx = context.Background() } goaCtx := goa.NewContext(goa.WithAction(ctx, "BottleTest"), rw, req, prms) showCtx, err := app.NewShowBottleContext(goaCtx, service) if err != nil { panic("invalid test data " + err.Error()) // bug } // Perform action err = ctrl.Show(showCtx) // Validate response if err != nil { t.Fatalf("controller returned %s, logs:\n%s", err, logBuf.String()) } if rw.Code != 200 { t.Errorf("invalid response status code: got %+v, expected 200", rw.Code) } var mt *app.Bottle if resp != nil { var ok bool mt, ok = resp.(*app.Bottle) if !ok { t.Errorf("invalid response media: got %+v, expected instance of app.Bottle", resp) } err = mt.Validate() if err != nil { t.Errorf("invalid response media type: %s", err) } } // Return results return rw, mt }
// CreateBottleCreated Create runs the method Create of the given controller with the given parameters and payload. // It returns the response writer so it's possible to inspect the response headers. // If ctx is nil then context.Background() is used. // If service is nil then a default service is created. func CreateBottleCreated(t *testing.T, ctx context.Context, service *goa.Service, ctrl app.BottleController, payload *app.CreateBottlePayload) http.ResponseWriter { // Setup service var ( logBuf bytes.Buffer resp interface{} respSetter goatest.ResponseSetterFunc = func(r interface{}) { resp = r } ) if service == nil { service = goatest.Service(&logBuf, respSetter) } else { logger := log.New(&logBuf, "", log.Ltime) service.WithLogger(goa.NewLogger(logger)) newEncoder := func(io.Writer) goa.Encoder { return respSetter } service.Encoder = goa.NewHTTPEncoder() // Make sure the code ends up using this decoder service.Encoder.Register(newEncoder, "*/*") } // Validate payload err := payload.Validate() if err != nil { e, ok := err.(*goa.Error) if !ok { panic(err) // bug } if e.Status != 201 { t.Errorf("unexpected payload validation error: %+v", e) } return nil } // Setup request context rw := httptest.NewRecorder() u := &url.URL{ Path: fmt.Sprintf("/bottles"), } req, err := http.NewRequest("POST", u.String(), nil) if err != nil { panic("invalid test " + err.Error()) // bug } prms := url.Values{} if ctx == nil { ctx = context.Background() } goaCtx := goa.NewContext(goa.WithAction(ctx, "BottleTest"), rw, req, prms) createCtx, err := app.NewCreateBottleContext(goaCtx, service) if err != nil { panic("invalid test data " + err.Error()) // bug } createCtx.Payload = payload // Perform action err = ctrl.Create(createCtx) // Validate response if err != nil { t.Fatalf("controller returned %s, logs:\n%s", err, logBuf.String()) } if rw.Code != 201 { t.Errorf("invalid response status code: got %+v, expected 201", rw.Code) } // Return results return rw }