diff --git a/bitbucket/resource_user.go b/bitbucket/resource_user.go index 7ceb12b..ac09621 100644 --- a/bitbucket/resource_user.go +++ b/bitbucket/resource_user.go @@ -18,6 +18,12 @@ type User struct { DisplayName string `json:"displayName,omitempty"` } +type UserUpdate struct { + Name string `json:"name,omitempty"` + EmailAddress string `json:"email,omitempty"` + DisplayName string `json:"displayName,omitempty"` +} + func resourceUser() *schema.Resource { return &schema.Resource{ Create: resourceUserCreate, @@ -83,9 +89,19 @@ func newUserFromResource(d *schema.ResourceData) *User { return user } +func newUserUpdateFromResource(d *schema.ResourceData) *UserUpdate { + user := &UserUpdate{ + Name: d.Get("name").(string), + EmailAddress: d.Get("email_address").(string), + DisplayName: d.Get("display_name").(string), + } + + return user +} + func resourceUserUpdate(d *schema.ResourceData, m interface{}) error { client := m.(*BitbucketServerProvider).BitbucketClient - user := newUserFromResource(d) + user := newUserUpdateFromResource(d) bytedata, err := json.Marshal(user) @@ -93,9 +109,7 @@ func resourceUserUpdate(d *schema.ResourceData, m interface{}) error { return err } - _, err = client.Put(fmt.Sprintf("/rest/api/1.0/admin/users/%s", - user.Name, - ), bytes.NewBuffer(bytedata)) + _, err = client.Put("/rest/api/1.0/admin/users", bytes.NewBuffer(bytedata)) if err != nil { return err diff --git a/bitbucket/resource_user_test.go b/bitbucket/resource_user_test.go index 53e6b4a..04682ba 100644 --- a/bitbucket/resource_user_test.go +++ b/bitbucket/resource_user_test.go @@ -3,6 +3,7 @@ package bitbucket import ( "fmt" "math/rand" + "strings" "testing" "time" @@ -12,7 +13,7 @@ import ( func TestAccBitbucketUser(t *testing.T) { userRand := fmt.Sprintf("%v", rand.New(rand.NewSource(time.Now().UnixNano())).Int()) - testAccBitbucketUserConfig := fmt.Sprintf(` + config := fmt.Sprintf(` resource "bitbucketserver_user" "test" { name = "admin%v" display_name = "Admin %v" @@ -20,13 +21,15 @@ func TestAccBitbucketUser(t *testing.T) { } `, userRand, userRand, userRand) + configModified := strings.ReplaceAll(config, "Admin ", "Admin Updated ") + resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders, CheckDestroy: testAccCheckBitbucketUserDestroy, Steps: []resource.TestStep{ { - Config: testAccBitbucketUserConfig, + Config: config, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("bitbucketserver_user.test", "name", "admin"+userRand), resource.TestCheckResourceAttr("bitbucketserver_user.test", "display_name", "Admin "+userRand), @@ -34,6 +37,15 @@ func TestAccBitbucketUser(t *testing.T) { resource.TestCheckResourceAttrSet("bitbucketserver_user.test", "initial_password"), ), }, + { + Config: configModified, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("bitbucketserver_user.test", "name", "admin"+userRand), + resource.TestCheckResourceAttr("bitbucketserver_user.test", "display_name", "Admin Updated "+userRand), + resource.TestCheckResourceAttr("bitbucketserver_user.test", "email_address", "admin"+userRand+"@example.com"), + resource.TestCheckResourceAttrSet("bitbucketserver_user.test", "initial_password"), + ), + }, }, }) }