]> git.immae.eu Git - github/fretlink/terraform-provider-mailgun.git/blame - mailgun/resource_mailgun_domain_test.go
add test for importation and fix importation for domain
[github/fretlink/terraform-provider-mailgun.git] / mailgun / resource_mailgun_domain_test.go
CommitLineData
40587421
AG
1package mailgun
2
3import (
4 "context"
5 "fmt"
6 "github.com/hashicorp/terraform/helper/resource"
7 "github.com/hashicorp/terraform/terraform"
7c735cfa 8 "github.com/mailgun/mailgun-go/v3"
40587421
AG
9 "os"
10 "strconv"
11 "testing"
12 "time"
13)
14
15type fullDomain struct {
16 domainResponse mailgun.DomainResponse
17 domainConnection mailgun.DomainConnection
18 domainTracking mailgun.DomainTracking
19 ipAddress []string
20 credentials []mailgun.Credential
21}
22
23func getFullDomain(mg *mailgun.MailgunImpl, domainName string) (*fullDomain, error) {
24 ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
25 defer cancel()
26 mg = mailgun.NewMailgun(domainName, mg.APIKey())
27
28 var domain fullDomain
29 var err error
30 domain.domainResponse, err = mg.GetDomain(ctx, domainName)
31 if err != nil {
32 return nil, fmt.Errorf("Error Getting mailgun domain Details for %s: Error: %s", domainName, err)
33 }
34
35 domain.domainConnection, err = mg.GetDomainConnection(ctx, domainName)
36 if err != nil {
37 return nil, fmt.Errorf("Error Getting mailgun domain connection Details for %s: Error: %s", domainName, err)
38 }
39
40 domain.domainTracking, err = mg.GetDomainTracking(ctx, domainName)
41 if err != nil {
42 return nil, fmt.Errorf("Error Getting mailgun domain tracking Details for %s: Error: %s", domainName, err)
43 }
44
45 ipAddress, err := mg.ListDomainIPS(ctx)
46 if err != nil {
47 return nil, fmt.Errorf("Error Getting mailgun domain ips2 for %s: Error: %s", domainName, err)
48 }
49 ips := make([]string, len(ipAddress))
50 for i, r := range ipAddress {
51 ips[i] = r.IP
52
53 }
54 domain.ipAddress = ips
55 domain.credentials, err = ListCredentials(domainName, mg.APIKey())
56 if err != nil {
57 return nil, fmt.Errorf("Error Getting mailgun credentials for %s: Error: %s", domainName, err)
58 }
59 return &domain, nil
60}
61
62func TestAccMailgunDomain_basic(t *testing.T) {
63 var domain fullDomain
64
65 resource.Test(t, resource.TestCase{
66 PreCheck: func() { testAccPreCheck(t) },
67 Providers: testAccProviders,
68 CheckDestroy: testAccDomainCheckDestroy(&domain),
69 Steps: []resource.TestStep{
70 {
71 Config: interpolateTerraformTemplateDomain(testAccDomainConfig_basic),
72 Check: resource.ComposeTestCheckFunc(
73 testAccDomainCheckExists("mailgun_domain.exemple", &domain),
74 testAccDomainCheckAttributes("mailgun_domain.exemple", &domain),
75 ),
76 },
77 },
78 })
79}
80
81func TestAccMailgunDomain_withUpdate(t *testing.T) {
82 var domain fullDomain
83
84 resource.Test(t, resource.TestCase{
85 PreCheck: func() { testAccPreCheck(t) },
86 Providers: testAccProviders,
87 CheckDestroy: testAccDomainCheckDestroy(&domain),
88 Steps: []resource.TestStep{
89 {
90 Config: interpolateTerraformTemplateDomain(testAccDomainConfig_basic),
91 Check: resource.ComposeTestCheckFunc(
92 testAccDomainCheckExists("mailgun_domain.exemple", &domain),
93 testAccDomainCheckAttributes("mailgun_domain.exemple", &domain),
94 ),
95 },
96
97 {
98 Config: interpolateTerraformTemplateDomain(testAccDomainConfig_update),
99 Check: resource.ComposeTestCheckFunc(
100 testAccDomainCheckExists("mailgun_domain.exemple", &domain),
101 testAccDomainCheckAttributes("mailgun_domain.exemple", &domain),
102 ),
103 },
104 },
105 })
106}
107
70ac6365
AG
108
109func TestDomain_importBasic(t *testing.T) {
110 var domain fullDomain
111
112 resource.Test(t, resource.TestCase{
113 PreCheck: func() { testAccPreCheck(t) },
114 Providers: testAccProviders,
115 CheckDestroy: testAccDomainCheckDestroy(&domain),
116 Steps: []resource.TestStep{
117 {
118 Config: interpolateTerraformTemplateDomain(testAccDomainConfig_import),
119 Check: resource.ComposeTestCheckFunc(
120 testAccDomainCheckExists("mailgun_domain.exemple",&domain),
121 ),
122 },
123 {
124 ResourceName: "mailgun_domain.exemple",
125 ImportState: true,
126 ImportStateVerify: true,
127 },
128 },
129 })
130}
131
40587421
AG
132func testAccDomainCheckExists(rn string, domain *fullDomain) resource.TestCheckFunc {
133 return func(s *terraform.State) error {
134 rs, ok := s.RootModule().Resources[rn]
135 if !ok {
136 return fmt.Errorf("resource not found: %s", rn)
137 }
138
139 if rs.Primary.ID == "" {
140 return fmt.Errorf("domainID not set")
141 }
142
143 mg := testAccProvider.Meta().(*mailgun.MailgunImpl)
144
145 domainId := rs.Primary.ID
146
147 gotDomain, err := getFullDomain(mg, domainId)
148 if err != nil {
149 return fmt.Errorf("error getting domain: %s", err)
150 }
151
152 *domain = *gotDomain
153
154 return nil
155 }
156}
157
158func testAccDomainCheckAttributes(rn string, domain *fullDomain) resource.TestCheckFunc {
159 return func(s *terraform.State) error {
160 attrs := s.RootModule().Resources[rn].Primary.Attributes
161
162 check := func(key, stateValue, domainValue string) error {
163 if domainValue != stateValue {
164 return fmt.Errorf("different values for %s in state (%s) and in mailgun (%s)",
165 key, stateValue, domainValue)
166 }
167 return nil
168 }
169
170 for key, value := range attrs {
171 var err error
172
173 switch key {
174 case "name":
175 err = check(key, value, domain.domainResponse.Domain.Name)
176 case "smtp_password":
177 err = check(key, value, domain.domainResponse.Domain.SMTPPassword)
178 case "smtp_login":
179 err = check(key, value, domain.domainResponse.Domain.SMTPLogin)
180 case "wildcard":
181 err = check(key, value, strconv.FormatBool(domain.domainResponse.Domain.Wildcard))
182 case "state":
183 err = check(key, value, domain.domainResponse.Domain.State)
184 case "open_tracking_settings_active":
185 err = check(key, value, strconv.FormatBool(domain.domainTracking.Open.Active))
186 case "click_tracking_settings_active":
187 err = check(key, value, strconv.FormatBool(domain.domainTracking.Click.Active))
188 case "unsubscribe_tracking_settings_active":
189 err = check(key, value, strconv.FormatBool(domain.domainTracking.Unsubscribe.Active))
190 case "unsubscribe_tracking_settings_html_footer":
191 err = check(key, value, domain.domainTracking.Unsubscribe.HTMLFooter)
192 case "unsubscribe_tracking_settings_text_footer":
193 err = check(key, value, domain.domainTracking.Unsubscribe.TextFooter)
194 case "skip_verification":
195 err = check(key, value, strconv.FormatBool(domain.domainConnection.SkipVerification))
196 case "require_tls":
197 err = check(key, value, strconv.FormatBool(domain.domainConnection.RequireTLS))
198 }
199 if err != nil {
200 return err
201 }
202 }
203 return nil
204 }
205}
206
207func testAccDomainCheckDestroy(domain *fullDomain) resource.TestCheckFunc {
208 return func(s *terraform.State) error {
209 mg := testAccProvider.Meta().(*mailgun.MailgunImpl)
210 ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
211 defer cancel()
212
213 _, err := mg.GetDomain(ctx, domain.domainResponse.Domain.Name)
214 if err == nil {
215 return fmt.Errorf("domain still exists")
216 }
217
218 return nil
219 }
220}
221
222func interpolateTerraformTemplateDomain(template string) string {
223 domainName := ""
224
225 if v := os.Getenv("MAILGUN_DOMAIN"); v != "" {
226 domainName = v
227 }
228
229 return fmt.Sprintf(template, domainName)
230}
231
232const testAccDomainConfig_basic = `
233resource "mailgun_domain" "exemple" {
234 name="%s"
3d14d0f6
AG
235 wildcard=true
236 credentials{
237 login="aaaaaaa"
238 password="adfshfjqdskjhgfksdgfkqgfk"
239 }
40587421
AG
240}
241`
242
243const testAccDomainConfig_update = `
244resource "mailgun_domain" "exemple" {
245 name="%s"
3d14d0f6
AG
246 credentials{
247 login="aaaaaaa"
248 password="adfshfjqdskjhgfksdgfkqgfk"
249 }
250
40587421
AG
251}
252`
70ac6365
AG
253const testAccDomainConfig_import = `
254resource "mailgun_domain" "exemple" {
255 name = "%s"
256}
257`