github.com/skyscape-cloud-services/terraform@v0.9.2-0.20170609144644-7ece028a1747/builtin/providers/heroku/resource_heroku_space_test.go (about) 1 package heroku 2 3 import ( 4 "context" 5 "fmt" 6 "os" 7 "testing" 8 9 heroku "github.com/cyberdelia/heroku-go/v3" 10 "github.com/hashicorp/terraform/helper/acctest" 11 "github.com/hashicorp/terraform/helper/resource" 12 "github.com/hashicorp/terraform/terraform" 13 ) 14 15 func TestAccHerokuSpace_Basic(t *testing.T) { 16 var space heroku.Space 17 spaceName := fmt.Sprintf("tftest-%s", acctest.RandString(10)) 18 spaceName2 := fmt.Sprintf("tftest-%s", acctest.RandString(10)) 19 org := os.Getenv("HEROKU_ORGANIZATION") 20 21 // HEROKU_SPACES_ORGANIZATION allows us to use a special Organization managed by Heroku for the 22 // strict purpose of testing Heroku Spaces. It has the following resource limits 23 // - 2 spaces 24 // - 2 apps per space 25 // - 2 dynos per space 26 spacesOrg := os.Getenv("HEROKU_SPACES_ORGANIZATION") 27 if spacesOrg != "" { 28 org = spacesOrg 29 } 30 31 resource.Test(t, resource.TestCase{ 32 PreCheck: func() { 33 testAccPreCheck(t) 34 if org == "" { 35 t.Skip("HEROKU_ORGANIZATION is not set; skipping test.") 36 } 37 }, 38 Providers: testAccProviders, 39 CheckDestroy: testAccCheckHerokuSpaceDestroy, 40 Steps: []resource.TestStep{ 41 { 42 Config: testAccCheckHerokuSpaceConfig_basic(spaceName, org), 43 Check: resource.ComposeTestCheckFunc( 44 testAccCheckHerokuSpaceExists("heroku_space.foobar", &space), 45 testAccCheckHerokuSpaceAttributes(&space, spaceName), 46 ), 47 }, 48 { 49 Config: testAccCheckHerokuSpaceConfig_basic(spaceName2, org), 50 Check: resource.ComposeTestCheckFunc( 51 testAccCheckHerokuSpaceExists("heroku_space.foobar", &space), 52 testAccCheckHerokuSpaceAttributes(&space, spaceName2), 53 ), 54 }, 55 }, 56 }) 57 } 58 59 func testAccCheckHerokuSpaceConfig_basic(spaceName, orgName string) string { 60 return fmt.Sprintf(` 61 resource "heroku_space" "foobar" { 62 name = "%s" 63 organization = "%s" 64 region = "virginia" 65 } 66 `, spaceName, orgName) 67 } 68 69 func testAccCheckHerokuSpaceExists(n string, space *heroku.Space) resource.TestCheckFunc { 70 return func(s *terraform.State) error { 71 rs, ok := s.RootModule().Resources[n] 72 73 if !ok { 74 return fmt.Errorf("Not found: %s", n) 75 } 76 77 if rs.Primary.ID == "" { 78 return fmt.Errorf("No space name set") 79 } 80 81 client := testAccProvider.Meta().(*heroku.Service) 82 83 foundSpace, err := client.SpaceInfo(context.TODO(), rs.Primary.ID) 84 if err != nil { 85 return err 86 } 87 88 if foundSpace.ID != rs.Primary.ID { 89 return fmt.Errorf("Space not found") 90 } 91 92 *space = *foundSpace 93 94 return nil 95 } 96 } 97 98 func testAccCheckHerokuSpaceAttributes(space *heroku.Space, spaceName string) resource.TestCheckFunc { 99 return func(s *terraform.State) error { 100 if space.Name != spaceName { 101 return fmt.Errorf("Bad name: %s", space.Name) 102 } 103 104 return nil 105 } 106 } 107 108 func testAccCheckHerokuSpaceDestroy(s *terraform.State) error { 109 client := testAccProvider.Meta().(*heroku.Service) 110 111 for _, rs := range s.RootModule().Resources { 112 if rs.Type != "heroku_space" { 113 continue 114 } 115 116 _, err := client.SpaceInfo(context.TODO(), rs.Primary.ID) 117 118 if err == nil { 119 return fmt.Errorf("Space still exists") 120 } 121 } 122 123 return nil 124 }