lumberg 0.9.5

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. data/.gitignore +9 -0
  2. data/.rspec +2 -0
  3. data/.rvmrc +1 -0
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +98 -0
  6. data/LICENSE +20 -0
  7. data/README.md +178 -0
  8. data/Rakefile +49 -0
  9. data/lib/cacert.pem +3910 -0
  10. data/lib/lumberg.rb +23 -0
  11. data/lib/lumberg/exceptions.rb +6 -0
  12. data/lib/lumberg/version.rb +3 -0
  13. data/lib/lumberg/whm.rb +70 -0
  14. data/lib/lumberg/whm/account.rb +329 -0
  15. data/lib/lumberg/whm/args.rb +113 -0
  16. data/lib/lumberg/whm/base.rb +28 -0
  17. data/lib/lumberg/whm/dns.rb +205 -0
  18. data/lib/lumberg/whm/reseller.rb +268 -0
  19. data/lib/lumberg/whm/server.rb +290 -0
  20. data/lib/net_http_hacked.rb +42 -0
  21. data/lumberg.gemspec +28 -0
  22. data/spec/lumberg_spec.rb +9 -0
  23. data/spec/spec_helper.rb +33 -0
  24. data/spec/vcr_cassettes/whm/account/accountsummary.yml +43 -0
  25. data/spec/vcr_cassettes/whm/account/changepackage.yml +64 -0
  26. data/spec/vcr_cassettes/whm/account/createacct.yml +43 -0
  27. data/spec/vcr_cassettes/whm/account/domainuserdata.yml +43 -0
  28. data/spec/vcr_cassettes/whm/account/editquota.yml +85 -0
  29. data/spec/vcr_cassettes/whm/account/limitbw.yml +85 -0
  30. data/spec/vcr_cassettes/whm/account/listaccts.yml +147 -0
  31. data/spec/vcr_cassettes/whm/account/listsuspended.yml +43 -0
  32. data/spec/vcr_cassettes/whm/account/modifyacct.yml +63 -0
  33. data/spec/vcr_cassettes/whm/account/myprivs.yml +43 -0
  34. data/spec/vcr_cassettes/whm/account/passwd.yml +43 -0
  35. data/spec/vcr_cassettes/whm/account/removeacct.yml +85 -0
  36. data/spec/vcr_cassettes/whm/account/restoreaccount.yml +198 -0
  37. data/spec/vcr_cassettes/whm/account/setsiteip.yml +190 -0
  38. data/spec/vcr_cassettes/whm/account/suspend.yml +64 -0
  39. data/spec/vcr_cassettes/whm/account/unsuspend.yml +43 -0
  40. data/spec/vcr_cassettes/whm/dns/adddns.yml +64 -0
  41. data/spec/vcr_cassettes/whm/dns/addzonerecord.yml +43 -0
  42. data/spec/vcr_cassettes/whm/dns/dumpzone.yml +43 -0
  43. data/spec/vcr_cassettes/whm/dns/editzonerecord.yml +64 -0
  44. data/spec/vcr_cassettes/whm/dns/getzonerecord.yml +64 -0
  45. data/spec/vcr_cassettes/whm/dns/killdns.yml +43 -0
  46. data/spec/vcr_cassettes/whm/dns/listmxs.yml +22 -0
  47. data/spec/vcr_cassettes/whm/dns/listzones.yml +22 -0
  48. data/spec/vcr_cassettes/whm/dns/lookupnsip.yml +43 -0
  49. data/spec/vcr_cassettes/whm/dns/removezonerecord.yml +64 -0
  50. data/spec/vcr_cassettes/whm/dns/resetzone.yml +43 -0
  51. data/spec/vcr_cassettes/whm/dns/resolvedomainname.yml +43 -0
  52. data/spec/vcr_cassettes/whm/dns/savemxs.yml +22 -0
  53. data/spec/vcr_cassettes/whm/reseller/acctcounts.yml +43 -0
  54. data/spec/vcr_cassettes/whm/reseller/listacls.yml +22 -0
  55. data/spec/vcr_cassettes/whm/reseller/listresellers.yml +22 -0
  56. data/spec/vcr_cassettes/whm/reseller/resellerstats.yml +43 -0
  57. data/spec/vcr_cassettes/whm/reseller/saveacllist.yml +85 -0
  58. data/spec/vcr_cassettes/whm/reseller/setacls.yml +43 -0
  59. data/spec/vcr_cassettes/whm/reseller/setresellerips.yml +42 -0
  60. data/spec/vcr_cassettes/whm/reseller/setresellerlimits.yml +43 -0
  61. data/spec/vcr_cassettes/whm/reseller/setresellermainip.yml +64 -0
  62. data/spec/vcr_cassettes/whm/reseller/setresellernameservers.yml +64 -0
  63. data/spec/vcr_cassettes/whm/reseller/setresellerpackagelimit.yml +64 -0
  64. data/spec/vcr_cassettes/whm/reseller/setupreseller.yml +43 -0
  65. data/spec/vcr_cassettes/whm/reseller/suspendreseller.yml +64 -0
  66. data/spec/vcr_cassettes/whm/reseller/terminatereseller.yml +64 -0
  67. data/spec/vcr_cassettes/whm/reseller/unsetupreseller.yml +43 -0
  68. data/spec/vcr_cassettes/whm/reseller/unsuspendreseller.yml +43 -0
  69. data/spec/vcr_cassettes/whm/server/applist.yml +22 -0
  70. data/spec/vcr_cassettes/whm/server/gethostname.yml +22 -0
  71. data/spec/vcr_cassettes/whm/server/getlanglist.yml +22 -0
  72. data/spec/vcr_cassettes/whm/server/loadavg.yml +28 -0
  73. data/spec/vcr_cassettes/whm/server/my_function.yml +64 -0
  74. data/spec/vcr_cassettes/whm/server/response_type.yml +85 -0
  75. data/spec/vcr_cassettes/whm/server/systemloadavg.yml +43 -0
  76. data/spec/vcr_cassettes/whm/server/version.yml +22 -0
  77. data/spec/whm/account_spec.rb +577 -0
  78. data/spec/whm/args_spec.rb +179 -0
  79. data/spec/whm/base_spec.rb +28 -0
  80. data/spec/whm/dns_spec.rb +352 -0
  81. data/spec/whm/reseller_spec.rb +359 -0
  82. data/spec/whm/server_spec.rb +288 -0
  83. data/spec/whm/whm_spec.rb +41 -0
  84. metadata +265 -0
