Uniform trailing slashes, client.URL()

This commit is contained in:
Matthew Dillon 2015-01-12 12:58:48 -09:00
parent 980367e527
commit 02f46aab11
3 changed files with 16 additions and 8 deletions

View file

@ -10,6 +10,7 @@ import (
"github.com/thermokarst/bactdb/datastore" "github.com/thermokarst/bactdb/datastore"
"github.com/thermokarst/bactdb/models" "github.com/thermokarst/bactdb/models"
"github.com/thermokarst/bactdb/router"
) )
func init() { func init() {
@ -29,7 +30,8 @@ var (
func setup() { func setup() {
store = datastore.NewMockDatastore() store = datastore.NewMockDatastore()
SetupCerts("../keys/") SetupCerts("../keys/")
resp, _ := httpClient.PostForm(apiClient.BaseURL.String()+"authenticate/", u, _ := apiClient.URL(router.GetToken, nil, nil)
resp, _ := httpClient.PostForm(u.String(),
url.Values{"username": {"test_user"}, "password": {"password"}}) url.Values{"username": {"test_user"}, "password": {"password"}})
defer resp.Body.Close() defer resp.Body.Close()
} }

View file

@ -127,6 +127,12 @@ func (c *Client) url(apiRouteName string, routeVars map[string]string, opt inter
return url, nil return url, nil
} }
func (c *Client) URL(apiRouteName string, routeVars map[string]string, opt interface{}) (*url.URL, error) {
u, err := c.url(apiRouteName, routeVars, opt)
absURL := c.BaseURL.ResolveReference(u)
return absURL, err
}
// NewRequest creates an API request. A relative URL can be provided in urlStr, // NewRequest creates an API request. A relative URL can be provided in urlStr,
// in which case it is resolved relative to the BaseURL of the Client. Relative // in which case it is resolved relative to the BaseURL of the Client. Relative
// URLs should always be specified without a preceding slash. If specified, the // URLs should always be specified without a preceding slash. If specified, the

View file

@ -9,7 +9,7 @@ func API() *mux.Router {
m.Path("/users").Methods("GET").Name(Users) m.Path("/users").Methods("GET").Name(Users)
m.Path("/users").Methods("POST").Name(CreateUser) m.Path("/users").Methods("POST").Name(CreateUser)
m.Path("/users/{Id:.+}").Methods("GET").Name(User) m.Path("/users/{Id:.+}").Methods("GET").Name(User)
m.Path("/authenticate/").Methods("POST").Name(GetToken) m.Path("/authenticate").Methods("POST").Name(GetToken)
// Genera // Genera
m.Path("/genera").Methods("GET").Name(Genera) m.Path("/genera").Methods("GET").Name(Genera)
@ -47,22 +47,22 @@ func API() *mux.Router {
m.Path("/characteristics/{Id:.+}").Methods("DELETE").Name(DeleteCharacteristic) m.Path("/characteristics/{Id:.+}").Methods("DELETE").Name(DeleteCharacteristic)
// TextMeasurementTypes // TextMeasurementTypes
m.Path("/text_measurement_types/").Methods("GET").Name(TextMeasurementTypes) m.Path("/text_measurement_types").Methods("GET").Name(TextMeasurementTypes)
m.Path("/text_measurement_types/").Methods("POST").Name(CreateTextMeasurementType) m.Path("/text_measurement_types").Methods("POST").Name(CreateTextMeasurementType)
m.Path("/text_measurement_types/{Id:.+}").Methods("GET").Name(TextMeasurementType) m.Path("/text_measurement_types/{Id:.+}").Methods("GET").Name(TextMeasurementType)
m.Path("/text_measurement_types/{Id:.+}").Methods("PUT").Name(UpdateTextMeasurementType) m.Path("/text_measurement_types/{Id:.+}").Methods("PUT").Name(UpdateTextMeasurementType)
m.Path("/text_measurement_types/{Id:.+}").Methods("DELETE").Name(DeleteTextMeasurementType) m.Path("/text_measurement_types/{Id:.+}").Methods("DELETE").Name(DeleteTextMeasurementType)
// UnitTypes // UnitTypes
m.Path("/unit_types/").Methods("GET").Name(UnitTypes) m.Path("/unit_types").Methods("GET").Name(UnitTypes)
m.Path("/unit_types/").Methods("POST").Name(CreateUnitType) m.Path("/unit_types").Methods("POST").Name(CreateUnitType)
m.Path("/unit_types/{Id:.+}").Methods("GET").Name(UnitType) m.Path("/unit_types/{Id:.+}").Methods("GET").Name(UnitType)
m.Path("/unit_types/{Id:.+}").Methods("PUT").Name(UpdateUnitType) m.Path("/unit_types/{Id:.+}").Methods("PUT").Name(UpdateUnitType)
m.Path("/unit_types/{Id:.+}").Methods("DELETE").Name(DeleteUnitType) m.Path("/unit_types/{Id:.+}").Methods("DELETE").Name(DeleteUnitType)
// Measurements // Measurements
m.Path("/measurements/").Methods("GET").Name(Measurements) m.Path("/measurements").Methods("GET").Name(Measurements)
m.Path("/measurements/").Methods("POST").Name(CreateMeasurement) m.Path("/measurements").Methods("POST").Name(CreateMeasurement)
m.Path("/measurements/{Id:.+}").Methods("GET").Name(Measurement) m.Path("/measurements/{Id:.+}").Methods("GET").Name(Measurement)
m.Path("/measurements/{Id:.+}").Methods("PUT").Name(UpdateMeasurement) m.Path("/measurements/{Id:.+}").Methods("PUT").Name(UpdateMeasurement)
m.Path("/measurements/{Id:.+}").Methods("DELETE").Name(DeleteMeasurement) m.Path("/measurements/{Id:.+}").Methods("DELETE").Name(DeleteMeasurement)