dnsimple 3.1.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -0
  3. data/.rubocop_dnsimple.yml +24 -18
  4. data/CHANGELOG.md +17 -5
  5. data/CONTRIBUTING.md +2 -2
  6. data/Gemfile +0 -1
  7. data/README.md +14 -3
  8. data/dnsimple.gemspec +1 -1
  9. data/lib/dnsimple/client.rb +5 -5
  10. data/lib/dnsimple/client/certificates.rb +89 -0
  11. data/lib/dnsimple/client/clients.rb +37 -0
  12. data/lib/dnsimple/client/collaborators.rb +76 -0
  13. data/lib/dnsimple/client/domains_pushes.rb +97 -0
  14. data/lib/dnsimple/client/registrar.rb +2 -2
  15. data/lib/dnsimple/client/registrar_delegation.rb +42 -0
  16. data/lib/dnsimple/client/services_domains.rb +82 -0
  17. data/lib/dnsimple/client/templates.rb +0 -5
  18. data/lib/dnsimple/client/templates_domains.rb +29 -0
  19. data/lib/dnsimple/client/vanity_name_servers.rb +47 -0
  20. data/lib/dnsimple/client/zones.rb +17 -0
  21. data/lib/dnsimple/client/zones_records.rb +9 -9
  22. data/lib/dnsimple/struct.rb +6 -1
  23. data/lib/dnsimple/struct/certificate.rb +37 -0
  24. data/lib/dnsimple/struct/certificate_bundle.rb +24 -0
  25. data/lib/dnsimple/struct/collaborator.rb +34 -0
  26. data/lib/dnsimple/struct/domain_push.rb +28 -0
  27. data/lib/dnsimple/struct/tld.rb +12 -0
  28. data/lib/dnsimple/struct/zone_file.rb +10 -0
  29. data/lib/dnsimple/struct/{record.rb → zone_record.rb} +4 -1
  30. data/lib/dnsimple/version.rb +1 -1
  31. data/spec/dnsimple/client/accounts_spec.rb +1 -1
  32. data/spec/dnsimple/client/certificates_spec.rb +206 -0
  33. data/spec/dnsimple/client/collaborators_spec.rb +162 -0
  34. data/spec/dnsimple/client/contacts_spec.rb +5 -5
  35. data/spec/dnsimple/client/domains_email_forwards_spec.rb +5 -5
  36. data/spec/dnsimple/client/domains_pushes_spec.rb +162 -0
  37. data/spec/dnsimple/client/domains_spec.rb +6 -6
  38. data/spec/dnsimple/client/registrar_delegation_spec.rb +51 -0
  39. data/spec/dnsimple/client/registrar_spec.rb +6 -6
  40. data/spec/dnsimple/client/registrar_whois_privacy_spec.rb +4 -4
  41. data/spec/dnsimple/client/services_domains_spec.rb +115 -0
  42. data/spec/dnsimple/client/services_spec.rb +1 -1
  43. data/spec/dnsimple/client/templates_domains_spec.rb +32 -0
  44. data/spec/dnsimple/client/templates_records_spec.rb +1 -1
  45. data/spec/dnsimple/client/templates_spec.rb +25 -1
  46. data/spec/dnsimple/client/tlds_spec.rb +8 -4
  47. data/spec/dnsimple/client/vanity_name_servers_spec.rb +54 -0
  48. data/spec/dnsimple/client/webhooks_spec.rb +2 -2
  49. data/spec/dnsimple/client/zones_records_spec.rb +34 -23
  50. data/spec/dnsimple/client/zones_spec.rb +40 -4
  51. data/spec/fixtures.http/acceptPush/success.http +17 -0
  52. data/spec/fixtures.http/addCollaborator/invite-success.http +21 -0
  53. data/spec/fixtures.http/addCollaborator/success.http +21 -0
  54. data/spec/fixtures.http/appliedServices/success.http +21 -0
  55. data/spec/fixtures.http/applyService/created.http +17 -0
  56. data/spec/fixtures.http/applyTemplate/success.http +13 -0
  57. data/spec/fixtures.http/changeDomainDelegationFromVanity/success.http +17 -0
  58. data/spec/fixtures.http/changeDomainDelegationToVanity/success.http +21 -0
  59. data/spec/fixtures.http/createZoneRecord/created.http +13 -9
  60. data/spec/fixtures.http/disableVanityNameServers/success.http +17 -0
  61. data/spec/fixtures.http/downloadCertificate/success.http +21 -0
  62. data/spec/fixtures.http/enableVanityNameServers/success.http +21 -0
  63. data/spec/fixtures.http/getCertificate/success.http +21 -0
  64. data/spec/fixtures.http/getCertificatePrivateKey/success.http +21 -0
  65. data/spec/fixtures.http/getTld/success.http +13 -9
  66. data/spec/fixtures.http/getZoneFile/success.http +21 -0
  67. data/spec/fixtures.http/getZoneRecord/success.http +13 -9
  68. data/spec/fixtures.http/initiatePush/success.http +21 -0
  69. data/spec/fixtures.http/{accounts → listAccounts}/success-account.http +0 -0
  70. data/spec/fixtures.http/{accounts → listAccounts}/success-user.http +0 -0
  71. data/spec/fixtures.http/listCertificates/success.http +21 -0
  72. data/spec/fixtures.http/listCollaborators/success.http +21 -0
  73. data/spec/fixtures.http/listPushes/success.http +21 -0
  74. data/spec/fixtures.http/listTlds/success.http +13 -9
  75. data/spec/fixtures.http/listZoneRecords/success.http +13 -9
  76. data/spec/fixtures.http/notfound-certificate.http +16 -0
  77. data/spec/fixtures.http/notfound-collaborator.http +16 -0
  78. data/spec/fixtures.http/notfound-contact.http +1 -1
  79. data/spec/fixtures.http/notfound-domainpush.http +12 -0
  80. data/spec/fixtures.http/rejectPush/success.http +17 -0
  81. data/spec/fixtures.http/removeCollaborator/success.http +17 -0
  82. data/spec/fixtures.http/unapplyService/success.http +17 -0
  83. data/spec/fixtures.http/updateZoneRecord/success.http +13 -9
  84. metadata +80 -10