@@ -0,0 +1,43 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: https://myhost.com:2087/json-api/systemloadavg
6
+ body:
7
+ headers:
8
+ authorization:
9
+ - WHM root:iscool
10
+ response: !ruby/struct:VCR::Response
11
+ status: !ruby/struct:VCR::ResponseStatus
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ server:
16
+ - cpsrvd/11.28.64
17
+ transfer-encoding:
18
+ - chunked
19
+ content-type:
20
+ - text/plain
21
+ body: "{\"error\":\"Unknown App Requested: systemloadavg\"}"
22
+ http_version: "1.1"
23
+ - !ruby/struct:VCR::HTTPInteraction
24
+ request: !ruby/struct:VCR::Request
25
+ method: :get
26
+ uri: https://myhost.com:2087/json-api/systemloadavg?api.version=1
27
+ body:
28
+ headers:
29
+ authorization:
30
+ - WHM root:iscool
31
+ response: !ruby/struct:VCR::Response
32
+ status: !ruby/struct:VCR::ResponseStatus
33
+ code: 200
34
+ message: OK
35
+ headers:
36
+ server:
37
+ - cpsrvd/11.28.64
38
+ transfer-encoding:
39
+ - chunked
40
+ content-type:
41
+ - text/plain
42
+ body: "{\"data\":{\"one\":\"0.00\",\"five\":\"0.04\",\"fifteen\":\"0.01\"},\"metadata\":{\"result\":1,\"reason\":\"OK\",\"version\":1,\"command\":\"systemloadavg\"}}"
43
+ http_version: "1.1"
@@ -0,0 +1,22 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: https://myhost.com:2087/json-api/version
6
+ body:
7
+ headers:
8
+ authorization:
9
+ - WHM root:iscool
10
+ response: !ruby/struct:VCR::Response
11
+ status: !ruby/struct:VCR::ResponseStatus
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ server:
16
+ - cpsrvd/11.28.64
17
+ transfer-encoding:
18
+ - chunked
19
+ content-type:
20
+ - text/plain
21
+ body: "{\"version\":\"11.28.64\"}"
22
+ http_version: "1.1"
@@ -0,0 +1,577 @@
1
+ require 'spec_helper'
2
+ require 'lumberg/whm'
3
+
4
+ module Lumberg
5
+ describe Whm::Account do
6
+ before(:each) do
7
+ @login = { :host => @whm_host, :hash => @whm_hash }
8
+ @server = Whm::Server.new(@login.dup)
9
+ @account = Whm::Account.new(:server => @server.dup)
10
+ end
11
+
12
+ describe "#create" do
13
+ use_vcr_cassette "whm/account/createacct"
14
+
15
+ it "requires a username" do
16
+ requires_attr('username') { @account.create }
17
+ end
18
+
19
+ it "requires a domain" do
20
+ requires_attr('domain') { @account.create(:username => 'user') }
21
+ end
22
+
23
+ it "requires a password" do
24
+ requires_attr('password') {
25
+ @account.create(:username => 'user', :domain => 'example.com')
26
+ }
27
+ end
28
+
29
+ it "creates the account with proper params" do
30
+ result = @account.create(:username => 'valid', :password => 'hummingbird123', :domain => 'valid-thing.com')
31
+ result[:success].should be_true
32
+ result[:message].should match(/Account Creation Ok/i)
33
+ result[:params].should_not be_empty
34
+ result[:params].should have_key(:options)
35
+ result[:params][:options].should include(:nameserver4, :nameserver, :nameserverentry2, :nameserverentry3,
36
+ :nameserverentry4, :nameserverentry, :ip, :nameservera2,
37
+ :nameservera3, :package, :nameservera4, :nameserver2,
38
+ :nameservera, :nameserver3)
39
+ end
40
+
41
+ it "returns an error on duplicate accounts" do
42
+ @account.create(:username => 'invalid', :password => 'hummingbird123', :domain => 'invalid-thing.com')
43
+ result = @account.create(:username => 'invalid', :password => 'hummingbird123', :domain => 'invalid-thing.com')
44
+ result[:success].should be(false)
45
+ result[:message].should match(/username already exists/i)
46
+ end
47
+ end
48
+
49
+ describe "#remove" do
50
+ use_vcr_cassette "whm/account/removeacct"
51
+
52
+ it "requires a username" do
53
+ requires_attr('username') { @account.remove }
54
+ end
55
+
56
+ it "removes a user and keeps DNS by default" do
57
+ result = @account.remove(:username => 'removeme')
58
+ result[:success].should be_true
59
+ result[:params][:rawout].should match(/Removing DNS Entries/i)
60
+ end
61
+
62
+ it "removes a user and DNS when asked" do
63
+ result = @account.remove(:username => 'removeme', :keepdns => false)
64
+ result[:success].should be_true
65
+ result[:params][:rawout].should match(/Removing DNS Entries/i)
66
+ end
67
+
68
+ it "removes a user but keep DNS" do
69
+ result = @account.remove(:username => 'removeme', :keepdns => true)
70
+ result[:success].should be_true
71
+ result[:params][:rawout].should_not match(/Removing DNS Entries/i)
72
+ end
73
+
74
+ it "returns an error when the user doesn't exist" do
75
+ result = @account.remove(:username => 'notreal')
76
+ result[:success].should be(false)
77
+ result[:message].should match(/notreal does not exist/i)
78
+ end
79
+ end
80
+
81
+ describe "#change_password" do
82
+ use_vcr_cassette "whm/account/passwd"
83
+
84
+ it "requires a username" do
85
+ requires_attr('username') { @account.change_password }
86
+ end
87
+
88
+ it "requires a password" do
89
+ requires_attr('password') { @account.change_password(:username => 'changeme') }
90
+ end
91
+
92
+ it "changes the password" do
93
+ result = @account.change_password(:username => 'changeme', :password => 'superpass')
94
+ result[:success].should be_true
95
+ result[:message].should match(/Password changed for user changeme/i)
96
+ end
97
+
98
+ it "isn't successful when the user doesn't exist" do
99
+ result = @account.change_password(:username => 'dontchangeme', :password => 'superpass')
100
+ result[:success].should be(false)
101
+ result[:message].should match(/dontchangeme does not exist/i)
102
+ end
103
+ end
104
+
105
+ describe "#limit bandwidth" do
106
+ use_vcr_cassette "whm/account/limitbw"
107
+
108
+ it "requires a user" do
109
+ requires_attr('username') { @account.limit_bandwidth(:bwlimit => 99999) }
110
+ end
111
+
112
+ it "requires a bandwidth" do
113
+ requires_attr('bwlimit') { @account.limit_bandwidth(:username => 'changeme') }
114
+ end
115
+
116
+ it "sets the bandwidth limit" do
117
+ result = @account.limit_bandwidth(:username => 'changeme', :bwlimit => 99999)
118
+ result[:success].should be_true
119
+ result[:message].should match(/Bandwidth Limit for changeme set to 99999/i)
120
+ result[:params][:bwlimit][:bwlimitenable].should equal(false)
121
+ result[:params][:bwlimit][:unlimited].should equal(true)
122
+ end
123
+
124
+ it "isn't successful when the user doesn't exist" do
125
+ expect {
126
+ @account.limit_bandwidth(:username => 'notexists', :bwlimit => 99999)
127
+ }.to raise_error(WhmInvalidUser, /User notexists does not exist/i)
128
+ end
129
+ end
130
+
131
+ describe "#list" do
132
+ use_vcr_cassette "whm/account/listaccts"
133
+
134
+ it "lists all accounts" do
135
+ result = @account.list
136
+ result[:success].should be_true
137
+ result[:params][:acct].should have(10).accounts
138
+ p result[:params][:acct].first[:ip].should_not be_false
139
+ end
140
+
141
+ it "returns data for the account" do
142
+ result = @account.list(:searchtype => 'user', :search => 'changeme')
143
+ result[:success].should be_true
144
+ account = result[:params][:acct].first
145
+ account[:email].should == "*unknown*"
146
+ account[:shell].should == "/usr/local/cpanel/bin/noshell"
147
+ account[:theme].should == "x3"
148
+ account[:plan].should == "default"
149
+ account[:suspended].should equal(false)
150
+ end
151
+
152
+ it "lists accounts that match a regex search for the user" do
153
+ result = @account.list(:searchtype => 'user', :search => 'changeme')
154
+ result[:success].should be_true
155
+ result[:params][:acct].should have(1).account
156
+ end
157
+
158
+ it "lists accounts that match a regex search for the ip" do
159
+ result = @account.list(:searchtype => 'ip', :search => '192\..*?\.1\.20')
160
+ result[:success].should be_true
161
+ result[:params][:acct].should have(6).accounts
162
+ end
163
+
164
+ it "lists accounts that match a regex search for the domain" do
165
+ result = @account.list(:searchtype => 'domain', :search => 'ch.*?e.com')
166
+ result[:success].should be_true
167
+ result[:params][:acct].should have(1).account
168
+ end
169
+ end
170
+
171
+ describe "#modify" do
172
+ use_vcr_cassette "whm/account/modifyacct"
173
+
174
+ it "allows domain modification" do
175
+ result = @account.modify(:username => 'changeme', :domain => 'example.com')
176
+ result[:success].should be_true
177
+ result[:params][:newcfg][:cpuser][:DOMAIN].should == 'example.com'
178
+ end
179
+
180
+ it "returns an error for an invalid user" do
181
+ result = @account.modify(:username => 'notexists')
182
+ result[:success].should_not be_true
183
+ result[:message].should match(/Unable to fetch the cPanel user file for notexists/)
184
+ end
185
+
186
+ it "returns the bandwidth limit" do
187
+ result = @account.modify(:username => 'changeme')
188
+ result[:params][:newcfg][:cpuser][:BWLIMIT].should == "unlimited"
189
+ end
190
+
191
+ it "returns the primary contact email" do
192
+ result = @account.modify(:username => 'changeme')
193
+ result[:params][:newcfg][:cpuser][:CONTACTEMAIL].should == "user@address.com"
194
+ end
195
+
196
+ it "returns the secondary contact email" do
197
+ result = @account.modify(:username => 'changeme')
198
+ result[:params][:newcfg][:cpuser][:CONTACTEMAIL2].should == "user2@address.com"
199
+ end
200
+
201
+ it "returns the main domain" do
202
+ result = @account.modify(:username => 'changeme')
203
+ result[:params][:newcfg][:cpuser][:DOMAIN].should == "example.com"
204
+ end
205
+
206
+ it "returns whether or not the domain has CGI access" do
207
+ result = @account.modify(:username => 'changeme')
208
+ result[:params][:newcfg][:cpuser][:HASCGI].should be_true
209
+ end
210
+ end
211
+
212
+ describe "#editquota" do
213
+ use_vcr_cassette "whm/account/editquota"
214
+
215
+ it "returns an error for an invalid user" do
216
+ result = @account.edit_quota(:username => 'notexists', :quota => 500)
217
+ result[:success].should_not be_true
218
+ result[:message].should match(/Invalid User\. Cannot set quota\./i)
219
+ end
220
+
221
+ it "changes the user's disk space usage quota" do
222
+ result = @account.edit_quota(:username => 'changeme', :quota => 500)
223
+ result[:success].should be_true
224
+ result[:message].should match(/Set quota for user./i)
225
+ end
226
+
227
+ it "returns an error if a negative usage quota is passed" do
228
+ result = @account.edit_quota(:username => 'changeme', :quota => -1)
229
+ result[:success].should_not be_true
230
+ result[:message].should match(/Failed to set quota for user\./i)
231
+ end
232
+ end
233
+
234
+ describe "#summary" do
235
+ use_vcr_cassette "whm/account/accountsummary"
236
+ it "requires a user" do
237
+ requires_attr('username') { @account.create }
238
+ end
239
+
240
+ it "returns an error for invalid users" do
241
+ result = @account.summary(:username => 'notexists')
242
+ result[:success].should_not be_true
243
+ result[:message].should match(/does not exist/i)
244
+ end
245
+
246
+ it "returns a summary" do
247
+ result = @account.summary(:username => 'summary')
248
+ result[:success].should be_true
249
+ result[:message].should match(/ok/i)
250
+ end
251
+ end
252
+
253
+ describe "#suspend" do
254
+ use_vcr_cassette "whm/account/suspend"
255
+
256
+ it "requires a username" do
257
+ requires_attr('username') { @account.suspend }
258
+ end
259
+
260
+ it "returns an error for invalid users" do
261
+ result = @account.suspend(:username => 'notexists')
262
+ result[:success].should_not be_true
263
+ result[:message].should match(/does not exist/i)
264
+ end
265
+
266
+ it "suspends" do
267
+ result = @account.suspend(:username => 'suspendme')
268
+ result[:success].should be_true
269
+ result[:message].should match(/has been suspended/i)
270
+ end
271
+
272
+ it "suspends with a reason" do
273
+ @account.server.should_receive(:perform_request).with('suspendacct', hash_including(:user => 'suspendme', :reason => 'abusive user'))
274
+ @account.suspend(:username => 'suspendme', :reason => 'abusive user')
275
+ end
276
+ end
277
+
278
+ describe "#unsuspend" do
279
+ use_vcr_cassette "whm/account/unsuspend"
280
+ it "require a username" do
281
+ requires_attr('username') { @account.unsuspend }
282
+ end
283
+
284
+ it "returns an error for invalid users" do
285
+ result = @account.unsuspend(:username => 'notexists')
286
+ result[:success].should_not be_true
287
+ result[:message].should match(/does not exist/i)
288
+ end
289
+
290
+ it "unsuspends" do
291
+ result = @account.unsuspend(:username => 'asdfasdf')
292
+ result[:success].should be_true
293
+ result[:message].should match(/unsuspending .* account/i)
294
+ end
295
+ end
296
+
297
+ describe "#list_suspended" do
298
+ use_vcr_cassette 'whm/account/listsuspended'
299
+ it "returns non-empty result" do
300
+ # empty isn't a real param. VCR Hacks
301
+ result = @account.list_suspended(:empty => true)
302
+ result[:success].should be_true
303
+ result[:params][:accts].should_not be_empty
304
+ result[:params][:accts].first.should include(:user => 'removeme')
305
+ end
306
+
307
+ it "returns empty result" do
308
+ result = @account.list_suspended
309
+ result[:success].should be_true
310
+ result[:params][:accts].should be_empty
311
+ end
312
+ end
313
+
314
+ describe "#change package" do
315
+ use_vcr_cassette "whm/account/changepackage"
316
+
317
+ it "returns an error for an invalid user" do
318
+ result = @account.change_package(:username => 'notexists', :pkg => 'default')
319
+ result[:success].should_not be_true
320
+ result[:message].should match(/user notexists does not exist/i)
321
+ end
322
+
323
+ it "requires a username" do
324
+ requires_attr('username') { @account.change_package(:pkg => '') }
325
+ end
326
+
327
+ it "requires a pkg" do
328
+ requires_attr('pkg') { @account.change_package(:username => 'changeme') }
329
+ end
330
+
331
+ it "fails if the package was not found" do
332
+ result = @account.change_package(:username => 'changeme', :pkg => 'fakepackage')
333
+ result[:success].should_not be_true
334
+ result[:message].should match(/package does not exist/i)
335
+ end
336
+
337
+ it "changes the package" do
338
+ result = @account.change_package(:username => 'changeme', :pkg => 'gold')
339
+ result[:success].should be_true
340
+ result[:message].should match(/Account Upgrade\/Downgrade Complete for changeme/i)
341
+ end
342
+ end
343
+
344
+ describe "#privs" do
345
+ use_vcr_cassette 'whm/account/myprivs'
346
+ it "requires a user" do
347
+ requires_attr('username') { @account.privs }
348
+ end
349
+
350
+ it "has a result" do
351
+ result = @account.privs(:username => 'privs')
352
+ result[:success].should be_true
353
+
354
+ params = result[:params]
355
+ expected = {
356
+ :kill_dns => false, :edit_dns => false, :edit_mx => false, :add_pkg => false,
357
+ :suspend_acct => false, :add_pkg_shell => false, :viewglobalpackages => false,
358
+ :resftp => false, :list_accts => false, :all => true, :passwd => false, :quota => false,
359
+ :park_dns => false, :rearrange_accts => false, :allow_addoncreate => false, :demo => false,
360
+ :news => false, :edit_account => false, :allow_unlimited_disk_pkgs => false, :allow_parkedcreate => false,
361
+ :frontpage => false, :restart => false, :ssl_gencrt => false, :allow_unlimited_pkgs => false,
362
+ :add_pkg_ip => false, :disallow_shell => false, :res_cart => false, :ssl_buy => false, :kill_acct => false,
363
+ :allow_unlimited_bw_pkgs => false, :create_dns => false, :mailcheck => false, :clustering => false, :ssl => false,
364
+ :edit_pkg => false, :locale_edit => false, :show_bandwidth => false, :upgrade_account => false, :thirdparty => false,
365
+ :limit_bandwidth => false, :create_acct => false, :demo_setup => false, :stats => false}
366
+
367
+ params.should include(expected)
368
+ end
369
+ end
370
+
371
+ describe "#domainuserdata" do
372
+ use_vcr_cassette "whm/account/domainuserdata"
373
+
374
+ it "returns an error for an unknown domain" do
375
+ result = @account.domain_user_data(:domain => 'notexists.com')
376
+ result[:success].should_not be_true
377
+ result[:message].should match(/Unable to determine account owner for domain\./i)
378
+ end
379
+
380
+ it "requires a domain" do
381
+ requires_attr('domain') { @account.domain_user_data }
382
+ end
383
+
384
+ it "returns the correct data" do
385
+ result = @account.domain_user_data(:domain => 'example.com')
386
+ result[:success].should be_true
387
+ result[:params][:documentroot].should == "/home/changeme/public_html"
388
+ result[:params][:group].should == "changeme"
389
+ result[:params][:hascgi].should_not be_true
390
+ result[:params][:homedir].should == "/home/changeme"
391
+ result[:params][:ip].should == "192.1.2.3"
392
+ result[:params][:owner].should == "root"
393
+ result[:params][:port].should == "80"
394
+ result[:params][:scriptalias].first[:path].should == "/home/changeme/public_html/cgi-bin"
395
+ result[:params][:scriptalias].first[:url].should == "/cgi-bin/"
396
+ result[:params][:serveradmin].should == "webmaster@example.com"
397
+ result[:params][:serveralias].should == "www.example.com"
398
+ result[:params][:servername].should == "example.com"
399
+ result[:params][:user].should == "changeme"
400
+ end
401
+ end
402
+
403
+ describe "#setsiteip" do
404
+ use_vcr_cassette "whm/account/setsiteip"
405
+
406
+ it "requires an ip" do
407
+ requires_attr('ip') { @account.set_site_ip }
408
+ end
409
+
410
+ it "requires a username or a domain" do
411
+ expect { @account.set_site_ip(:ip => '1.1.1.1') }.to raise_error(WhmArgumentError, /may include only one of 'username, domain'/i)
412
+ end
413
+
414
+ it "accepts a username for the account to use" do
415
+ result = @account.set_site_ip(:ip => '192.1.2.3', :username => 'changeme')
416
+ result[:success].should be_true
417
+ end
418
+
419
+ it "accepts a domain for the account to use" do
420
+ result = @account.set_site_ip(:ip => '192.1.2.3', :domain => 'example.com')
421
+ result[:success].should be_true
422
+ end
423
+
424
+ it "sets the site ip" do
425
+ result = @account.set_site_ip(:ip => '192.1.2.3', :username => 'changeme')
426
+ result[:success].should be_true
427
+ result[:message].should match(/OK/i)
428
+ end
429
+ end
430
+
431
+ describe "#restore" do
432
+ # 11.27/11.28+ only
433
+ use_vcr_cassette "whm/account/restoreaccount"
434
+ it "requires api.version" do
435
+ requires_attr('api.version') {
436
+ @account.restore_account(:username => 'changeme',
437
+ :type => 'monthly',
438
+ :all => false,
439
+ :ip => false,
440
+ :mail => false,
441
+ :mysql => false,
442
+ :subs => false)
443
+ }
444
+ end
445
+
446
+ it "requires a username" do
447
+ requires_attr('username') {
448
+ @account.restore_account("api.version".to_sym => 1,
449
+ :type => 'monthly',
450
+ :all => false,
451
+ :ip => false,
452
+ :mail => false,
453
+ :mysql => false,
454
+ :subs => false)
455
+ }
456
+ end
457
+
458
+ it "requires type" do
459
+ requires_attr('type') {
460
+ @account.restore_account("api.version".to_sym => 1,
461
+ :username => 'changeme',
462
+ :all => false,
463
+ :ip => false,
464
+ :mail => false,
465
+ :mysql => false,
466
+ :subs => false)
467
+ }
468
+ end
469
+
470
+ it "requires all" do
471
+ requires_attr('all') {
472
+ @account.restore_account("api.version".to_sym => 1,
473
+ :username => 'changeme',
474
+ :type => 'monthly',
475
+ :ip => false,
476
+ :mail => false,
477
+ :mysql => false,
478
+ :subs => false)
479
+ }
480
+ end
481
+
482
+ it "requires ip" do
483
+ requires_attr('ip') {
484
+ @account.restore_account("api.version".to_sym => 1,
485
+ :username => 'changeme',
486
+ :type => 'monthly',
487
+ :all => false,
488
+ :mail => false,
489
+ :mysql => false,
490
+ :subs => false)
491
+ }
492
+ end
493
+
494
+ it "requires mail" do
495
+ requires_attr('mail') { @account.restore_account("api.version".to_sym => 1,
496
+ :username => 'changeme',
497
+ :type => 'monthly',
498
+ :all => false,
499
+ :ip => false,
500
+ :mysql => false,
501
+ :subs => false)
502
+ }
503
+ end
504
+
505
+ it "requires mysql" do
506
+ requires_attr('mysql') { @account.restore_account("api.version".to_sym => 1,
507
+ :username => 'changeme',
508
+ :type => 'monthly',
509
+ :all => false,
510
+ :ip => false,
511
+ :mail => false,
512
+ :subs => false)
513
+ }
514
+ end
515
+
516
+ it "require subs" do
517
+ requires_attr('subs') { @account.restore_account("api.version".to_sym => 1,
518
+ :username => 'changeme',
519
+ :type => 'monthly',
520
+ :all => false,
521
+ :ip => false,
522
+ :mail => false,
523
+ :mysql => false)
524
+ }
525
+ end
526
+
527
+ it "returns an error if it can't find the backup" do
528
+ result = @account.restore_account("api.version".to_sym => 1,
529
+ :username => 'notexists',
530
+ :type => 'daily',
531
+ :all => false,
532
+ :ip => false,
533
+ :mail => false,
534
+ :mysql => false,
535
+ :subs => false)
536
+ result[:params][:result].to_i.should == 0
537
+ result[:params][:reason].should match(/Unable to find archive/i)
538
+ end
539
+
540
+ it "restores the account" do
541
+ result = @account.restore_account("api.version".to_sym => 1,
542
+ :username => 'changeme',
543
+ :type => 'daily',
544
+ :all => false,
545
+ :ip => false,
546
+ :mail => false,
547
+ :mysql => false,
548
+ :subs => false)
549
+ result[:params][:result].to_i.should == 1
550
+ result[:params][:reason].should == "OK"
551
+ result[:params][:output][:raw].should match(/Account Restore Complete/i)
552
+ end
553
+ end
554
+
555
+ describe "#verify_user" do
556
+ use_vcr_cassette "whm/account/accountsummary"
557
+
558
+ before(:each) { @something = double() }
559
+
560
+ it "does not call the block if the user doesn't exist" do
561
+ @something.should_not_receive(:gold)
562
+ expect {
563
+ @account.send(:verify_user, 'notexists') do
564
+ @something.gold
565
+ end
566
+ }.to raise_error(WhmInvalidUser)
567
+ end
568
+
569
+ it "calls the block if the user does exist" do
570
+ @something.should_receive(:gold)
571
+ @account.send(:verify_user, 'summary') do
572
+ @something.gold
573
+ end
574
+ end
575
+ end
576
+ end
577
+ end