github.com/jrperritt/terraform@v0.1.1-0.20170525065507-96f391dafc38/builtin/providers/pagerduty/resource_pagerduty_user_test.go (about) 1 package pagerduty 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/PagerDuty/go-pagerduty" 8 "github.com/hashicorp/terraform/helper/acctest" 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 ) 12 13 func TestAccPagerDutyUser_Basic(t *testing.T) { 14 username := fmt.Sprintf("tf-%s", acctest.RandString(5)) 15 usernameUpdated := fmt.Sprintf("tf-%s", acctest.RandString(5)) 16 email := fmt.Sprintf("%s@foo.com", username) 17 emailUpdated := fmt.Sprintf("%s@foo.com", usernameUpdated) 18 19 resource.Test(t, resource.TestCase{ 20 PreCheck: func() { testAccPreCheck(t) }, 21 Providers: testAccProviders, 22 CheckDestroy: testAccCheckPagerDutyUserDestroy, 23 Steps: []resource.TestStep{ 24 { 25 Config: testAccCheckPagerDutyUserConfig(username, email), 26 Check: resource.ComposeTestCheckFunc( 27 testAccCheckPagerDutyUserExists("pagerduty_user.foo"), 28 resource.TestCheckResourceAttr( 29 "pagerduty_user.foo", "name", username), 30 resource.TestCheckResourceAttr( 31 "pagerduty_user.foo", "email", email), 32 resource.TestCheckResourceAttr( 33 "pagerduty_user.foo", "color", "green"), 34 resource.TestCheckResourceAttr( 35 "pagerduty_user.foo", "role", "user"), 36 resource.TestCheckResourceAttr( 37 "pagerduty_user.foo", "job_title", "foo"), 38 resource.TestCheckResourceAttr( 39 "pagerduty_user.foo", "description", "foo"), 40 ), 41 }, 42 { 43 Config: testAccCheckPagerDutyUserConfigUpdated(usernameUpdated, emailUpdated), 44 Check: resource.ComposeTestCheckFunc( 45 testAccCheckPagerDutyUserExists("pagerduty_user.foo"), 46 resource.TestCheckResourceAttr( 47 "pagerduty_user.foo", "name", usernameUpdated), 48 resource.TestCheckResourceAttr( 49 "pagerduty_user.foo", "email", emailUpdated), 50 resource.TestCheckResourceAttr( 51 "pagerduty_user.foo", "color", "red"), 52 resource.TestCheckResourceAttr( 53 "pagerduty_user.foo", "role", "team_responder"), 54 resource.TestCheckResourceAttr( 55 "pagerduty_user.foo", "job_title", "bar"), 56 resource.TestCheckResourceAttr( 57 "pagerduty_user.foo", "description", "bar"), 58 ), 59 }, 60 }, 61 }) 62 } 63 64 func TestAccPagerDutyUserWithTeams_Basic(t *testing.T) { 65 username := fmt.Sprintf("tf-%s", acctest.RandString(5)) 66 email := fmt.Sprintf("%s@foo.com", username) 67 team1 := fmt.Sprintf("tf-%s", acctest.RandString(5)) 68 team2 := fmt.Sprintf("tf-%s", acctest.RandString(5)) 69 70 resource.Test(t, resource.TestCase{ 71 PreCheck: func() { testAccPreCheck(t) }, 72 Providers: testAccProviders, 73 CheckDestroy: testAccCheckPagerDutyUserDestroy, 74 Steps: []resource.TestStep{ 75 { 76 Config: testAccCheckPagerDutyUserWithTeamsConfig(team1, username, email), 77 Check: resource.ComposeTestCheckFunc( 78 testAccCheckPagerDutyUserExists("pagerduty_user.foo"), 79 resource.TestCheckResourceAttr( 80 "pagerduty_user.foo", "name", username), 81 resource.TestCheckResourceAttr( 82 "pagerduty_user.foo", "email", email), 83 resource.TestCheckResourceAttr( 84 "pagerduty_user.foo", "teams.#", "1"), 85 ), 86 }, 87 { 88 Config: testAccCheckPagerDutyUserWithTeamsConfigUpdated(team1, team2, username, email), 89 Check: resource.ComposeTestCheckFunc( 90 testAccCheckPagerDutyUserExists("pagerduty_user.foo"), 91 resource.TestCheckResourceAttr( 92 "pagerduty_user.foo", "name", username), 93 resource.TestCheckResourceAttr( 94 "pagerduty_user.foo", "email", email), 95 resource.TestCheckResourceAttr( 96 "pagerduty_user.foo", "teams.#", "2"), 97 ), 98 }, 99 { 100 Config: testAccCheckPagerDutyUserWithNoTeamsConfig(team1, team2, username, email), 101 Check: resource.ComposeTestCheckFunc( 102 testAccCheckPagerDutyUserExists("pagerduty_user.foo"), 103 resource.TestCheckResourceAttr( 104 "pagerduty_user.foo", "name", username), 105 resource.TestCheckResourceAttr( 106 "pagerduty_user.foo", "email", email), 107 resource.TestCheckResourceAttr( 108 "pagerduty_user.foo", "teams.#", "0"), 109 ), 110 }, 111 }, 112 }) 113 } 114 115 func testAccCheckPagerDutyUserDestroy(s *terraform.State) error { 116 client := testAccProvider.Meta().(*pagerduty.Client) 117 for _, r := range s.RootModule().Resources { 118 if r.Type != "pagerduty_user" { 119 continue 120 } 121 122 opts := pagerduty.GetUserOptions{} 123 124 _, err := client.GetUser(r.Primary.ID, opts) 125 126 if err == nil { 127 return fmt.Errorf("User still exists") 128 } 129 130 } 131 return nil 132 } 133 134 func testAccCheckPagerDutyUserExists(n string) resource.TestCheckFunc { 135 return func(s *terraform.State) error { 136 rs, ok := s.RootModule().Resources[n] 137 if !ok { 138 return fmt.Errorf("Not found: %s", n) 139 } 140 if rs.Primary.ID == "" { 141 return fmt.Errorf("No user ID is set") 142 } 143 144 client := testAccProvider.Meta().(*pagerduty.Client) 145 146 found, err := client.GetUser(rs.Primary.ID, pagerduty.GetUserOptions{}) 147 if err != nil { 148 return err 149 } 150 151 if found.ID != rs.Primary.ID { 152 return fmt.Errorf("User not found: %v - %v", rs.Primary.ID, found) 153 } 154 155 return nil 156 } 157 } 158 159 func testAccCheckPagerDutyUserConfig(username, email string) string { 160 return fmt.Sprintf(` 161 resource "pagerduty_user" "foo" { 162 name = "%s" 163 email = "%s" 164 color = "green" 165 role = "user" 166 job_title = "foo" 167 description = "foo" 168 }`, username, email) 169 } 170 171 func testAccCheckPagerDutyUserConfigUpdated(username, email string) string { 172 return fmt.Sprintf(` 173 resource "pagerduty_user" "foo" { 174 name = "%s" 175 email = "%s" 176 color = "red" 177 role = "team_responder" 178 job_title = "bar" 179 description = "bar" 180 }`, username, email) 181 } 182 183 func testAccCheckPagerDutyUserWithTeamsConfig(team, username, email string) string { 184 return fmt.Sprintf(` 185 resource "pagerduty_team" "foo" { 186 name = "%s" 187 } 188 189 resource "pagerduty_user" "foo" { 190 name = "%s" 191 email = "%s" 192 teams = ["${pagerduty_team.foo.id}"] 193 } 194 `, team, username, email) 195 } 196 197 func testAccCheckPagerDutyUserWithTeamsConfigUpdated(team1, team2, username, email string) string { 198 return fmt.Sprintf(` 199 resource "pagerduty_team" "foo" { 200 name = "%s" 201 } 202 203 resource "pagerduty_team" "bar" { 204 name = "%s" 205 } 206 207 resource "pagerduty_user" "foo" { 208 name = "%s" 209 email = "%s" 210 teams = ["${pagerduty_team.foo.id}", "${pagerduty_team.bar.id}"] 211 } 212 `, team1, team2, username, email) 213 } 214 215 func testAccCheckPagerDutyUserWithNoTeamsConfig(team1, team2, username, email string) string { 216 return fmt.Sprintf(` 217 resource "pagerduty_team" "foo" { 218 name = "%s" 219 } 220 221 resource "pagerduty_team" "bar" { 222 name = "%s" 223 } 224 225 resource "pagerduty_user" "foo" { 226 name = "%s" 227 email = "%s" 228 } 229 `, team1, team2, username, email) 230 }