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  }