From 5a178a39a0261bb9af2d54a339592933e5600ce7 Mon Sep 17 00:00:00 2001 From: Jack Pearkes Date: Wed, 23 Jul 2014 12:38:45 -0400 Subject: [PATCH] providers/heroku: init addon, app update --- .../providers/heroku/resource_heroku_addon.go | 1 + .../heroku/resource_heroku_addon_test.go | 1 + .../providers/heroku/resource_heroku_app.go | 23 +++++- .../heroku/resource_heroku_app_test.go | 73 +++++++++++++++++++ 4 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 builtin/providers/heroku/resource_heroku_addon.go create mode 100644 builtin/providers/heroku/resource_heroku_addon_test.go diff --git a/builtin/providers/heroku/resource_heroku_addon.go b/builtin/providers/heroku/resource_heroku_addon.go new file mode 100644 index 000000000..140691b49 --- /dev/null +++ b/builtin/providers/heroku/resource_heroku_addon.go @@ -0,0 +1 @@ +package heroku diff --git a/builtin/providers/heroku/resource_heroku_addon_test.go b/builtin/providers/heroku/resource_heroku_addon_test.go new file mode 100644 index 000000000..140691b49 --- /dev/null +++ b/builtin/providers/heroku/resource_heroku_addon_test.go @@ -0,0 +1 @@ +package heroku diff --git a/builtin/providers/heroku/resource_heroku_app.go b/builtin/providers/heroku/resource_heroku_app.go index 23dbd71b8..75b6fbd7d 100644 --- a/builtin/providers/heroku/resource_heroku_app.go +++ b/builtin/providers/heroku/resource_heroku_app.go @@ -101,10 +101,29 @@ func resource_heroku_app_update( s *terraform.ResourceState, d *terraform.ResourceDiff, meta interface{}) (*terraform.ResourceState, error) { + p := meta.(*ResourceProvider) + client := p.client + rs := s.MergeDiff(d) - panic("does not update") + if attr, ok := d.Attributes["name"]; ok { + opts := heroku.AppUpdateOpts{ + Name: &attr.New, + } - return nil, nil + _, err := client.AppUpdate(rs.ID, &opts) + + if err != nil { + return s, err + } + + } + + app, err := resource_heroku_app_retrieve(rs.ID, client) + if err != nil { + return rs, err + } + + return resource_heroku_app_update_state(rs, app) } func resource_heroku_app_destroy( diff --git a/builtin/providers/heroku/resource_heroku_app_test.go b/builtin/providers/heroku/resource_heroku_app_test.go index 059d9b9d1..9da7cabe1 100644 --- a/builtin/providers/heroku/resource_heroku_app_test.go +++ b/builtin/providers/heroku/resource_heroku_app_test.go @@ -32,6 +32,42 @@ func TestAccHerokuApp_Basic(t *testing.T) { }) } +func TestAccHerokuApp_NameChange(t *testing.T) { + var app heroku.App + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckHerokuAppDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckHerokuAppConfig_basic, + Check: resource.ComposeTestCheckFunc( + testAccCheckHerokuAppExists("heroku_app.foobar", &app), + testAccCheckHerokuAppAttributes(&app), + resource.TestCheckResourceAttr( + "heroku_app.foobar", "name", "terraform-test-app"), + resource.TestCheckResourceAttr( + "heroku_app.foobar", "config_vars.0.FOO", "bar"), + ), + }, + resource.TestStep{ + Config: testAccCheckHerokuAppConfig_updated, + Check: resource.ComposeTestCheckFunc( + testAccCheckHerokuAppExists("heroku_app.foobar", &app), + testAccCheckHerokuAppAttributesUpdated(&app), + resource.TestCheckResourceAttr( + "heroku_app.foobar", "name", "terraform-test-renamed"), + resource.TestCheckResourceAttr( + "heroku_app.foobar", "config_vars.0.FOO", "bing"), + resource.TestCheckResourceAttr( + "heroku_app.foobar", "config_vars.0.BAZ", "bar"), + ), + }, + }, + }) +} + func testAccCheckHerokuAppDestroy(s *terraform.State) error { client := testAccProvider.client @@ -79,6 +115,33 @@ func testAccCheckHerokuAppAttributes(app *heroku.App) resource.TestCheckFunc { } } +func testAccCheckHerokuAppAttributesUpdated(app *heroku.App) resource.TestCheckFunc { + return func(s *terraform.State) error { + client := testAccProvider.client + + if app.Name != "terraform-test-renamed" { + return fmt.Errorf("Bad name: %s", app.Name) + } + + vars, err := client.ConfigVarInfo(app.Name) + if err != nil { + return err + } + + // Make sure we kept the old one + if vars["FOO"] != "bing" { + return fmt.Errorf("Bad config vars: %v", vars) + } + + if vars["BAZ"] != "bar" { + return fmt.Errorf("Bad config vars: %v", vars) + } + + return nil + + } +} + func testAccCheckHerokuAppExists(n string, app *heroku.App) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.Resources[n] @@ -117,3 +180,13 @@ resource "heroku_app" "foobar" { FOO = bar } }` + +const testAccCheckHerokuAppConfig_updated = ` +resource "heroku_app" "foobar" { + name = "terraform-test-renamed" + + config_vars = { + FOO = bing + BAZ = bar + } +}`