github.com/aspring/terraform@v0.8.2-0.20161216122603-6a8619a5db2e/builtin/providers/statuscake/resource_statuscaketest_test.go (about) 1 package statuscake 2 3 import ( 4 "fmt" 5 "strconv" 6 "testing" 7 8 "github.com/DreamItGetIT/statuscake" 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 ) 12 13 func TestAccStatusCake_basic(t *testing.T) { 14 var test statuscake.Test 15 16 resource.Test(t, resource.TestCase{ 17 PreCheck: func() { testAccPreCheck(t) }, 18 Providers: testAccProviders, 19 CheckDestroy: testAccTestCheckDestroy(&test), 20 Steps: []resource.TestStep{ 21 resource.TestStep{ 22 Config: testAccTestConfig_basic, 23 Check: resource.ComposeTestCheckFunc( 24 testAccTestCheckExists("statuscake_test.google", &test), 25 testAccTestCheckAttributes("statuscake_test.google", &test), 26 ), 27 }, 28 }, 29 }) 30 } 31 32 func TestAccStatusCake_withUpdate(t *testing.T) { 33 var test statuscake.Test 34 35 resource.Test(t, resource.TestCase{ 36 PreCheck: func() { testAccPreCheck(t) }, 37 Providers: testAccProviders, 38 CheckDestroy: testAccTestCheckDestroy(&test), 39 Steps: []resource.TestStep{ 40 resource.TestStep{ 41 Config: testAccTestConfig_basic, 42 Check: resource.ComposeTestCheckFunc( 43 testAccTestCheckExists("statuscake_test.google", &test), 44 ), 45 }, 46 47 resource.TestStep{ 48 Config: testAccTestConfig_update, 49 Check: resource.ComposeTestCheckFunc( 50 testAccTestCheckExists("statuscake_test.google", &test), 51 testAccTestCheckAttributes("statuscake_test.google", &test), 52 resource.TestCheckResourceAttr("statuscake_test.google", "check_rate", "500"), 53 resource.TestCheckResourceAttr("statuscake_test.google", "paused", "true"), 54 resource.TestCheckResourceAttr("statuscake_test.google", "contact_id", "0"), 55 ), 56 }, 57 }, 58 }) 59 } 60 61 func testAccTestCheckExists(rn string, test *statuscake.Test) resource.TestCheckFunc { 62 return func(s *terraform.State) error { 63 rs, ok := s.RootModule().Resources[rn] 64 if !ok { 65 return fmt.Errorf("resource not found: %s", rn) 66 } 67 68 if rs.Primary.ID == "" { 69 return fmt.Errorf("TestID not set") 70 } 71 72 client := testAccProvider.Meta().(*statuscake.Client) 73 testId, parseErr := strconv.Atoi(rs.Primary.ID) 74 if parseErr != nil { 75 return fmt.Errorf("error in statuscake test CheckExists: %s", parseErr) 76 } 77 78 gotTest, err := client.Tests().Detail(testId) 79 if err != nil { 80 return fmt.Errorf("error getting test: %s", err) 81 } 82 83 *test = *gotTest 84 85 return nil 86 } 87 } 88 89 func testAccTestCheckAttributes(rn string, test *statuscake.Test) resource.TestCheckFunc { 90 return func(s *terraform.State) error { 91 attrs := s.RootModule().Resources[rn].Primary.Attributes 92 93 check := func(key, stateValue, testValue string) error { 94 if testValue != stateValue { 95 return fmt.Errorf("different values for %s in state (%s) and in statuscake (%s)", 96 key, stateValue, testValue) 97 } 98 return nil 99 } 100 101 for key, value := range attrs { 102 var err error 103 104 switch key { 105 case "website_name": 106 err = check(key, value, test.WebsiteName) 107 case "website_url": 108 err = check(key, value, test.WebsiteURL) 109 case "check_rate": 110 err = check(key, value, strconv.Itoa(test.CheckRate)) 111 case "test_type": 112 err = check(key, value, test.TestType) 113 case "paused": 114 err = check(key, value, strconv.FormatBool(test.Paused)) 115 case "timeout": 116 err = check(key, value, strconv.Itoa(test.Timeout)) 117 case "contact_id": 118 err = check(key, value, strconv.Itoa(test.ContactID)) 119 } 120 121 if err != nil { 122 return err 123 } 124 } 125 return nil 126 } 127 } 128 129 func testAccTestCheckDestroy(test *statuscake.Test) resource.TestCheckFunc { 130 return func(s *terraform.State) error { 131 client := testAccProvider.Meta().(*statuscake.Client) 132 err := client.Tests().Delete(test.TestID) 133 if err == nil { 134 return fmt.Errorf("test still exists") 135 } 136 137 return nil 138 } 139 } 140 141 const testAccTestConfig_basic = ` 142 resource "statuscake_test" "google" { 143 website_name = "google.com" 144 website_url = "www.google.com" 145 test_type = "HTTP" 146 check_rate = 300 147 contact_id = 12345 148 } 149 ` 150 151 const testAccTestConfig_update = ` 152 resource "statuscake_test" "google" { 153 website_name = "google.com" 154 website_url = "www.google.com" 155 test_type = "HTTP" 156 check_rate = 500 157 paused = true 158 } 159 `