Skip to content

Commit

Permalink
Merge pull request #96 from gliptak/updateuser1
Browse files Browse the repository at this point in the history
Implement UpdateUser call
  • Loading branch information
jamesog committed Dec 28, 2016
2 parents 6cfcb7e + 8e8f329 commit 01acbdd
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 19 deletions.
44 changes: 27 additions & 17 deletions user.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,20 @@ import (

// User describes a user account.
type User struct {
ID string `json:"id"`
Email string `json:"email"`
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
Username string `json:"username"`
Telephone string `json:"telephone"`
Country string `json:"country"`
Zipcode string `json:"zipcode"`
CreatedOn time.Time `json:"created_on"`
ModifiedOn time.Time `json:"modified_on"`
APIKey string `json:"api_key"`
TwoFA bool `json:"two_factor_authentication_enabled"`
Betas []string `json:"betas"`
Organizations []Organization `json:"organizations"`
ID string `json:"id,omitempty"`
Email string `json:"email,omitempty"`
FirstName string `json:"first_name,omitempty"`
LastName string `json:"last_name,omitempty"`
Username string `json:"username,omitempty"`
Telephone string `json:"telephone,omitempty"`
Country string `json:"country,omitempty"`
Zipcode string `json:"zipcode,omitempty"`
CreatedOn *time.Time `json:"created_on,omitempty"`
ModifiedOn *time.Time `json:"modified_on,omitempty"`
APIKey string `json:"api_key,omitempty"`
TwoFA bool `json:"two_factor_authentication_enabled,omitempty"`
Betas []string `json:"betas,omitempty"`
Organizations []Organization `json:"organizations,omitempty"`
}

// UserResponse wraps a response containing User accounts.
Expand Down Expand Up @@ -54,7 +54,17 @@ func (api *API) UserDetails() (User, error) {
// API reference:
// https://api.cloudflare.com/#user-update-user
// PATCH /user
func (api *API) UpdateUser() (User, error) {
// api.makeRequest("PATCH", "/user", user)
return User{}, nil
func (api *API) UpdateUser(user *User) (User, error) {
var r UserResponse
res, err := api.makeRequest("PATCH", "/user", user)
if err != nil {
return User{}, errors.Wrap(err, errMakeRequestError)
}

err = json.Unmarshal(res, &r)
if err != nil {
return User{}, errors.Wrap(err, errUnmarshalError)
}

return r.Result, nil
}
73 changes: 71 additions & 2 deletions user_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"time"

"github.com/stretchr/testify/assert"
"io/ioutil"
)

func TestUser_UserDetails(t *testing.T) {
Expand Down Expand Up @@ -52,8 +53,8 @@ func TestUser_UserDetails(t *testing.T) {
Telephone: "+1 (650) 319 8930",
Country: "US",
Zipcode: "94107",
CreatedOn: createdOn,
ModifiedOn: modifiedOn,
CreatedOn: &createdOn,
ModifiedOn: &modifiedOn,
TwoFA: true,
Betas: []string{"mirage_forever"},
}
Expand All @@ -62,3 +63,71 @@ func TestUser_UserDetails(t *testing.T) {
assert.Equal(t, user, want)
}
}

func TestUser_UpdateUser(t *testing.T) {
setup()
defer teardown()

mux.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) {
assert.Equal(t, "PATCH", r.Method, "Expected method 'PATCH', got %s", r.Method)
b, err := ioutil.ReadAll(r.Body)
defer r.Body.Close()
if assert.NoError(t, err) {
assert.JSONEq(t, `{"country":"US","first_name":"John","username":"cfuser12345","email":"user@example.com",
"last_name": "Appleseed","telephone": "+1 123-123-1234","zipcode": "12345"}`, string(b), "JSON not equal")
}
w.Header().Set("content-type", "application/json")
fmt.Fprintf(w, `{
"success": true,
"errors": [],
"messages": [],
"result": {
"id": "7c5dae5552338874e5053f2534d2767a",
"email": "user@example.com",
"first_name": "John",
"last_name": "Appleseed",
"username": "cfuser12345",
"telephone": "+1 123-123-1234",
"country": "US",
"zipcode": "12345",
"created_on": "2014-01-01T05:20:00Z",
"modified_on": "2014-01-01T05:20:00Z",
"two_factor_authentication_enabled": false
}
}`)
})

createdOn, _ := time.Parse(time.RFC3339, "2014-01-01T05:20:00Z")
modifiedOn, _ := time.Parse(time.RFC3339, "2014-01-01T05:20:00Z")

userIn := User{
Email: "user@example.com",
FirstName: "John",
LastName: "Appleseed",
Username: "cfuser12345",
Telephone: "+1 123-123-1234",
Country: "US",
Zipcode: "12345",
TwoFA: false,
}

userOut, err := client.UpdateUser(&userIn)

want := User{
ID: "7c5dae5552338874e5053f2534d2767a",
Email: "user@example.com",
FirstName: "John",
LastName: "Appleseed",
Username: "cfuser12345",
Telephone: "+1 123-123-1234",
Country: "US",
Zipcode: "12345",
CreatedOn: &createdOn,
ModifiedOn: &modifiedOn,
TwoFA: false,
}

if assert.NoError(t, err) {
assert.Equal(t, userOut, want, "structs not equal")
}
}

0 comments on commit 01acbdd

Please sign in to comment.