func TestBuildRequest_BuildHTTP_Files(t *testing.T) { cont, _ := ioutil.ReadFile("./client.go") reqWrtr := client.RequestWriterFunc(func(req client.Request, reg strfmt.Registry) error { req.SetFormParam("something", "some value") req.SetFileParam("file", "./client.go") req.SetQueryParam("hello", "world") req.SetPathParam("id", "1234") req.SetHeaderParam("X-Rate-Limit", "200") return nil }) r, _ := newRequest("GET", "/flats/{id}/", reqWrtr) r.SetHeaderParam(httpkit.HeaderContentType, httpkit.JSONMime) req, err := r.BuildHTTP(httpkit.JSONProducer(), nil) if assert.NoError(t, err) && assert.NotNil(t, req) { assert.Equal(t, "200", req.Header.Get("x-rate-limit")) assert.Equal(t, "world", req.URL.Query().Get("hello")) assert.Equal(t, "/flats/1234/", req.URL.Path) mediaType, params, err := mime.ParseMediaType(req.Header.Get(httpkit.HeaderContentType)) if assert.NoError(t, err) { assert.Equal(t, httpkit.MultipartFormMime, mediaType) boundary := params["boundary"] mr := multipart.NewReader(req.Body, boundary) frm, err := mr.ReadForm(1 << 20) if assert.NoError(t, err) { assert.Equal(t, "some value", frm.Value["something"][0]) mpff := frm.File["file"][0] mpf, _ := mpff.Open() assert.Equal(t, "client.go", mpff.Filename) actual, _ := ioutil.ReadAll(mpf) assert.Equal(t, cont, actual) } } } }
// NewAPI creates the default untyped API func NewAPI(spec *spec.Document) *API { return &API{ spec: spec, DefaultProduces: "application/json", DefaultConsumes: "application/json", consumers: map[string]httpkit.Consumer{ "application/json": httpkit.JSONConsumer(), }, producers: map[string]httpkit.Producer{ "application/json": httpkit.JSONProducer(), }, authenticators: make(map[string]httpkit.Authenticator), operations: make(map[string]httpkit.OperationHandler), ServeError: errors.ServeError, Models: make(map[string]func() interface{}), formats: strfmt.NewFormats(), } }
func TestBuildRequest_BuildHTTP_Form(t *testing.T) { reqWrtr := client.RequestWriterFunc(func(req client.Request, reg strfmt.Registry) error { req.SetFormParam("something", "some value") req.SetQueryParam("hello", "world") req.SetPathParam("id", "1234") req.SetHeaderParam("X-Rate-Limit", "200") return nil }) r, _ := newRequest("GET", "/flats/{id}/", reqWrtr) r.SetHeaderParam(httpkit.HeaderContentType, httpkit.JSONMime) req, err := r.BuildHTTP(httpkit.JSONProducer(), nil) if assert.NoError(t, err) && assert.NotNil(t, req) { assert.Equal(t, "200", req.Header.Get("x-rate-limit")) assert.Equal(t, "world", req.URL.Query().Get("hello")) assert.Equal(t, "/flats/1234/", req.URL.Path) expected := []byte("something=some+value") actual, _ := ioutil.ReadAll(req.Body) assert.Equal(t, expected, actual) } }
func TestBuildRequest_BuildHTTP_Payload(t *testing.T) { bd := []struct{ Name, Hobby string }{{"Tom", "Organ trail"}, {"John", "Bird watching"}} reqWrtr := client.RequestWriterFunc(func(req client.Request, reg strfmt.Registry) error { req.SetBodyParam(bd) req.SetQueryParam("hello", "world") req.SetPathParam("id", "1234") req.SetHeaderParam("X-Rate-Limit", "200") return nil }) r, _ := newRequest("GET", "/flats/{id}/", reqWrtr) r.SetHeaderParam(httpkit.HeaderContentType, httpkit.JSONMime) req, err := r.BuildHTTP(httpkit.JSONProducer(), nil) if assert.NoError(t, err) && assert.NotNil(t, req) { assert.Equal(t, "200", req.Header.Get("x-rate-limit")) assert.Equal(t, "world", req.URL.Query().Get("hello")) assert.Equal(t, "/flats/1234/", req.URL.Path) expectedBody, _ := json.Marshal(bd) actualBody, _ := ioutil.ReadAll(req.Body) assert.Equal(t, append(expectedBody, '\n'), actualBody) } }
// New creates a new default runtime for a swagger api client. func New(swaggerSpec *spec.Document, host string) *Runtime { var rt Runtime rt.DefaultMediaType = httpkit.JSONMime rt.Consumers = map[string]httpkit.Consumer{ httpkit.JSONMime: httpkit.JSONConsumer(), } rt.Producers = map[string]httpkit.Producer{ httpkit.JSONMime: httpkit.JSONProducer(), } rt.Spec = swaggerSpec rt.Transport = http.DefaultTransport rt.client = http.DefaultClient rt.Host = host rt.BasePath = swaggerSpec.BasePath() rt.methodsAndPaths = make(map[string]methodAndPath) for mth, pathItem := range rt.Spec.Operations() { for pth, op := range pathItem { rt.methodsAndPaths[op.ID] = methodAndPath{mth, pth} } } return &rt }
func configureAPI(api *operations.SwaggerPetstoreAPI) { // configure the api here api.ServeError = errors.ServeError api.JSONConsumer = httpkit.JSONConsumer() api.XMLConsumer = httpkit.ConsumerFunc(func(r io.Reader, target interface{}) error { return errors.NotImplemented("xml consumer has not yet been implemented") }) api.JSONProducer = httpkit.JSONProducer() api.XMLProducer = httpkit.ProducerFunc(func(w io.Writer, data interface{}) error { return errors.NotImplemented("xml producer has not yet been implemented") }) api.APIKeyAuth = func(token string) (*models.User, error) { return nil, errors.NotImplemented("api key auth apiKey from header has not yet been implemented") } api.AddPetHandler = pet.AddPetHandlerFunc(func(params pet.AddPetParams, principal *models.User) error { return errors.NotImplemented("operation addPet has not yet been implemented") }) api.CreateUserHandler = user.CreateUserHandlerFunc(func(params user.CreateUserParams) error { return errors.NotImplemented("operation createUser has not yet been implemented") }) api.CreateUsersWithArrayInputHandler = user.CreateUsersWithArrayInputHandlerFunc(func(params user.CreateUsersWithArrayInputParams) error { return errors.NotImplemented("operation createUsersWithArrayInput has not yet been implemented") }) api.LogoutUserHandler = user.LogoutUserHandlerFunc(func() error { return errors.NotImplemented("operation logoutUser has not yet been implemented") }) api.UpdateUserHandler = user.UpdateUserHandlerFunc(func(params user.UpdateUserParams) error { return errors.NotImplemented("operation updateUser has not yet been implemented") }) api.FindPetsByStatusHandler = pet.FindPetsByStatusHandlerFunc(func(params pet.FindPetsByStatusParams, principal *models.User) ([]models.Pet, error) { return nil, errors.NotImplemented("operation findPetsByStatus has not yet been implemented") }) api.LoginUserHandler = user.LoginUserHandlerFunc(func(params user.LoginUserParams) (string, error) { return "", errors.NotImplemented("operation loginUser has not yet been implemented") }) api.GetPetByIDHandler = pet.GetPetByIDHandlerFunc(func(params pet.GetPetByIDParams, principal *models.User) (*models.Pet, error) { return nil, errors.NotImplemented("operation getPetById has not yet been implemented") }) api.GetOrderByIDHandler = store.GetOrderByIDHandlerFunc(func(params store.GetOrderByIDParams) (*models.Order, error) { return nil, errors.NotImplemented("operation getOrderById has not yet been implemented") }) api.GetUserByNameHandler = user.GetUserByNameHandlerFunc(func(params user.GetUserByNameParams) (*models.User, error) { return nil, errors.NotImplemented("operation getUserByName has not yet been implemented") }) api.DeletePetHandler = pet.DeletePetHandlerFunc(func(params pet.DeletePetParams, principal *models.User) error { return errors.NotImplemented("operation deletePet has not yet been implemented") }) api.DeleteUserHandler = user.DeleteUserHandlerFunc(func(params user.DeleteUserParams) error { return errors.NotImplemented("operation deleteUser has not yet been implemented") }) api.UpdatePetHandler = pet.UpdatePetHandlerFunc(func(params pet.UpdatePetParams, principal *models.User) error { return errors.NotImplemented("operation updatePet has not yet been implemented") }) api.CreateUsersWithListInputHandler = user.CreateUsersWithListInputHandlerFunc(func(params user.CreateUsersWithListInputParams) error { return errors.NotImplemented("operation createUsersWithListInput has not yet been implemented") }) api.PlaceOrderHandler = store.PlaceOrderHandlerFunc(func(params store.PlaceOrderParams) (*models.Order, error) { return nil, errors.NotImplemented("operation placeOrder has not yet been implemented") }) api.UpdatePetWithFormHandler = pet.UpdatePetWithFormHandlerFunc(func(params pet.UpdatePetWithFormParams, principal *models.User) error { return errors.NotImplemented("operation updatePetWithForm has not yet been implemented") }) api.FindPetsByTagsHandler = pet.FindPetsByTagsHandlerFunc(func(params pet.FindPetsByTagsParams, principal *models.User) ([]models.Pet, error) { return nil, errors.NotImplemented("operation findPetsByTags has not yet been implemented") }) api.DeleteOrderHandler = store.DeleteOrderHandlerFunc(func(params store.DeleteOrderParams) error { return errors.NotImplemented("operation deleteOrder has not yet been implemented") }) }