@@ -47,7 +47,7 @@ describe Dnsimple::Client, ".contacts" do
47
47
 
48
48
  response.data.each do |result|
49
49
  expect(result).to be_a(Dnsimple::Struct::Contact)
50
- expect(result.id).to be_a(Fixnum)
50
+ expect(result.id).to be_a(Integer)
51
51
  end
52
52
  end
53
53
 
@@ -56,9 +56,9 @@ describe Dnsimple::Client, ".contacts" do
56
56
 
57
57
  expect(response.respond_to?(:page)).to be_truthy
58
58
  expect(response.page).to eq(1)
59
- expect(response.per_page).to be_a(Fixnum)
60
- expect(response.total_entries).to be_a(Fixnum)
61
- expect(response.total_pages).to be_a(Fixnum)
59
+ expect(response.per_page).to be_a(Integer)
60
+ expect(response.total_entries).to be_a(Integer)
61
+ expect(response.total_pages).to be_a(Integer)
62
62
  end
63
63
  end
64
64
 
@@ -106,7 +106,7 @@ describe Dnsimple::Client, ".contacts" do
106
106
 
107
107
  result = response.data
108
108
  expect(result).to be_a(Dnsimple::Struct::Contact)
109
- expect(result.id).to be_a(Fixnum)
109
+ expect(result.id).to be_a(Integer)
110
110
  end
111
111
  end
112
112
 
@@ -48,7 +48,7 @@ describe Dnsimple::Client, ".domains" do
48
48
 
49
49
  response.data.each do |result|
50
50
  expect(result).to be_a(Dnsimple::Struct::EmailForward)
51
- expect(result.id).to be_a(Fixnum)
51
+ expect(result.id).to be_a(Integer)
52
52
  end
53
53
  end
54
54
 
@@ -57,9 +57,9 @@ describe Dnsimple::Client, ".domains" do
57
57
 
58
58
  expect(response.respond_to?(:page)).to be_truthy
59
59
  expect(response.page).to eq(1)
