6 "github.com/hashicorp/terraform/helper/resource"
7 "github.com/hashicorp/terraform/terraform"
8 "github.com/mailgun/mailgun-go/v3"
14 func TestAccMailgunRoute_basic(t *testing.T) {
15 var route mailgun.Route
17 resource.Test(t, resource.TestCase{
18 PreCheck: func() { testAccPreCheck(t) },
19 Providers: testAccProviders,
20 CheckDestroy: testAccRouteCheckDestroy(&route),
21 Steps: []resource.TestStep{
23 Config: testAccRouteConfig_basic,
24 Check: resource.ComposeTestCheckFunc(
25 testAccRouteCheckExists("mailgun_route.exemple", &route),
26 testAccRouteCheckAttributes("mailgun_route.exemple", &route),
33 func TestAccMailgunRoute_withUpdate(t *testing.T) {
34 var route mailgun.Route
36 resource.Test(t, resource.TestCase{
37 PreCheck: func() { testAccPreCheck(t) },
38 Providers: testAccProviders,
39 CheckDestroy: testAccRouteCheckDestroy(&route),
40 Steps: []resource.TestStep{
42 Config: testAccRouteConfig_basic,
43 Check: resource.ComposeTestCheckFunc(
44 testAccRouteCheckExists("mailgun_route.exemple", &route),
45 testAccRouteCheckAttributes("mailgun_route.exemple", &route),
50 Config: testAccRouteConfig_update,
51 Check: resource.ComposeTestCheckFunc(
52 testAccRouteCheckExists("mailgun_route.exemple", &route),
53 testAccRouteCheckAttributes("mailgun_route.exemple", &route),
60 func testAccRouteCheckExists(rn string, route *mailgun.Route) resource.TestCheckFunc {
61 return func(s *terraform.State) error {
62 rs, ok := s.RootModule().Resources[rn]
64 return fmt.Errorf("resource not found: %s", rn)
67 if rs.Primary.ID == "" {
68 return fmt.Errorf("routeID not set")
71 mg := testAccProvider.Meta().(*mailgun.MailgunImpl)
72 ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
75 gotRoute, err := mg.GetRoute(ctx, rs.Primary.ID)
77 return fmt.Errorf("error getting route: %s", err)
86 func testAccRouteCheckAttributes(rn string, route *mailgun.Route) resource.TestCheckFunc {
87 return func(s *terraform.State) error {
88 attrs := s.RootModule().Resources[rn].Primary.Attributes
90 check := func(key, stateValue, routeValue string) error {
91 if routeValue != stateValue {
92 return fmt.Errorf("different values for %s in state (%s) and in mailgun (%s)",
93 key, stateValue, routeValue)
98 for key, value := range attrs {
103 err = check(key, value, strconv.Itoa(route.Priority))
105 err = check(key, value, route.Description)
107 err = check(key, value, route.Expression)
109 err = check(key, value, route.CreatedAt.String())
111 err = check(key, value, route.Id)
113 for _, k := range route.Actions {
114 err = check(key, value, k)
128 func testAccRouteCheckDestroy(route *mailgun.Route) resource.TestCheckFunc {
129 return func(s *terraform.State) error {
130 mg := testAccProvider.Meta().(*mailgun.MailgunImpl)
131 ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
134 _, err := mg.GetRoute(ctx, route.Id)
136 return fmt.Errorf("route still exists")
143 const testAccRouteConfig_basic = `
144 resource "mailgun_route" "exemple" {
146 description="ho ho hoh"
147 expression="match_recipient(\".*@samples.mailgun.org\")"
149 "forward(\"http://myhost.com/messages/\")",
155 const testAccRouteConfig_update = `
156 resource "mailgun_route" "exemple" {
158 description="ho ho hohf"
159 expression="match_recipient(\".*@samples.mailgun.org\")"
161 "forward(\"http://myhost.com/messages/\")",