aboutsummaryrefslogtreecommitdiffhomepage
path: root/mailgun
diff options
context:
space:
mode:
Diffstat (limited to 'mailgun')
-rw-r--r--mailgun/provider.go1
-rw-r--r--mailgun/resource_mailgun_domain_test.go2
-rw-r--r--mailgun/resource_mailgun_route.go7
-rw-r--r--mailgun/resource_mailgun_route_test.go165
4 files changed, 171 insertions, 4 deletions
diff --git a/mailgun/provider.go b/mailgun/provider.go
index 32ec890..2133777 100644
--- a/mailgun/provider.go
+++ b/mailgun/provider.go
@@ -25,6 +25,7 @@ func Provider() terraform.ResourceProvider {
25 25
26 ResourcesMap: map[string]*schema.Resource{ 26 ResourcesMap: map[string]*schema.Resource{
27 "mailgun_domain": resourceMailgunDomain(), 27 "mailgun_domain": resourceMailgunDomain(),
28 "mailgun_route": resourceMailgunRoute(),
28 }, 29 },
29 30
30 ConfigureFunc: providerConfigure, 31 ConfigureFunc: providerConfigure,
diff --git a/mailgun/resource_mailgun_domain_test.go b/mailgun/resource_mailgun_domain_test.go
index c35df48..7ad9272 100644
--- a/mailgun/resource_mailgun_domain_test.go
+++ b/mailgun/resource_mailgun_domain_test.go
@@ -12,6 +12,7 @@ import (
12 "time" 12 "time"
13) 13)
14 14
15
15type fullDomain struct { 16type fullDomain struct {
16 domainResponse mailgun.DomainResponse 17 domainResponse mailgun.DomainResponse
17 domainConnection mailgun.DomainConnection 18 domainConnection mailgun.DomainConnection
@@ -226,3 +227,4 @@ resource "mailgun_domain" "exemple" {
226 227
227} 228}
228` 229`
230
diff --git a/mailgun/resource_mailgun_route.go b/mailgun/resource_mailgun_route.go
index 44fff8d..e19b67f 100644
--- a/mailgun/resource_mailgun_route.go
+++ b/mailgun/resource_mailgun_route.go
@@ -20,7 +20,7 @@ func resourceMailgunRoute() *schema.Resource {
20 }, 20 },
21 21
22 Schema: map[string]*schema.Schema{ 22 Schema: map[string]*schema.Schema{
23 "id": &schema.Schema{ 23 "route_id": &schema.Schema{
24 Type: schema.TypeString, 24 Type: schema.TypeString,
25 Computed: true, 25 Computed: true,
26 }, 26 },
@@ -72,7 +72,6 @@ func CreateRoute(d *schema.ResourceData, meta interface{}) error {
72 } 72 }
73 73
74 d.SetId(creationResponse.Id) 74 d.SetId(creationResponse.Id)
75
76 return ReadRoute(d, meta) 75 return ReadRoute(d, meta)
77} 76}
78 77
@@ -94,7 +93,7 @@ func UpdateRoute(d *schema.ResourceData, meta interface{}) error {
94 return fmt.Errorf("Error updating mailgun route: %s", err.Error()) 93 return fmt.Errorf("Error updating mailgun route: %s", err.Error())
95 } 94 }
96 95
97 return ReadDomain(d, meta) 96 return ReadRoute(d, meta)
98} 97}
99 98
100func DeleteRoute(d *schema.ResourceData, meta interface{}) error { 99func DeleteRoute(d *schema.ResourceData, meta interface{}) error {
@@ -125,7 +124,7 @@ func ReadRoute(d *schema.ResourceData, meta interface{}) error {
125 d.Set("expression", route.Expression) 124 d.Set("expression", route.Expression)
126 d.Set("actions", route.Actions) 125 d.Set("actions", route.Actions)
127 d.Set("created_at", route.CreatedAt) 126 d.Set("created_at", route.CreatedAt)
128 d.Set("id", route.Id) 127 d.Set("route_id", route.Id)
129 128
130 d.SetId(route.Id) 129 d.SetId(route.Id)
131 130
diff --git a/mailgun/resource_mailgun_route_test.go b/mailgun/resource_mailgun_route_test.go
new file mode 100644
index 0000000..b3806c2
--- /dev/null
+++ b/mailgun/resource_mailgun_route_test.go
@@ -0,0 +1,165 @@
1package mailgun
2
3import (
4 "context"
5 "fmt"
6 "github.com/hashicorp/terraform/helper/resource"
7 "github.com/hashicorp/terraform/terraform"
8 "github.com/mailgun/mailgun-go"
9 "strconv"
10 "testing"
11 "time"
12)
13
14func TestAccMailgunRoute_basic(t *testing.T) {
15 var route mailgun.Route
16
17 resource.Test(t, resource.TestCase{
18 PreCheck: func() { testAccPreCheck(t) },
19 Providers: testAccProviders,
20 CheckDestroy: testAccRouteCheckDestroy(&route),
21 Steps: []resource.TestStep{
22 {
23 Config: testAccRouteConfig_basic,
24 Check: resource.ComposeTestCheckFunc(
25 testAccRouteCheckExists("mailgun_route.exemple", &route),
26 testAccRouteCheckAttributes("mailgun_route.exemple", &route),
27 ),
28 },
29 },
30 })
31}
32
33func TestAccMailgunRoute_withUpdate(t *testing.T) {
34 var route mailgun.Route
35
36 resource.Test(t, resource.TestCase{
37 PreCheck: func() { testAccPreCheck(t) },
38 Providers: testAccProviders,
39 CheckDestroy: testAccRouteCheckDestroy(&route),
40 Steps: []resource.TestStep{
41 {
42 Config: testAccRouteConfig_basic,
43 Check: resource.ComposeTestCheckFunc(
44 testAccRouteCheckExists("mailgun_route.exemple", &route),
45 testAccRouteCheckAttributes("mailgun_route.exemple", &route),
46 ),
47 },
48
49 {
50 Config: testAccRouteConfig_update,
51 Check: resource.ComposeTestCheckFunc(
52 testAccRouteCheckExists("mailgun_route.exemple", &route),
53 testAccRouteCheckAttributes("mailgun_route.exemple", &route),
54 ),
55 },
56 },
57 })
58}
59
60func testAccRouteCheckExists(rn string, route *mailgun.Route) resource.TestCheckFunc {
61 return func(s *terraform.State) error {
62 rs, ok := s.RootModule().Resources[rn]
63 if !ok {
64 return fmt.Errorf("resource not found: %s", rn)
65 }
66
67 if rs.Primary.ID == "" {
68 return fmt.Errorf("routeID not set")
69 }
70
71 mg := testAccProvider.Meta().(*mailgun.MailgunImpl)
72 ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
73 defer cancel()
74
75 gotRoute, err := mg.GetRoute(ctx, rs.Primary.ID)
76 if err != nil {
77 return fmt.Errorf("error getting route: %s", err)
78 }
79
80 *route = gotRoute
81
82 return nil
83 }
84}
85
86func testAccRouteCheckAttributes(rn string, route *mailgun.Route) resource.TestCheckFunc {
87 return func(s *terraform.State) error {
88 attrs := s.RootModule().Resources[rn].Primary.Attributes
89
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)
94 }
95 return nil
96 }
97
98 for key, value := range attrs {
99 var err error
100
101 switch key {
102 case "priority":
103 err = check(key, value, strconv.Itoa(route.Priority))
104 case "description":
105 err = check(key, value, route.Description)
106 case "expression":
107 err = check(key, value, route.Expression)
108 case "created_at":
109 err = check(key, value, route.CreatedAt.String())
110 case "route_id":
111 err = check(key, value, route.Id)
112 case "actions":
113 for _, k := range route.Actions {
114 err = check(key, value, k)
115 if err != nil {
116 return err
117 }
118 }
119 }
120 if err != nil {
121 return err
122 }
123 }
124 return nil
125 }
126}
127
128func 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)
132 defer cancel()
133
134 _, err := mg.GetRoute(ctx, route.Id)
135 if err == nil {
136 return fmt.Errorf("route still exists")
137 }
138
139 return nil
140 }
141}
142
143const testAccRouteConfig_basic = `
144resource "mailgun_route" "exemple" {
145 priority=5
146 description="ho ho hoh"
147 expression="match_recipient(\".*@samples.mailgun.org\")"
148 actions=[
149 "forward(\"http://myhost.com/messages/\")",
150 "stop()"
151 ]
152}
153`
154
155const testAccRouteConfig_update = `
156resource "mailgun_route" "exemple" {
157 priority=4
158 description="ho ho hohf"
159 expression="match_recipient(\".*@samples.mailgun.org\")"
160 actions=[
161 "forward(\"http://myhost.com/messages/\")",
162 "stop()"
163 ]
164}
165`