]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blame - resource_statuscaketest_test.go
Merge branch 'statuscake_adding_contact_group' of https://github.com/ldjohnson/terraf...
[github/fretlink/terraform-provider-statuscake.git] / resource_statuscaketest_test.go
CommitLineData
b8f05dfc 1package statuscake
2
3import (
4 "fmt"
4eeeab64 5 "strconv"
b8f05dfc 6 "testing"
7
8 "github.com/DreamItGetIT/statuscake"
9 "github.com/hashicorp/terraform/helper/resource"
10 "github.com/hashicorp/terraform/terraform"
11)
12
13func 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),
c0701076 25 testAccTestCheckAttributes("statuscake_test.google", &test),
b8f05dfc 26 ),
27 },
28 },
29 })
30}
31
4eeeab64 32func 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),
c0701076 51 testAccTestCheckAttributes("statuscake_test.google", &test),
4eeeab64 52 resource.TestCheckResourceAttr("statuscake_test.google", "check_rate", "500"),
53 resource.TestCheckResourceAttr("statuscake_test.google", "paused", "true"),
c0701076 54 resource.TestCheckResourceAttr("statuscake_test.google", "contact_id", "0"),
b5815405 55 resource.TestCheckResourceAttr("statuscake_test.google", "confirmations", "0"),
4eeeab64 56 ),
57 },
58 },
59 })
60}
61
62func testAccTestCheckExists(rn string, test *statuscake.Test) resource.TestCheckFunc {
b8f05dfc 63 return func(s *terraform.State) error {
64 rs, ok := s.RootModule().Resources[rn]
65 if !ok {
66 return fmt.Errorf("resource not found: %s", rn)
67 }
68
69 if rs.Primary.ID == "" {
70 return fmt.Errorf("TestID not set")
71 }
72
4eeeab64 73 client := testAccProvider.Meta().(*statuscake.Client)
74 testId, parseErr := strconv.Atoi(rs.Primary.ID)
75 if parseErr != nil {
76 return fmt.Errorf("error in statuscake test CheckExists: %s", parseErr)
77 }
78
79 gotTest, err := client.Tests().Detail(testId)
80 if err != nil {
c0701076 81 return fmt.Errorf("error getting test: %s", err)
4eeeab64 82 }
83
84 *test = *gotTest
b8f05dfc 85
86 return nil
87 }
88}
89
c0701076
RG
90func testAccTestCheckAttributes(rn string, test *statuscake.Test) resource.TestCheckFunc {
91 return func(s *terraform.State) error {
92 attrs := s.RootModule().Resources[rn].Primary.Attributes
93
94 check := func(key, stateValue, testValue string) error {
95 if testValue != stateValue {
96 return fmt.Errorf("different values for %s in state (%s) and in statuscake (%s)",
97 key, stateValue, testValue)
98 }
99 return nil
100 }
101
102 for key, value := range attrs {
103 var err error
104
105 switch key {
106 case "website_name":
107 err = check(key, value, test.WebsiteName)
108 case "website_url":
109 err = check(key, value, test.WebsiteURL)
110 case "check_rate":
111 err = check(key, value, strconv.Itoa(test.CheckRate))
112 case "test_type":
113 err = check(key, value, test.TestType)
114 case "paused":
115 err = check(key, value, strconv.FormatBool(test.Paused))
116 case "timeout":
117 err = check(key, value, strconv.Itoa(test.Timeout))
118 case "contact_id":
119 err = check(key, value, strconv.Itoa(test.ContactID))
b5815405
SC
120 case "confirmations":
121 err = check(key, value, strconv.Itoa(test.Confirmation))
c0701076
RG
122 }
123
124 if err != nil {
125 return err
126 }
127 }
128 return nil
129 }
130}
131
4eeeab64 132func testAccTestCheckDestroy(test *statuscake.Test) resource.TestCheckFunc {
133 return func(s *terraform.State) error {
134 client := testAccProvider.Meta().(*statuscake.Client)
135 err := client.Tests().Delete(test.TestID)
136 if err == nil {
137 return fmt.Errorf("test still exists")
138 }
139
140 return nil
141 }
b8f05dfc 142}
143
144const testAccTestConfig_basic = `
145resource "statuscake_test" "google" {
51688607 146 website_name = "google.com"
147 website_url = "www.google.com"
148 test_type = "HTTP"
149 check_rate = 300
150 contact_id = 12345
b5815405 151 confirmations = 1
b8f05dfc 152}
153`
4eeeab64 154
155const testAccTestConfig_update = `
156resource "statuscake_test" "google" {
51688607 157 website_name = "google.com"
158 website_url = "www.google.com"
159 test_type = "HTTP"
160 check_rate = 500
161 paused = true
4eeeab64 162}
163`