github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/opsgenie/resource_opsgenie_user_test.go (about)

     1  package opsgenie
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/helper/acctest"
     8  	"github.com/hashicorp/terraform/helper/resource"
     9  	"github.com/hashicorp/terraform/terraform"
    10  	"github.com/opsgenie/opsgenie-go-sdk/user"
    11  )
    12  
    13  func TestAccOpsGenieUserUsername_validation(t *testing.T) {
    14  	cases := []struct {
    15  		Value    string
    16  		ErrCount int
    17  	}{
    18  		{
    19  			Value:    "hello",
    20  			ErrCount: 0,
    21  		},
    22  		{
    23  			Value:    acctest.RandString(99),
    24  			ErrCount: 0,
    25  		},
    26  		{
    27  			Value:    acctest.RandString(100),
    28  			ErrCount: 1,
    29  		},
    30  	}
    31  
    32  	for _, tc := range cases {
    33  		_, errors := validateOpsGenieUserUsername(tc.Value, "opsgenie_team")
    34  
    35  		if len(errors) != tc.ErrCount {
    36  			t.Fatalf("Expected the OpsGenie User Username Validation to trigger a validation error: %v", errors)
    37  		}
    38  	}
    39  }
    40  
    41  func TestAccOpsGenieUserFullName_validation(t *testing.T) {
    42  	cases := []struct {
    43  		Value    string
    44  		ErrCount int
    45  	}{
    46  		{
    47  			Value:    "hello",
    48  			ErrCount: 0,
    49  		},
    50  		{
    51  			Value:    acctest.RandString(100),
    52  			ErrCount: 0,
    53  		},
    54  		{
    55  			Value:    acctest.RandString(511),
    56  			ErrCount: 0,
    57  		},
    58  		{
    59  			Value:    acctest.RandString(512),
    60  			ErrCount: 1,
    61  		},
    62  	}
    63  
    64  	for _, tc := range cases {
    65  		_, errors := validateOpsGenieUserFullName(tc.Value, "opsgenie_team")
    66  
    67  		if len(errors) != tc.ErrCount {
    68  			t.Fatalf("Expected the OpsGenie User Full Name Validation to trigger a validation error: %v", errors)
    69  		}
    70  	}
    71  }
    72  
    73  func TestAccOpsGenieUserRole_validation(t *testing.T) {
    74  	cases := []struct {
    75  		Value    string
    76  		ErrCount int
    77  	}{
    78  		{
    79  			Value:    "hello",
    80  			ErrCount: 0,
    81  		},
    82  		{
    83  			Value:    acctest.RandString(100),
    84  			ErrCount: 0,
    85  		},
    86  		{
    87  			Value:    acctest.RandString(511),
    88  			ErrCount: 0,
    89  		},
    90  		{
    91  			Value:    acctest.RandString(512),
    92  			ErrCount: 1,
    93  		},
    94  	}
    95  
    96  	for _, tc := range cases {
    97  		_, errors := validateOpsGenieUserRole(tc.Value, "opsgenie_team")
    98  
    99  		if len(errors) != tc.ErrCount {
   100  			t.Fatalf("Expected the OpsGenie User Role Validation to trigger a validation error: %v", errors)
   101  		}
   102  	}
   103  }
   104  
   105  func TestAccOpsGenieUser_basic(t *testing.T) {
   106  	ri := acctest.RandInt()
   107  	config := fmt.Sprintf(testAccOpsGenieUser_basic, ri)
   108  
   109  	resource.Test(t, resource.TestCase{
   110  		PreCheck:     func() { testAccPreCheck(t) },
   111  		Providers:    testAccProviders,
   112  		CheckDestroy: testCheckOpsGenieUserDestroy,
   113  		Steps: []resource.TestStep{
   114  			{
   115  				Config: config,
   116  				Check: resource.ComposeTestCheckFunc(
   117  					testCheckOpsGenieUserExists("opsgenie_user.test"),
   118  				),
   119  			},
   120  		},
   121  	})
   122  }
   123  
   124  func TestAccOpsGenieUser_complete(t *testing.T) {
   125  	ri := acctest.RandInt()
   126  	config := fmt.Sprintf(testAccOpsGenieUser_complete, ri)
   127  
   128  	resource.Test(t, resource.TestCase{
   129  		PreCheck:     func() { testAccPreCheck(t) },
   130  		Providers:    testAccProviders,
   131  		CheckDestroy: testCheckOpsGenieUserDestroy,
   132  		Steps: []resource.TestStep{
   133  			{
   134  				Config: config,
   135  				Check: resource.ComposeTestCheckFunc(
   136  					testCheckOpsGenieUserExists("opsgenie_user.test"),
   137  				),
   138  			},
   139  		},
   140  	})
   141  }
   142  
   143  func testCheckOpsGenieUserDestroy(s *terraform.State) error {
   144  	client := testAccProvider.Meta().(*OpsGenieClient).users
   145  
   146  	for _, rs := range s.RootModule().Resources {
   147  		if rs.Type != "opsgenie_user" {
   148  			continue
   149  		}
   150  
   151  		req := user.GetUserRequest{
   152  			Id: rs.Primary.Attributes["id"],
   153  		}
   154  
   155  		result, _ := client.Get(req)
   156  		if result != nil {
   157  			return fmt.Errorf("User still exists:\n%#v", result)
   158  		}
   159  	}
   160  
   161  	return nil
   162  }
   163  
   164  func testCheckOpsGenieUserExists(name string) resource.TestCheckFunc {
   165  	return func(s *terraform.State) error {
   166  		// Ensure we have enough information in state to look up in API
   167  		rs, ok := s.RootModule().Resources[name]
   168  		if !ok {
   169  			return fmt.Errorf("Not found: %s", name)
   170  		}
   171  
   172  		id := rs.Primary.Attributes["id"]
   173  		username := rs.Primary.Attributes["username"]
   174  
   175  		client := testAccProvider.Meta().(*OpsGenieClient).users
   176  
   177  		req := user.GetUserRequest{
   178  			Id: rs.Primary.Attributes["id"],
   179  		}
   180  
   181  		result, _ := client.Get(req)
   182  		if result == nil {
   183  			return fmt.Errorf("Bad: User %q (username: %q) does not exist", id, username)
   184  		}
   185  
   186  		return nil
   187  	}
   188  }
   189  
   190  var testAccOpsGenieUser_basic = `
   191  resource "opsgenie_user" "test" {
   192    username  = "acctest-%d@example.tld"
   193    full_name = "Acceptance Test User"
   194    role      = "User"
   195  }
   196  `
   197  
   198  var testAccOpsGenieUser_complete = `
   199  resource "opsgenie_user" "test" {
   200    username  = "acctest-%d@example.tld"
   201    full_name = "Acceptance Test User"
   202    role      = "User"
   203    locale    = "en_GB"
   204    timezone  = "Etc/GMT"
   205  }
   206  `