func AddAddress(w http.ResponseWriter, req *http.Request, params martini.Params, enc encoding.Encoder, shop *cart.Shop) string { var address cart.CustomerAddress var c cart.Customer customerId := params["id"] if !bson.IsObjectIdHex(customerId) { apierror.GenerateError("invalid customer reference", nil, w, req) return "" } c.Id = bson.ObjectIdHex(customerId) c.ShopId = shop.Id if err := c.Get(); err != nil { apierror.GenerateError(err.Error(), err, w, req) return "" } defer req.Body.Close() data, err := ioutil.ReadAll(req.Body) if err != nil { apierror.GenerateError(err.Error(), err, w, req) return "" } if err = json.Unmarshal(data, &address); err != nil { apierror.GenerateError(err.Error(), err, w, req) return "" } // audit the address if err := address.Validate(); err != nil { apierror.GenerateError(err.Error(), err, w, req) return "" } addressId := bson.NewObjectId() address.Id = &addressId c.Addresses = append(c.Addresses, address) if err = c.Update(); err != nil { apierror.GenerateError(err.Error(), err, w, req) return "" } return encoding.Must(enc.Encode(address)) }
func Test_AddAccount(t *testing.T) { Convey("with shop identifier", t, func() { shopID := cart.InsertTestData() So(shopID, ShouldNotBeNil) val := shopID.Hex() qs := make(url.Values, 0) qs.Add("shop", val) response = httprunner.Req(AddAccount, "POST", "", "/shopify/account", &qs, nil, cart.Shop{}) So(response.Code, ShouldEqual, 500) So(json.Unmarshal(response.Body.Bytes(), &apierror.ApiErr{}), ShouldBeNil) cust := cart.Customer{ ShopId: *shopID, FirstName: "Alex", LastName: "Ninneman", } addr := cart.CustomerAddress{} addr.Address1 = "Test" response = httprunner.Req(AddAccount, "POST", "", "/shopify/account", &qs, nil, addr) So(response.Code, ShouldEqual, 500) So(json.Unmarshal(response.Body.Bytes(), &apierror.ApiErr{}), ShouldBeNil) response = httprunner.Req(AddAccount, "POST", "", "/shopify/account", &qs, nil, cust) So(response.Code, ShouldEqual, 500) So(json.Unmarshal(response.Body.Bytes(), &apierror.ApiErr{}), ShouldBeNil) cust.Email = time.Now().Format(time.RFC3339Nano) + "@gmail.com" response = httprunner.JsonRequest("POST", "/shopify/account", &qs, nil, AddAccount) So(response.Code, ShouldEqual, 500) So(json.Unmarshal(response.Body.Bytes(), &apierror.ApiErr{}), ShouldBeNil) cust.Password = "******" response = httprunner.JsonRequest("POST", "/shopify/account", &qs, cust, AddAccount) So(response.Code, ShouldEqual, 200) So(json.Unmarshal(response.Body.Bytes(), &cust), ShouldBeNil) }) }
func EditAddress(w http.ResponseWriter, req *http.Request, params martini.Params, enc encoding.Encoder, shop *cart.Shop) string { var address cart.CustomerAddress var c cart.Customer customerId := params["id"] if !bson.IsObjectIdHex(customerId) { apierror.GenerateError("invalid customer reference", nil, w, req) return "" } c.Id = bson.ObjectIdHex(customerId) c.ShopId = shop.Id if err := c.Get(); err != nil { apierror.GenerateError("", err, w, req) return "" } addressId := params["address"] if !bson.IsObjectIdHex(addressId) { apierror.GenerateError("invalid address reference", nil, w, req) return "" } defer req.Body.Close() data, err := ioutil.ReadAll(req.Body) if err != nil { apierror.GenerateError(err.Error(), err, w, req) return "" } if err = json.Unmarshal(data, &address); err != nil { apierror.GenerateError(err.Error(), err, w, req) return "" } // audit the address if err := address.Validate(); err != nil { apierror.GenerateError(err.Error(), err, w, req) return "" } found := false for i, addr := range c.Addresses { if addr.Id.Hex() == addressId { c.Addresses[i] = address found = true break } } if !found { apierror.GenerateError("invalid address reference", nil, w, req) return "" } if err = c.Update(); err != nil { apierror.GenerateError(err.Error(), err, w, req) return "" } return encoding.Must(enc.Encode(address)) }
func Test_AddAddress(t *testing.T) { Convey("with no shop identifier", t, func() { qs := make(url.Values, 0) response = httprunner.ParameterizedJsonRequest("POST", "/shopify/customers/:id/addresses", "/shopify/customers/1234/addresses", &qs, nil, AddAddress) So(response.Code, ShouldEqual, 500) So(json.Unmarshal(response.Body.Bytes(), &apierror.ApiErr{}), ShouldBeNil) }) Convey("with shop identifier", t, func() { shopID := cart.InsertTestData() So(shopID, ShouldNotBeNil) qs := make(url.Values, 0) qs.Add("shop", shopID.Hex()) response = httprunner.ParameterizedJsonRequest("POST", "/shopify/customers/:id/addresses", "/shopify/customers/1234/addresses", &qs, nil, AddAddress) So(response.Code, ShouldEqual, 500) So(json.Unmarshal(response.Body.Bytes(), &apierror.ApiErr{}), ShouldBeNil) response = httprunner.ParameterizedJsonRequest("POST", "/shopify/customers/:id/addresses", "/shopify/customers/"+shopID.Hex()+"/addresses", &qs, nil, AddAddress) So(response.Code, ShouldEqual, 500) So(json.Unmarshal(response.Body.Bytes(), &apierror.ApiErr{}), ShouldBeNil) cust := cart.Customer{ ShopId: *shopID, FirstName: "Alex", LastName: "Ninneman", Email: time.Now().Format(time.RFC3339Nano) + "@gmail.com", Password: "******", } response = httprunner.JsonRequest("POST", "/shopify/customers", &qs, cust, AddCustomer) So(response.Code, ShouldEqual, 200) So(json.Unmarshal(response.Body.Bytes(), &cust), ShouldBeNil) response = httprunner.ParameterizedJsonRequest("POST", "/shopify/customers/:id/addresses", "/shopify/customers/"+cust.Id.Hex()+"/addresses", &qs, &cart.Shop{}, AddAddress) So(response.Code, ShouldEqual, 500) So(json.Unmarshal(response.Body.Bytes(), &apierror.ApiErr{}), ShouldBeNil) response = httprunner.ParameterizedJsonRequest("POST", "/shopify/customers/:id/addresses", "/shopify/customers/"+cust.Id.Hex()+"/addresses", &qs, &cart.Shop{}, AddAddress) So(response.Code, ShouldEqual, 500) So(json.Unmarshal(response.Body.Bytes(), &apierror.ApiErr{}), ShouldBeNil) addr := cart.CustomerAddress{ Address1: "1119 Sunset Lane", City: "Altoona", Company: "AN & Co.", FirstName: "Alex", LastName: "Ninneman", Phone: "7153082604", Province: "Wisconsin", ProvinceCode: "WI", Country: "US", CountryCode: "US", CountryName: "United States", } response = httprunner.ParameterizedJsonRequest("POST", "/shopify/customers/:id/addresses", "/shopify/customers/"+cust.Id.Hex()+"/addresses", &qs, &addr, AddAddress) So(response.Code, ShouldEqual, 500) So(json.Unmarshal(response.Body.Bytes(), &apierror.ApiErr{}), ShouldBeNil) addr.Zip = "54720" response = httprunner.ParameterizedJsonRequest("POST", "/shopify/customers/:id/addresses", "/shopify/customers/"+cust.Id.Hex()+"/addresses", &qs, &addr, AddAddress) So(response.Code, ShouldEqual, 200) So(json.Unmarshal(response.Body.Bytes(), &cart.CustomerAddress{}), ShouldBeNil) }) }