60
- expect(response.per_page).to be_a(Fixnum)
61
- expect(response.total_entries).to be_a(Fixnum)
62
- expect(response.total_pages).to be_a(Fixnum)
60
+ expect(response.per_page).to be_a(Integer)
61
+ expect(response.total_entries).to be_a(Integer)
62
+ expect(response.total_pages).to be_a(Integer)
63
63
  end
64
64
 
65
65
  context "when the domain does not exist" do
@@ -120,7 +120,7 @@ describe Dnsimple::Client, ".domains" do
120
120
 
121
121
  result = response.data
122
122
  expect(result).to be_a(Dnsimple::Struct::EmailForward)
123
- expect(result.id).to be_a(Fixnum)
123
+ expect(result.id).to be_a(Integer)
124
124
  end
125
125
  end
126
126
 
@@ -0,0 +1,162 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dnsimple::Client, ".domains" do
4
+
5
+ subject { described_class.new(base_url: "https://api.dnsimple.test", access_token: "a1b2c3").domains }
6
+
7
+ describe "#initiate_push" do
8
+ let(:account_id) { 1010 }
9
+ let(:domain_id) { "example.com" }
10
+
11
+ before do
12
+ stub_request(:post, %r{/v2/#{account_id}/domains/#{domain_id}/pushes$}).
13
+ to_return(read_http_fixture("initiatePush/success.http"))
14
+ end
15
+
16
+ let(:attributes) { { new_account_email: "admin@target-account.test" } }
17
+
18
+ it "builds the correct request" do
19
+ subject.initiate_push(account_id, domain_id, attributes)
20
+
21
+ expect(WebMock).to have_requested(:post, "https://api.dnsimple.test/v2/#{account_id}/domains/#{domain_id}/pushes").
22
+ with(body: attributes).
23
+ with(headers: { 'Accept' => 'application/json' })
24
+ end
25
+
26
+ it "returns the domain push" do
27
+ response = subject.initiate_push(account_id, domain_id, attributes)
28
+ expect(response).to be_a(Dnsimple::Response)
29
+
30
+ result = response.data
31
+ expect(result).to be_a(Dnsimple::Struct::DomainPush)
32
+ expect(result.id).to be_a(Integer)
33
+ end
34
+ end
35
+
36
+ describe "#pushes" do
37
+ let(:account_id) { 2020 }
38
+
39
+ before do
40
+ stub_request(:get, %r{/v2/#{account_id}/pushes}).
41
+ to_return(read_http_fixture("listPushes/success.http"))
42
+ end
43
+
44
+ it "builds the correct request" do
45
+ subject.pushes(account_id)
46
+
47
+ expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/pushes").
48
+ with(headers: { 'Accept' => 'application/json' })
49
+ end
50
+
51
+ it "supports pagination" do
52
+ subject.pushes(account_id, page: 2)
53
+
54
+ expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/pushes?page=2")
55
+ end
56
+
57
+ it "supports extra request options" do
58
+ subject.pushes(account_id, query: { foo: "bar" })
59
+
60
+ expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/pushes?foo=bar")
61
+ end
62
+
63
+ it "returns a list of domain pushes" do
64
+ response = subject.pushes(account_id)
65
+
66
+ expect(response).to be_a(Dnsimple::PaginatedResponse)
67
+ expect(response.data).to be_a(Array)
68
+ expect(response.data.size).to eq(2)
69
+
70
+ response.data.each do |result|
71
+ expect(result).to be_a(Dnsimple::Struct::DomainPush)
72
+ expect(result.id).to be_a(Integer)
73
+ end
74
+ end
75
+
76
+ it "exposes the pagination information" do
77
+ response = subject.pushes(account_id)
78
+
79
+ expect(response.respond_to?(:page)).to be_truthy
80
+ expect(response.page).to eq(1)
81
+ expect(response.per_page).to be_a(Integer)
82
+ expect(response.total_entries).to be_a(Integer)
83
+ expect(response.total_pages).to be_a(Integer)
84
+ end
85
+ end
86
+
87
+ describe "#accept_push" do
88
+ let(:account_id) { 2020 }
89
+ let(:push_id) { 1 }
90
+
91
+ before do
92
+ stub_request(:post, %r{/v2/#{account_id}/pushes/#{push_id}$}).
93
+ to_return(read_http_fixture("acceptPush/success.http"))
94
+ end
95
+
96
+ let(:attributes) { { contact_id: 2 } }
97
+
98
+ it "builds the correct request" do
99
+ subject.accept_push(account_id, push_id, attributes)
100
+
101
+ expect(WebMock).to have_requested(:post, "https://api.dnsimple.test/v2/#{account_id}/pushes/#{push_id}").
102
+ with(body: attributes).
103
+ with(headers: { 'Accept' => 'application/json' })
104
+ end
105
+
106
+ it "returns nothing" do
107
+ response = subject.accept_push(account_id, push_id, attributes)
108
+ expect(response).to be_a(Dnsimple::Response)
109
+
110
+ result = response.data
111
+ expect(result).to be_nil
112
+ end
113
+
114
+ context "when the domain push does not exist" do
115
+ it "raises NotFoundError" do
116
+ stub_request(:post, %r{/v2}).
117
+ to_return(read_http_fixture("notfound-domainpush.http"))
118
+
119
+ expect {
120
+ subject.accept_push(account_id, push_id, attributes)
121
+ }.to raise_error(Dnsimple::NotFoundError)
122
+ end
123
+ end
124
+ end
125
+
126
+ describe "#reject_push" do
127
+ let(:account_id) { 2020 }
128
+ let(:push_id) { 1 }
129
+
130
+ before do
131
+ stub_request(:delete, %r{/v2/#{account_id}/pushes/#{push_id}$}).
132
+ to_return(read_http_fixture("rejectPush/success.http"))
133
+ end
134
+
135
+ it "builds the correct request" do
136
+ subject.reject_push(account_id, push_id)
137
+
138
+ expect(WebMock).to have_requested(:delete, "https://api.dnsimple.test/v2/#{account_id}/pushes/#{push_id}").
139
+ with(headers: { 'Accept' => 'application/json' })
140
+ end
141
+
142
+ it "returns nothing" do
143
+ response = subject.reject_push(account_id, push_id)
144
+ expect(response).to be_a(Dnsimple::Response)
145
+
146
+ result = response.data
147
+ expect(result).to be_nil
148
+ end
149
+
150
+ context "when the domain push does not exist" do
151
+ it "raises NotFoundError" do
152
+ stub_request(:delete, %r{/v2}).
153
+ to_return(read_http_fixture("notfound-domainpush.http"))
154
+
155
+ expect {
156
+ subject.reject_push(account_id, push_id)
157
+ }.to raise_error(Dnsimple::NotFoundError)
158
+ end
159
+ end
160
+ end
161
+
162
+ end
@@ -53,7 +53,7 @@ describe Dnsimple::Client, ".domains" do
53
53
 
54
54
  response.data.each do |result|
55
55
  expect(result).to be_a(Dnsimple::Struct::Domain)
56
- expect(result.id).to be_a(Fixnum)
56
+ expect(result.id).to be_a(Integer)
57
57
  end
58
58
  end
59
59
 
@@ -62,9 +62,9 @@ describe Dnsimple::Client, ".domains" do
62
62
 
63
63
  expect(response.respond_to?(:page)).to be_truthy
64
64
  expect(response.page).to eq(1)
65
- expect(response.per_page).to be_a(Fixnum)
66
- expect(response.total_entries).to be_a(Fixnum)
67
- expect(response.total_pages).to be_a(Fixnum)
65
+ expect(response.per_page).to be_a(Integer)
66
+ expect(response.total_entries).to be_a(Integer)
67
+ expect(response.total_pages).to be_a(Integer)
68
68
  end
69
69
  end
70
70
 
@@ -118,7 +118,7 @@ describe Dnsimple::Client, ".domains" do
118
118
 
119
119
  result = response.data
120
120
  expect(result).to be_a(Dnsimple::Struct::Domain)
121
- expect(result.id).to be_a(Fixnum)
121
+ expect(result.id).to be_a(Integer)
122
122
  end
123
123
  end
124
124
 
@@ -224,7 +224,7 @@ describe Dnsimple::Client, ".domains" do
224
224
 
225
225
  result = response.data
226
226
  expect(result).to be_a(Dnsimple::Struct::Domain)
227
- expect(result.id).to be_a(Fixnum)
227
+ expect(result.id).to be_a(Integer)
228
228
  end
229
229
  end
230
230
 
@@ -52,4 +52,55 @@ describe Dnsimple::Client, ".registrar" do
52
52
  expect(response.data).to match_array(%w(ns1.dnsimple.com ns2.dnsimple.com ns3.dnsimple.com ns4.dnsimple.com))
53
53
  end
54
54
  end
55
+
56
+ describe "#change_domain_delegation_to_vanity" do
57
+ let(:account_id) { 1010 }
58
+
59
+ before do
60
+ stub_request(:put, %r{/v2/#{account_id}/registrar/domains/.+/delegation/vanity$}).
61
+ to_return(read_http_fixture("changeDomainDelegationToVanity/success.http"))
62
+ end
63
+
64
+ let(:attributes) { %w(ns1.example.com ns2.example.com) }
65
+
66
+ it "builds the correct request" do
67
+ subject.change_domain_delegation_to_vanity(account_id, domain_name = "example.com", attributes)
68
+
69
+ expect(WebMock).to have_requested(:put, "https://api.dnsimple.test/v2/#{account_id}/registrar/domains/#{domain_name}/delegation/vanity").
70
+ with(body: JSON.dump(attributes)).
71
+ with(headers: { "Accept" => "application/json" })
72
+ end
73
+
74
+ it "returns vanity name servers of the domain" do
75
+ response = subject.change_domain_delegation_to_vanity(account_id, "example.com", attributes)
76
+ expect(response).to be_a(Dnsimple::Response)
77
+
78
+ vanity_name_servers = response.data.map { |ns| ns["name"] }
79
+ expect(vanity_name_servers).to match_array(%w(ns1.example.com ns2.example.com))
80
+ end
81
+ end
82
+
83
+ describe "#change_domain_delegation_from_vanity" do
84
+ let(:account_id) { 1010 }
85
+
86
+ before do
87
+ stub_request(:delete, %r{/v2/#{account_id}/registrar/domains/.+/delegation/vanity$}).
88
+ to_return(read_http_fixture("changeDomainDelegationFromVanity/success.http"))
89
+ end
90
+
91
+ it "builds the correct request" do
92
+ subject.change_domain_delegation_from_vanity(account_id, domain_name = "example.com")
93
+
94
+ expect(WebMock).to have_requested(:delete, "https://api.dnsimple.test/v2/#{account_id}/registrar/domains/#{domain_name}/delegation/vanity").
95
+ with(headers: { "Accept" => "application/json" })
96
+ end
97
+
98
+ it "returns empty response" do
99
+ response = subject.change_domain_delegation_from_vanity(account_id, "example.com")
100
+ expect(response).to be_a(Dnsimple::Response)
101
+
102
+ result = response.data
103
+ expect(result).to be_nil
104
+ end
105
+ end
55
106
  end
@@ -56,7 +56,7 @@ describe Dnsimple::Client, ".registrar" do
56
56
 
57
57
  result = response.data
58
58
  expect(result).to be_a(Dnsimple::Struct::Domain)
59
- expect(result.id).to be_a(Fixnum)
59
+ expect(result.id).to be_a(Integer)
60
60
  end
61
61
 
62
62
  context "when the attributes are incomplete" do
@@ -90,10 +90,10 @@ describe Dnsimple::Client, ".registrar" do
90
90
 
91
91
  result = response.data
92
92
  expect(result).to be_a(Dnsimple::Struct::Domain)
93
- expect(result.id).to be_a(Fixnum)
93
+ expect(result.id).to be_a(Integer)
94
94
  end
95
95
 
96
- context "when it is too son for the domain to be renewed" do
96
+ context "when it is too soon for the domain to be renewed" do
97
97
  it "raises a BadRequestError" do
98
98
  stub_request(:post, %r{/v2/#{account_id}/registrar/domains/.+/renewal$}).
99
99
  to_return(read_http_fixture("renewDomain/error-tooearly.http"))
@@ -113,7 +113,7 @@ describe Dnsimple::Client, ".registrar" do
113
113
  to_return(read_http_fixture("transferDomain/success.http"))
114
114
  end
115
115
 
116
- let(:attributes) { { registrant_id: "10", auth_info: "x1y2z3" } }
116
+ let(:attributes) { { registrant_id: "10", auth_code: "x1y2z3" } }
117
117
 
118
118
  it "builds the correct request" do
119
119
  subject.transfer_domain(account_id, domain_name = "example.com", attributes)
@@ -135,7 +135,7 @@ describe Dnsimple::Client, ".registrar" do
135
135
 
136
136
  context "when the attributes are incomplete" do
137
137
  it "raises ArgumentError" do
138
- expect { subject.transfer_domain(account_id, "example.com", auth_info: "x1y2z3") }.to raise_error(ArgumentError)
138
+ expect { subject.transfer_domain(account_id, "example.com", auth_code: "x1y2z3") }.to raise_error(ArgumentError)
139
139
  end
140
140
  end
141
141
 
@@ -150,7 +150,7 @@ describe Dnsimple::Client, ".registrar" do
150
150
  end
151
151
  end
152
152
 
153
- context "when :auth_info wasn't provided and is required by the TLD" do
153
+ context "when :auth_code wasn't provided and is required by the TLD" do
154
154
  it "raises a BadRequestError" do
155
155
  stub_request(:post, %r{/v2/#{account_id}/registrar/domains/.+/transfer$}).
156
156
  to_return(read_http_fixture("transferDomain/error-missing-authcode.http"))
@@ -26,7 +26,7 @@ describe Dnsimple::Client, ".registrar" do
26
26
 
27
27
  result = response.data
28
28
  expect(result).to be_a(Dnsimple::Struct::WhoisPrivacy)
29
- expect(result.domain_id).to be_kind_of(Fixnum)
29
+ expect(result.domain_id).to be_kind_of(Integer)
30
30
  expect(result.enabled).to be_truthy
31
31
  expect(result.expires_on).to be_kind_of(String)
32
32
  end
@@ -55,7 +55,7 @@ describe Dnsimple::Client, ".registrar" do
55
55
 
56
56
  result = response.data
57
57
  expect(result).to be_a(Dnsimple::Struct::WhoisPrivacy)
58
- expect(result.domain_id).to be_kind_of(Fixnum)
58
+ expect(result.domain_id).to be_kind_of(Integer)
59
59
  expect(result.enabled).to be_truthy
60
60
  expect(result.expires_on).to be_kind_of(String)
61
61
  end
@@ -81,7 +81,7 @@ describe Dnsimple::Client, ".registrar" do
81
81
 
82
82
  result = response.data
83
83
  expect(result).to be_a(Dnsimple::Struct::WhoisPrivacy)
84
- expect(result.domain_id).to be_kind_of(Fixnum)
84
+ expect(result.domain_id).to be_kind_of(Integer)
85
85
  expect(result.enabled).to be_nil
86
86
  expect(result.expires_on).to be_nil
87
87
  end
@@ -110,7 +110,7 @@ describe Dnsimple::Client, ".registrar" do
110
110
 
111
111
  result = response.data
112
112
  expect(result).to be_a(Dnsimple::Struct::WhoisPrivacy)
113
- expect(result.domain_id).to be_kind_of(Fixnum)
113
+ expect(result.domain_id).to be_kind_of(Integer)
114
114
  expect(result.enabled).to be_falsey
115
115
  expect(result.expires_on).to be_kind_of(String)
116
116
  end
@@ -0,0 +1,115 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dnsimple::Client, ".services" do
4
+
5
+ subject { described_class.new(base_url: "https://api.dnsimple.test", access_token: "a1b2c3").services }
6
+
7
+
8
+ describe "#applied_services" do
9
+ let(:account_id) { 1010 }
10
+ let(:domain_id) { 'example.com' }
11
+
12
+ before do
13
+ stub_request(:get, %r{/v2/#{account_id}/domains/#{domain_id}/services}).
14
+ to_return(read_http_fixture("appliedServices/success.http"))
15
+ end
16
+
17
+ it "builds the correct request" do
18
+ subject.applied_services(account_id, domain_id)
19
+
20
+ expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/domains/#{domain_id}/services").
21
+ with(headers: { "Accept" => "application/json" })
22
+ end
23
+
24
+ it "supports pagination" do
25
+ subject.applied_services(account_id, domain_id, page: 2)
26
+
27
+ expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/domains/#{domain_id}/services?page=2")
28
+ end
29
+
30
+ it "supports extra request options" do
31
+ subject.applied_services(account_id, domain_id, query: { foo: "bar" })
32
+
33
+ expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/domains/#{domain_id}/services?foo=bar")
34
+ end
35
+
36
+ it "supports sorting" do
37
+ subject.applied_services(account_id, domain_id, sort: "short_name:asc")
38
+
39
+ expect(WebMock).to have_requested(:get, "https://api.dnsimple.test/v2/#{account_id}/domains/#{domain_id}/services?sort=short_name:asc")
40
+ end
41
+
42
+ it "returns the list of available services" do
43
+ response = subject.applied_services(account_id, domain_id)
44
+ expect(response).to be_a(Dnsimple::CollectionResponse)
45
+
46
+ response.data.each do |service|
47
+ expect(service).to be_a(Dnsimple::Struct::Service)
48
+ expect(service.id).to be_a(Integer)
49
+ expect(service.name).to be_a(String)
50
+ expect(service.short_name).to be_a(String)
51
+ expect(service.description).to be_a(String)
52
+
53
+ service.settings.each do |service_setting|
54
+ expect(service_setting).to be_a(Dnsimple::Struct::Service::Setting)
55
+ end
56
+ end
57
+ end
58
+ end
59
+
60
+ describe "#apply_service" do
61
+ let(:account_id) { 1010 }
62
+ let(:domain_id) { "example.com" }
63
+ let(:service_id) { "service1" }
64
+
65
+ before do
66
+ stub_request(:post, %r{/v2/#{account_id}/domains/#{domain_id}/services/#{service_id}$}).
67
+ to_return(read_http_fixture("applyService/created.http"))
68
+ end
69
+
70
+ let(:settings) { { app: "foo" } }
71
+
72
+ it "builds the correct request" do
73
+ subject.apply_service(account_id, service_id, domain_id, settings)
74
+
75
+ expect(WebMock).to have_requested(:post, "https://api.dnsimple.test/v2/#{account_id}/domains/#{domain_id}/services/#{service_id}").
76
+ with(body: settings).
77
+ with(headers: { 'Accept' => 'application/json' })
78
+ end
79
+
80
+ it "returns empty response" do
81
+ response = subject.apply_service(account_id, service_id, domain_id, settings)
82
+ expect(response).to be_a(Dnsimple::Response)
83
+
84
+ result = response.data
85
+ expect(result).to be_nil
86
+ end
87
+ end
88
+
89
+ describe "#unapply_service" do
90
+ let(:account_id) { 1010 }
91
+ let(:domain_id) { "example.com" }
92
+ let(:service_id) { "service1" }
93
+
94
+ before do
95
+ stub_request(:delete, %r{/v2/#{account_id}/domains/#{domain_id}/services/#{service_id}$}).
96
+ to_return(read_http_fixture("unapplyService/success.http"))
97
+ end
98
+
99
+ it "builds the correct request" do
100
+ subject.unapply_service(account_id, service_id, domain_id)
101
+
102
+ expect(WebMock).to have_requested(:delete, "https://api.dnsimple.test/v2/#{account_id}/domains/#{domain_id}/services/#{service_id}").
103
+ with(headers: { 'Accept' => 'application/json' })
104
+ end
105
+
106
+ it "returns empty response" do
107
+ response = subject.unapply_service(account_id, service_id, domain_id)
108
+ expect(response).to be_a(Dnsimple::Response)
109
+
110
+ result = response.data
111
+ expect(result).to be_nil
112
+ end
113
+ end
114
+
115
+ end