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  `