diff --git a/account.go b/account.go index a6691e84..c777e900 100644 --- a/account.go +++ b/account.go @@ -22,14 +22,21 @@ var _ AccountService = &AccountServiceOp{} // Account represents a DigitalOcean Account type Account struct { - DropletLimit int `json:"droplet_limit,omitempty"` - FloatingIPLimit int `json:"floating_ip_limit,omitempty"` - VolumeLimit int `json:"volume_limit,omitempty"` - Email string `json:"email,omitempty"` - UUID string `json:"uuid,omitempty"` - EmailVerified bool `json:"email_verified,omitempty"` - Status string `json:"status,omitempty"` - StatusMessage string `json:"status_message,omitempty"` + DropletLimit int `json:"droplet_limit,omitempty"` + FloatingIPLimit int `json:"floating_ip_limit,omitempty"` + VolumeLimit int `json:"volume_limit,omitempty"` + Email string `json:"email,omitempty"` + UUID string `json:"uuid,omitempty"` + EmailVerified bool `json:"email_verified,omitempty"` + Status string `json:"status,omitempty"` + StatusMessage string `json:"status_message,omitempty"` + Team *TeamInfo `json:"team,omitempty"` +} + +// TeamInfo contains information about the currently team context. +type TeamInfo struct { + Name string `json:"name,omitempty"` + UUID string `json:"uuid,omitempty"` } type accountRoot struct { diff --git a/account_test.go b/account_test.go index 47ca3897..d685c8dd 100644 --- a/account_test.go +++ b/account_test.go @@ -59,3 +59,74 @@ func TestAccountString(t *testing.T) { } } + +func TestAccountGetWithTeam(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/v2/account", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, http.MethodGet) + + response := ` + { "account": { + "droplet_limit": 25, + "floating_ip_limit": 25, + "volume_limit": 22, + "email": "sammy@digitalocean.com", + "uuid": "b6fr89dbf6d9156cace5f3c78dc9851d957381ef", + "email_verified": true, + "team": { + "name": "My Team", + "uuid": "b6fr89dbf6d9156cace5f3c78dc9851d957381ef" + } + } + }` + + fmt.Fprint(w, response) + }) + + acct, _, err := client.Account.Get(ctx) + if err != nil { + t.Errorf("Account.Get returned error: %v", err) + } + + expected := &Account{ + DropletLimit: 25, + FloatingIPLimit: 25, + Email: "sammy@digitalocean.com", + UUID: "b6fr89dbf6d9156cace5f3c78dc9851d957381ef", + EmailVerified: true, + VolumeLimit: 22, + Team: &TeamInfo{ + Name: "My Team", + UUID: "b6fr89dbf6d9156cace5f3c78dc9851d957381ef", + }, + } + if !reflect.DeepEqual(acct, expected) { + t.Errorf("Account.Get returned %+v, expected %+v", acct, expected) + } +} + +func TestAccountStringWithTeam(t *testing.T) { + acct := &Account{ + DropletLimit: 25, + FloatingIPLimit: 25, + Email: "sammy@digitalocean.com", + UUID: "b6fr89dbf6d9156cace5f3c78dc9851d957381ef", + EmailVerified: true, + Status: "active", + StatusMessage: "message", + VolumeLimit: 22, + Team: &TeamInfo{ + Name: "My Team", + UUID: "b6fr89dbf6d9156cace5f3c78dc9851d957381ef", + }, + } + + stringified := acct.String() + expected := `godo.Account{DropletLimit:25, FloatingIPLimit:25, VolumeLimit:22, Email:"sammy@digitalocean.com", UUID:"b6fr89dbf6d9156cace5f3c78dc9851d957381ef", EmailVerified:true, Status:"active", StatusMessage:"message", Team:godo.TeamInfo{Name:"My Team", UUID:"b6fr89dbf6d9156cace5f3c78dc9851d957381ef"}}` + if expected != stringified { + t.Errorf("Account.String returned %+v, expected %+v", stringified, expected) + } + +}