dnsimple 2.0.0.alpha2 → 2.0.0.alpha3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.markdown +6 -2
  3. data/README.markdown +32 -30
  4. data/dnsimple.gemspec +1 -2
  5. data/lib/dnsimple.rb +2 -13
  6. data/lib/dnsimple/client.rb +164 -53
  7. data/lib/dnsimple/client/certificates_service.rb +98 -0
  8. data/lib/dnsimple/client/client_service.rb +8 -0
  9. data/lib/dnsimple/client/contacts_service.rb +82 -0
  10. data/lib/dnsimple/client/domains_service.rb +333 -0
  11. data/lib/dnsimple/client/name_servers_service.rb +69 -0
  12. data/lib/dnsimple/client/registrars_service.rb +105 -0
  13. data/lib/dnsimple/client/services_service.rb +95 -0
  14. data/lib/dnsimple/client/templates_service.rb +180 -0
  15. data/lib/dnsimple/client/users_service.rb +37 -0
  16. data/lib/dnsimple/compatibility.rb +46 -0
  17. data/lib/dnsimple/default.rb +86 -0
  18. data/lib/dnsimple/error.rb +7 -11
  19. data/lib/dnsimple/extra.rb +54 -0
  20. data/lib/dnsimple/struct.rb +29 -0
  21. data/lib/dnsimple/struct/certificate.rb +56 -0
  22. data/lib/dnsimple/struct/contact.rb +61 -0
  23. data/lib/dnsimple/struct/domain.rb +40 -0
  24. data/lib/dnsimple/struct/email_forward.rb +14 -0
  25. data/lib/dnsimple/struct/extended_attribute.rb +39 -0
  26. data/lib/dnsimple/struct/membership.rb +22 -0
  27. data/lib/dnsimple/struct/price.rb +16 -0
  28. data/lib/dnsimple/struct/record.rb +22 -0
  29. data/lib/dnsimple/struct/service.rb +19 -0
  30. data/lib/dnsimple/struct/template.rb +19 -0
  31. data/lib/dnsimple/struct/template_record.rb +24 -0
  32. data/lib/dnsimple/struct/transfer_order.rb +10 -0
  33. data/lib/dnsimple/struct/user.rb +17 -0
  34. data/lib/dnsimple/struct/whois_privacy.rb +19 -0
  35. data/lib/dnsimple/version.rb +1 -1
  36. data/spec/dnsimple/client/certificates_service_spec.rb +196 -0
  37. data/spec/dnsimple/client/contacts_service_spec.rb +179 -0
  38. data/spec/dnsimple/client/domains_service_spec.rb +662 -0
  39. data/spec/dnsimple/client/name_servers_service_spec.rb +131 -0
  40. data/spec/dnsimple/client/registrars_service_spec.rb +160 -0
  41. data/spec/dnsimple/client/services_service_spec.rb +162 -0
  42. data/spec/dnsimple/client/templates_service_spec.rb +371 -0
  43. data/spec/dnsimple/client/users_service_spec.rb +70 -0
  44. data/spec/dnsimple/client_spec.rb +108 -99
  45. data/spec/dnsimple/compatibility_spec.rb +57 -0
  46. data/spec/files/2fa/exchange-token.http +8 -11
  47. data/spec/files/badgateway.http +14 -0
  48. data/spec/files/certificates/configure/success.http +19 -0
  49. data/spec/files/certificates/index/success.http +1 -1
  50. data/spec/files/certificates/notfound.http +19 -0
  51. data/spec/files/certificates/purchase/success.http +19 -0
  52. data/spec/files/certificates/show/success.http +1 -1
  53. data/spec/files/certificates/submit/success.http +19 -0
  54. data/spec/files/contacts/create/badrequest-missingcontact.http +19 -0
  55. data/spec/files/contacts/create/badrequest-validationerror.http +19 -0
  56. data/spec/files/contacts/create/created.http +22 -0
  57. data/spec/files/contacts/delete/success-204.http +18 -0
  58. data/spec/files/{extended_attributes/com.http → contacts/delete/success.http} +5 -5
  59. data/spec/files/{domains/auto_renewal_enable → contacts/index}/success.http +6 -6
  60. data/spec/files/contacts/notfound.http +19 -0
  61. data/spec/files/contacts/update/success.http +21 -0
  62. data/spec/files/domains/create/created.http +21 -0
  63. data/spec/files/domains/index/success.http +11 -9
  64. data/spec/files/domains/notfound.http +11 -9
  65. data/spec/files/domains/show/success.http +12 -10
  66. data/spec/files/domains_autorenewal/disable/success.http +21 -0
  67. data/spec/files/domains_autorenewal/enable/success.http +21 -0
  68. data/spec/files/domains_autorenewal/notfound-domain.http +19 -0
  69. data/spec/files/domains_forwards/create/created.http +22 -0
  70. data/spec/files/domains_forwards/delete/success.http +17 -0
  71. data/spec/files/domains_forwards/get/success.http +21 -0
  72. data/spec/files/domains_forwards/list/success.http +21 -0
  73. data/spec/files/domains_forwards/notfound-domain.http +19 -0
  74. data/spec/files/domains_forwards/notfound.http +19 -0
  75. data/spec/files/domains_records/create/created.http +21 -0
  76. data/spec/files/domains_records/delete/success-204.http +18 -0
  77. data/spec/files/{contacts/show/notfound.http → domains_records/delete/success.http} +9 -7
  78. data/spec/files/{records → domains_records}/index/success.http +0 -0
  79. data/spec/files/{records/show → domains_records}/notfound.http +1 -1
  80. data/spec/files/{records → domains_records}/show/success.http +0 -0
  81. data/spec/files/domains_records/update/success.http +21 -0
  82. data/spec/files/domains_sharing/create/success.http +21 -0
  83. data/spec/files/domains_sharing/delete/success.http +17 -0
  84. data/spec/files/domains_sharing/list/success.http +21 -0
  85. data/spec/files/domains_sharing/notfound-domain.http +19 -0
  86. data/spec/files/domains_sharing/notfound.http +19 -0
  87. data/spec/files/domains_whois_privacy/disable/success.http +21 -0
  88. data/spec/files/domains_whois_privacy/enable/success.http +22 -0
  89. data/spec/files/domains_zones/get/success.http +21 -0
  90. data/spec/files/domains_zones/notfound-domain.http +19 -0
  91. data/spec/files/{domains/auto_renewal_disable/notfound.http → nameservers/change/success.http} +23 -21
  92. data/spec/files/nameservers/deregister/success.http +17 -0
  93. data/spec/files/{domains/auto_renewal_enable/notfound.http → nameservers/list/success.http} +23 -21
  94. data/spec/files/nameservers/notfound-domain.http +19 -0
  95. data/spec/files/nameservers/register/badrequest-valueerror.http +19 -0
  96. data/spec/files/nameservers/register/success.http +21 -0
  97. data/spec/files/registrars/check/available.http +19 -0
  98. data/spec/files/registrars/check/registered.http +21 -0
  99. data/spec/files/registrars/register/badrequest-missingdomain.http +19 -0
  100. data/spec/files/registrars/register/badrequest-missingregistrant.http +19 -0
  101. data/spec/files/registrars/register/success.http +21 -0
  102. data/spec/files/registrars/renew/badrequest-missingrenewal.http +19 -0
  103. data/spec/files/registrars/renew/badrequest-unable.http +19 -0
  104. data/spec/files/registrars/renew/success.http +21 -0
  105. data/spec/files/registrars/transfer/success.http +21 -0
  106. data/spec/files/registrars_extended_attributes/list/success.http +21 -0
  107. data/spec/files/registrars_prices/list/success.http +21 -0
  108. data/spec/files/services/applied/success.http +21 -0
  109. data/spec/files/services/apply/success.http +21 -0
  110. data/spec/files/services/available/success.http +21 -0
  111. data/spec/files/services/index/success.http +21 -0
  112. data/spec/files/services/notfound.http +19 -0
  113. data/spec/files/services/show/success.http +21 -0
  114. data/spec/files/services/unapply/success.http +21 -0
  115. data/spec/files/subscription/show/success.http +21 -0
  116. data/spec/files/templates/apply/success.http +21 -0
  117. data/spec/files/templates/create/created.http +22 -0
  118. data/spec/files/templates/delete/success-204.http +21 -0
  119. data/spec/files/templates/delete/success.http +21 -0
  120. data/spec/files/templates/index/success.http +21 -0
  121. data/spec/files/templates/notfound.http +19 -0
  122. data/spec/files/templates/show/success.http +12 -10
  123. data/spec/files/templates/update/success.http +21 -0
  124. data/spec/files/templates_records/create/created.http +22 -0
  125. data/spec/files/templates_records/delete/success-204.http +19 -0
  126. data/spec/files/templates_records/delete/success.http +21 -0
  127. data/spec/files/templates_records/index/success.http +21 -0
  128. data/spec/files/templates_records/notfound.http +19 -0
  129. data/spec/files/templates_records/show/success.http +21 -0
  130. data/spec/files/templates_records/update/success.http +21 -0
  131. data/spec/files/users/user/success.http +21 -0
  132. data/spec/spec_helper.rb +0 -2
  133. metadata +206 -73
  134. data/lib/dnsimple/base.rb +0 -10
  135. data/lib/dnsimple/certificate.rb +0 -143
  136. data/lib/dnsimple/contact.rb +0 -157
  137. data/lib/dnsimple/domain.rb +0 -252
  138. data/lib/dnsimple/extended_attribute.rb +0 -52
  139. data/lib/dnsimple/record.rb +0 -94
  140. data/lib/dnsimple/service.rb +0 -42
  141. data/lib/dnsimple/template.rb +0 -65
  142. data/lib/dnsimple/template_record.rb +0 -80
  143. data/lib/dnsimple/transfer_order.rb +0 -34
  144. data/lib/dnsimple/user.rb +0 -50
  145. data/spec/dnsimple/certificate_spec.rb +0 -59
  146. data/spec/dnsimple/contact_spec.rb +0 -45
  147. data/spec/dnsimple/domain_spec.rb +0 -241
  148. data/spec/dnsimple/extended_attributes_spec.rb +0 -54
  149. data/spec/dnsimple/record_spec.rb +0 -51
  150. data/spec/dnsimple/template_spec.rb +0 -31
  151. data/spec/dnsimple/user_spec.rb +0 -70
  152. data/spec/files/account/user/success.http +0 -19
  153. data/spec/files/certificates/show/notfound.http +0 -17
  154. data/spec/files/domains/auto_renewal_disable/success.http +0 -23
  155. data/spec/files/domains/create/success.http +0 -19
  156. data/spec/files/extended_attributes/ca.http +0 -19
  157. data/spec/files/extended_attributes/success.http +0 -19
  158. data/spec/files/templates/show/notfound.http +0 -17
