// NewUpdateBottleContext parses the incoming request URL and body, performs validations and creates the // context used by the bottle controller update action. func NewUpdateBottleContext(c *goa.Context) (*UpdateBottleContext, error) { var err error ctx := UpdateBottleContext{Context: c} rawAccountID, ok := c.Get("accountID") if ok { if accountID, err2 := strconv.Atoi(rawAccountID); err2 == nil { ctx.AccountID = int(accountID) } else { err = goa.InvalidParamTypeError("accountID", rawAccountID, "integer", err) } } rawBottleID, ok := c.Get("bottleID") if ok { if bottleID, err2 := strconv.Atoi(rawBottleID); err2 == nil { ctx.BottleID = int(bottleID) } else { err = goa.InvalidParamTypeError("bottleID", rawBottleID, "integer", err) } } p, err := NewUpdateBottlePayload(c.Payload()) if err != nil { return nil, err } ctx.Payload = p return &ctx, err }
// NewCreateAccountContext parses the incoming request URL and body, performs validations and creates the // context used by the account controller create action. func NewCreateAccountContext(c *goa.Context) (*CreateAccountContext, error) { var err error ctx := CreateAccountContext{Context: c} p, err := NewCreateAccountPayload(c.Payload()) if err != nil { return nil, err } ctx.Payload = p return &ctx, err }
Describe("Get", func() { It(`returns "", false if not initialized`, func() { p := ctx.Get("foo") Ω(p).Should(Equal("")) }) }) Describe("GetMany", func() { It("returns nil if not initialized", func() { Ω(ctx.GetMany("foo")).Should(BeNil()) }) }) Describe("Payload", func() { It("returns nil if not initialized", func() { Ω(ctx.Payload()).Should(BeNil()) }) }) Context("with a request response", func() { const appName = "foo" var app goa.Service const resName = "res" const actName = "act" var handler, unmarshaler goa.Handler const reqBody = `"body"` const respStatus = 200 var respContent = []byte("response") var handleFunc goa.HandleFunc var rw http.ResponseWriter var request *http.Request
}) }) }) Context("with different payload types", func() { content := []byte(`{"hello": "world"}`) decodedContent := map[string]interface{}{"hello": "world"} BeforeEach(func() { r.Header.Set("Content-Type", "application/json") r.Body = ioutil.NopCloser(bytes.NewReader(content)) r.ContentLength = int64(len(content)) }) It("should work with application/json and load properly", func() { Ω(ctx.Payload()).Should(Equal(decodedContent)) }) Context("with an empty Content-Type", func() { BeforeEach(func() { delete(r.Header, "Content-Type") }) It("defaults to application/json and loads properly", func() { Ω(ctx.Payload()).Should(Equal(decodedContent)) }) }) Context("with a Content-Type of 'application/octet-stream' or any other", func() { BeforeEach(func() { r.Header.Set("Content-Type", "application/octet-stream")