@@ -1,45 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Dnsimple::Contact do
4
-
5
- describe ".find" do
6
- before do
7
- stub_request(:get, %r[/v1/contacts/2]).
8
- to_return(read_fixture("contacts/show/success.http"))
9
- end
10
-
11
- it "builds the correct request" do
12
- described_class.find("2")
13
-
14
- expect(WebMock).to have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/contacts/2").
15
- with(:headers => { 'Accept' => 'application/json' })
16
- end
17
-
18
- context "when the contact exists" do
19
- it "returns the contact" do
20
- result = described_class.find("2")
21
-
22
- expect(result).to be_a(described_class)
23
- expect(result.id).to eq(2)
24
- expect(result.first_name).to eq("Simone")
25
- expect(result.last_name).to eq("Carletti")
26
- expect(result.job_title).to eq("Underwater Programmer")
27
- expect(result.organization_name).to eq("Dnsimple")
28
- expect(result.email_address).to eq("example@example.com")
29
- expect(result.phone).to eq("+1 111 000000")
30
- expect(result.fax).to eq("+1 222 000000")
31
- expect(result.address1).to eq("Awesome Street")
32
- expect(result.address2).to eq("c/o Someone")
33
- expect(result.city).to eq("Rome")
34
- expect(result.state_province).to eq("RM")
35
- expect(result.postal_code).to eq("00171")
36
- expect(result.country).to eq("IT")
37
- expect(result.created_at).to eq("2013-11-08T17:23:15Z")
38
- expect(result.updated_at).to eq("2013-11-08T17:23:15Z")
39
-
40
- expect(result.phone_ext).to be_nil
41
- end
42
- end
43
- end
44
-
45
- end
@@ -1,241 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Dnsimple::Domain do
4
-
5
- let(:contact_id) { 1001 }
6
-
7
-
8
- describe ".list" do
9
- before do
10
- stub_request(:get, %r[/v1/domains$]).
11
- to_return(read_fixture("domains/index/success.http"))
12
- end
13
-
14
- it "builds the correct request" do
15
- described_class.list
16
-
17
- expect(WebMock).to have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/domains").
18
- with(headers: { 'Accept' => 'application/json' })
19
- end
20
-
21
- it "returns the list of domains" do
22
- results = described_class.list
23
-
24
- expect(results).to be_a(Array)
25
- expect(results.size).to eq(2)
26
-
27
- result = results[0]
28
- expect(result.id).to eq(228)
29
-
30
- result = results[1]
31
- expect(result.id).to eq(227)
32
- end
33
- end
34
-
35
- describe ".create" do
36
- before do
37
- stub_request(:post, %r[/v1/domains$]).
38
- to_return(read_fixture("domains/create/success.http"))
39
- end
40
-
41
- it "builds the correct request" do
42
- described_class.create("example.com")
43
-
44
- expect(WebMock).to have_requested(:post, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/domains").
45
- with(headers: { 'Accept' => 'application/json' }).
46
- with(body: { "domain" => { "name" => "example.com" }})
47
- end
48
-
49
- it "returns the domain" do
50
- result = described_class.create("example.com")
51
-
52
- expect(result).to be_a(described_class)
53
- expect(result.id).to eq(6)
54
- end
55
- end
56
-
57
- describe ".find" do
58
- before do
59
- stub_request(:get, %r[/v1/domains/example.com]).
60
- to_return(read_fixture("domains/show/success.http"))
61
- end
62
-
63
- it "builds the correct request" do
64
- described_class.find("example.com")
65
-
66
- expect(WebMock).to have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/domains/example.com").
67
- with(headers: { 'Accept' => 'application/json' })
68
- end
69
-
70
- it "returns the domain" do
71
- result = described_class.find("example.com")
72
-
73
- expect(result).to be_a(described_class)
74
- expect(result.id).to eq(6)
75
- expect(result.user_id).to eq(2)
76
- expect(result.registrant_id).to eq(2)
77
- expect(result.user_id).to eq(2)
78
- expect(result.name).to eq("test-1383931357.com")
79
- expect(result.state).to eq("registered")
80
- expect(result.auto_renew).to eq(true)
81
- expect(result.whois_protected).to eq(false)
82
- expect(result.expires_on).to eq("2015-11-08")
83
- expect(result.created_at).to eq("2013-11-08T17:22:48Z")
84
- expect(result.updated_at).to eq("2014-01-14T18:27:04Z")
85
- end
86
-
87
- context "when the domain does not exist" do
88
- it "raises RecordNotFound" do
89
- stub_request(:get, %r[/v1/domains/example.com]).
90
- to_return(read_fixture("domains/notfound.http"))
91
-
92
- expect {
93
- described_class.find("example.com")
94
- }.to raise_error(Dnsimple::RecordNotFound)
95
- end
96
- end
97
- end
98
-
99
- describe ".delete" do
100
- before do
101
- stub_request(:delete, %r[/v1/domains/example.com]).
102
- to_return(read_fixture("domains/delete/success.http"))
103
- end
104
-
105
- it "builds the correct request" do
106
- described_class.delete("example.com")
107
-
108
- expect(WebMock).to have_requested(:delete, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/domains/example.com").
109
- with(headers: { 'Accept' => 'application/json' })
110
- end
111
-
112
- it "returns nothing" do
113
- result = described_class.delete("example.com")
114
-
115
- expect(result).to be_truthy
116
- end
117
-
118
- it "supports HTTP 204" do
119
- stub_request(:delete, %r[/v1/domains/example.com]).
120
- to_return(read_fixture("domains/delete/success-204.http"))
121
-
122
- result = described_class.delete("example.com")
123
-
124
- expect(result).to be_truthy
125
- end
126
-
127
- context "when the domain does not exist" do
128
- it "raises RecordNotFound" do
129
- stub_request(:delete, %r[/v1/domains/example.com]).
130
- to_return(read_fixture("domains/notfound.http"))
131
-
132
- expect {
133
- described_class.delete("example.com")
134
- }.to raise_error(Dnsimple::RecordNotFound)
135
- end
136
- end
137
- end
138
-
139
-
140
- describe "#delete" do
141
- it "delegates to .delete" do
142
- subject = described_class.new(name: "example.com")
143
- described_class.expects(:delete).with(subject.name).returns(:returned)
144
-
145
- expect(subject.delete).to eq(:returned)
146
- end
147
- end
148
-
149
- describe "#enable_auto_renew" do
150
- let(:domain) { described_class.new(:name => 'example.com', :auto_renew => false) }
151
-
152
- context "when response is not 200" do
153
- before do
154
- stub_request(:post, %r[/v1/domains/example.com/auto_renewal]).
155
- to_return(read_fixture("domains/auto_renewal_enable/notfound.http"))
156
- end
157
-
158
- it "raises a RequestError" do
159
- expect { domain.enable_auto_renew }.to raise_error(Dnsimple::RequestError)
160
- end
161
- end
162
-
163
- context "when auto_renew is true" do
164
- let(:domain) { described_class.new(:name => 'example.com', :auto_renew => true) }
165
-
166
- it "does not send a web request" do
167
- domain.enable_auto_renew
168
- expect(WebMock).to have_not_been_made
169
- end
170
- end
171
-
172
- context "when auto_renew is false" do
173
- let(:domain) { described_class.new(:name => 'example.com', :auto_renew => false) }
174
-
175
- before do
176
- stub_request(:post, %r[/v1/domains/example.com/auto_renewal]).
177
- to_return(read_fixture("domains/auto_renewal_enable/success.http"))
178
- end
179
-
180
- it "builds the correct request to enable auto_renew" do
181
- domain.enable_auto_renew
182
-
183
- expect(WebMock).to have_requested(:post, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/domains/example.com/auto_renewal").
184
- with(headers: { 'Accept' => 'application/json' })
185
- end
186
-
187
- it "sets auto_renew to true on the domain" do
188
- domain.enable_auto_renew
189
- expect(domain.auto_renew).to be_truthy
190
- end
191
- end
192
-
193
- end
194
-
195
- describe "#disable_auto_renew" do
196
- let(:domain) { described_class.new(:name => 'example.com', :auto_renew => true) }
197
-
198
- context "when response is not 200" do
199
- before do
200
- stub_request(:delete, %r[/v1/domains/example.com/auto_renewal]).
201
- to_return(read_fixture("domains/auto_renewal_disable/notfound.http"))
202
- end
203
-
204
- it "raises a RequestError" do
205
- expect { domain.disable_auto_renew }.to raise_error(Dnsimple::RequestError)
206
- end
207
- end
208
-
209
- context "when auto_renew is false" do
210
- let(:domain) { described_class.new(:name => 'example.com', :auto_renew => false) }
211
-
212
- it "does not send a web request" do
213
- domain.disable_auto_renew
214
- expect(WebMock).to have_not_been_made
215
- end
216
- end
217
-
218
- context "when auto_renew is true" do
219
- let(:domain) { described_class.new(:name => 'example.com', :auto_renew => true) }
220
-
221
- before do
222
- stub_request(:delete, %r[/v1/domains/example.com/auto_renewal]).
223
- to_return(read_fixture("domains/auto_renewal_disable/success.http"))
224
- end
225
-
226
- it "builds the correct request to disable auto_renew" do
227
- domain.disable_auto_renew
228
-
229
- expect(WebMock).to have_requested(:delete, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/domains/example.com/auto_renewal").
230
- with(headers: { 'Accept' => 'application/json' })
231
- end
232
-
233
- it "sets auto_renew to false on the domain" do
234
- domain.disable_auto_renew
235
- expect(domain.auto_renew).to be_falsey
236
- end
237
- end
238
-
239
- end
240
-
241
- end
@@ -1,54 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Dnsimple::ExtendedAttribute do
4
-
5
- describe ".find" do
6
- before do
7
- stub_request(:get, %r[/v1/extended_attributes/com]).
8
- to_return(read_fixture("extended_attributes/success.http"))
9
- end
10
-
11
- it "builds the correct request" do
12
- described_class.find("com")
13
-
14
- expect(WebMock).to have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/extended_attributes/com").
15
- with(:headers => { 'Accept' => 'application/json' })
16
- end
17
-
18
- context "when the TLD has no attributes" do
19
- before do
20
- stub_request(:get, %r[/v1/extended_attributes/com]).
21
- to_return(read_fixture("extended_attributes/com.http"))
22
- end
23
-
24
- it "returns an empty list" do
25
- result = described_class.find("com")
26
-
27
- expect(result).to eq([])
28
- end
29
- end
30
-
31
- context "when the TLD has attributes" do
32
- before do
33
- stub_request(:get, %r[/v1/extended_attributes/ca]).
34
- to_return(read_fixture("extended_attributes/ca.http"))
35
- end
36
-
37
- it "returns the attributes" do
38
- result = described_class.find("ca")
39
-
40
- expect(result).to be_a(Array)
41
- expect(result.size).to eq(5)
42
-
43
- attribute = result[0]
44
- expect(attribute).to be_a(described_class)
45
- expect(attribute.name).to eq("cira_legal_type")
46
- expect(attribute.description).to eq("Legal type of registrant contact")
47
- expect(attribute.required).to be_truthy
48
- expect(attribute.options).to be_a(Array)
49
- expect(attribute.options.size).to eq(18)
50
- end
51
- end
52
- end
53
-
54
- end
@@ -1,51 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Dnsimple::Record do
4
-
5
- let(:domain) { Dnsimple::Domain.new(:name => 'example.com') }
6
-
7
-
8
- describe ".find" do
9
- before do
10
- stub_request(:get, %r[/v1/domains/example.com/records/2]).
11
- to_return(read_fixture("records/show/success.http"))
12
- end
13
-
14
- it "builds the correct request" do
15
- described_class.find(domain, "2")
16
-
17
- expect(WebMock).to have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/domains/example.com/records/2").
18
- with(:headers => { 'Accept' => 'application/json' })
19
- end
20
-
21
- context "when the record exists" do
22
- it "returns the record" do
23
- result = described_class.find(domain, "2")
24
-
25
- expect(result).to be_a(described_class)
26
- expect(result.id).to eq(1495)
27
- expect(result.domain).to be(domain)
28
- expect(result.name).to eq("www")
29
- expect(result.content).to eq("1.2.3.4")
30
- expect(result.ttl).to eq(3600)
31
- expect(result.prio).to be_nil
32
- expect(result.record_type).to eq("A")
33
- end
34
- end
35
- end
36
-
37
-
38
- describe "#fqdn" do
39
- it "joins the name and domain name" do
40
- record = described_class.new(:name => 'www', :domain => domain)
41
- expect(record.fqdn).to eq("www.#{domain.name}")
42
- end
43
-
44
- it "strips a blank name" do
45
- record = described_class.new(:name => '', :domain => domain)
46
- expect(record.fqdn).to eq(domain.name)
47
- end
48
- end
49
-
50
- end
51
-
@@ -1,31 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Dnsimple::Template do
4
-
5
- describe ".find" do
6
- before do
7
- stub_request(:get, %r[/v1/templates/google-apps]).
8
- to_return(read_fixture("templates/show/success.http"))
9
- end
10
-
11
- it "builds the correct request" do
12
- described_class.find("google-apps")
13
-
14
- expect(WebMock).to have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/templates/google-apps").
15
- with(:headers => { 'Accept' => 'application/json' })
16
- end
17
-
18
- context "when the template exists" do
19
- it "returns the template" do
20
- result = described_class.find("google-apps")
21
-
22
- expect(result).to be_a(described_class)
23
- expect(result.id).to eq(63)
24
- expect(result.name).to eq("Google Apps")
25
- expect(result.short_name).to eq("google-apps")
26
- expect(result.description).to eq("The Google Mail Servers and Google Apps CNAME records in a single template.")
27
- end
28
- end
29
- end
30
-
31
- end
@@ -1,70 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Dnsimple::User do
4
- describe ".me" do
5
- before do
6
- stub_request(:get, %r[/v1/user]).
7
- to_return(read_fixture("account/user/success.http"))
8
- end
9
-
10
- it "builds the correct request" do
11
- described_class.me
12
-
13
- expect(WebMock).to have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/user").
14
- with(:headers => { 'Accept' => 'application/json' })
15
- end
16
-
17
- it "returns the user" do
18
- result = described_class.me
19
-
20
- expect(result).to be_a(described_class)
21
- expect(result.id).to eq(19)
22
- expect(result.email).to eq("example@example.com")
23
- expect(result.domain_count).to be_a(Integer)
24
- expect(result.domain_limit).to be_a(Integer)
25
- expect(result.login_count).to be_a(Integer)
26
- expect(result.failed_login_count).to be_a(Integer)
27
- expect(result.created_at).to eq("2014-01-15T21:59:04Z")
28
- expect(result.updated_at).to be_a(String)
29
- end
30
- end
31
-
32
- describe ".two_factor_exchange_token" do
33
- before do
34
- stub_request(:get, %r[/v1/user]).
35
- to_return(read_fixture("2fa/exchange-token.http"))
36
- end
37
-
38
- let(:otp_token) { '1234567' }
39
-
40
- it "builds the correct request" do
41
- described_class.two_factor_exchange_token(otp_token)
42
-
43
- expect(WebMock).to have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/user").
44
- # workaround for https://github.com/bblimke/webmock/issues/276
45
- with { |req|
46
- # req.headers[Dnsimple::Client::HEADER_OTP_TOKEN] == otp_token
47
- req.headers["X-Dnsimple-Otp"] == otp_token
48
- }
49
- end
50
-
51
- it "returns the exchange_token" do
52
- result = described_class.two_factor_exchange_token(otp_token)
53
-
54
- expect(result).to eq("0c622716aaa64124219963075bc1c870")
55
- end
56
-
57
- context "when the OTP token is invalid" do
58
- before do
59
- stub_request(:get, %r[/v1/user]).
60
- to_return(read_fixture("2fa/error-badtoken.http"))
61
- end
62
-
63
- it "raises an AuthenticationFailed" do
64
- expect {
65
- described_class.two_factor_exchange_token("invalid-token")
66
- }.to raise_error(Dnsimple::AuthenticationFailed, "Bad OTP token")
67
- end
68
- end
69
- end
70
- end