moo_moo 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. data/.gitignore +7 -0
  2. data/.rspec +2 -0
  3. data/.rvmrc +59 -0
  4. data/.travis.yml +9 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE +21 -0
  7. data/README.md +63 -0
  8. data/Rakefile +55 -0
  9. data/lib/cacert.pem +3910 -0
  10. data/lib/moo_moo/config.rb +13 -0
  11. data/lib/moo_moo/opensrs/args.rb +109 -0
  12. data/lib/moo_moo/opensrs/base.rb +75 -0
  13. data/lib/moo_moo/opensrs/command.rb +190 -0
  14. data/lib/moo_moo/opensrs/cookie_commands.rb +52 -0
  15. data/lib/moo_moo/opensrs/lookup_commands.rb +195 -0
  16. data/lib/moo_moo/opensrs/nameserver_commands.rb +70 -0
  17. data/lib/moo_moo/opensrs/opensrsexception.rb +6 -0
  18. data/lib/moo_moo/opensrs/provisioning_commands.rb +167 -0
  19. data/lib/moo_moo/opensrs/response.rb +41 -0
  20. data/lib/moo_moo/opensrs/transfer_commands.rb +83 -0
  21. data/lib/moo_moo/opensrs/utils.rb +13 -0
  22. data/lib/moo_moo/opensrs.rb +8 -0
  23. data/lib/moo_moo/version.rb +3 -0
  24. data/lib/moo_moo.rb +16 -0
  25. data/moo_moo.gemspec +33 -0
  26. data/spec/moo_moo_spec.rb +17 -0
  27. data/spec/opensrs/args_spec.rb +179 -0
  28. data/spec/opensrs/cookie_spec.rb +78 -0
  29. data/spec/opensrs/lookup_spec.rb +212 -0
  30. data/spec/opensrs/nameserver_spec.rb +124 -0
  31. data/spec/opensrs/opensrs_spec.rb +35 -0
  32. data/spec/opensrs/provisioning_spec.rb +271 -0
  33. data/spec/opensrs/transfer_spec.rb +197 -0
  34. data/spec/opensrs/utils_spec.rb +12 -0
  35. data/spec/spec_helper.rb +57 -0
  36. data/spec/vcr_cassettes/cookie/delete_cookie.yml +219 -0
  37. data/spec/vcr_cassettes/cookie/quit_session.yml +97 -0
  38. data/spec/vcr_cassettes/cookie/set_cookie.yml +123 -0
  39. data/spec/vcr_cassettes/cookie/set_cookie_fail.yml +54 -0
  40. data/spec/vcr_cassettes/cookie/update_cookie.yml +239 -0
  41. data/spec/vcr_cassettes/lookup/belongs_to_rsp.yml +54 -0
  42. data/spec/vcr_cassettes/lookup/belongs_to_rsp_negative.yml +55 -0
  43. data/spec/vcr_cassettes/lookup/get_balance.yml +55 -0
  44. data/spec/vcr_cassettes/lookup/get_deleted_domains.yml +80 -0
  45. data/spec/vcr_cassettes/lookup/get_domain.yml +211 -0
  46. data/spec/vcr_cassettes/lookup/get_domain_fail.yml +269 -0
  47. data/spec/vcr_cassettes/lookup/get_domains_by_expiredate.yml +76 -0
  48. data/spec/vcr_cassettes/lookup/get_domains_contacts.yml +129 -0
  49. data/spec/vcr_cassettes/lookup/get_domains_contacts_fail.yml +58 -0
  50. data/spec/vcr_cassettes/lookup/get_notes_for_domain.yml +85 -0
  51. data/spec/vcr_cassettes/lookup/get_notes_for_order.yml +61 -0
  52. data/spec/vcr_cassettes/lookup/get_notes_for_transfer.yml +61 -0
  53. data/spec/vcr_cassettes/lookup/get_order_info.yml +139 -0
  54. data/spec/vcr_cassettes/lookup/get_orders_by_domain.yml +76 -0
  55. data/spec/vcr_cassettes/lookup/get_price.yml +54 -0
  56. data/spec/vcr_cassettes/lookup/get_product_info.yml +49 -0
  57. data/spec/vcr_cassettes/lookup/lookup_domain_available.yml +55 -0
  58. data/spec/vcr_cassettes/lookup/lookup_domain_registered.yml +55 -0
  59. data/spec/vcr_cassettes/lookup/name_suggest.yml +396 -0
  60. data/spec/vcr_cassettes/nameserver/create.yml +49 -0
  61. data/spec/vcr_cassettes/nameserver/delete.yml +49 -0
  62. data/spec/vcr_cassettes/nameserver/get.yml +71 -0
  63. data/spec/vcr_cassettes/nameserver/modify.yml +49 -0
  64. data/spec/vcr_cassettes/provisioning/cancel_order.yml +56 -0
  65. data/spec/vcr_cassettes/provisioning/cancel_order_invalid.yml +49 -0
  66. data/spec/vcr_cassettes/provisioning/cancel_pending_orders.yml +58 -0
  67. data/spec/vcr_cassettes/provisioning/modify_all_domains.yml +49 -0
  68. data/spec/vcr_cassettes/provisioning/modify_domain.yml +49 -0
  69. data/spec/vcr_cassettes/provisioning/process_pending.yml +57 -0
  70. data/spec/vcr_cassettes/provisioning/register_domain.yml +57 -0
  71. data/spec/vcr_cassettes/provisioning/register_pending_domain.yml +55 -0
  72. data/spec/vcr_cassettes/provisioning/register_taken_domain.yml +55 -0
  73. data/spec/vcr_cassettes/provisioning/renew_domain.yml +58 -0
  74. data/spec/vcr_cassettes/provisioning/revoke_domain.yml +55 -0
  75. data/spec/vcr_cassettes/provisioning/trust_service.yml +60 -0
  76. data/spec/vcr_cassettes/provisioning/update_contacts.yml +66 -0
  77. data/spec/vcr_cassettes/transfer/cancel_transfer.yml +49 -0
  78. data/spec/vcr_cassettes/transfer/cancel_trasnfer_order.yml +49 -0
  79. data/spec/vcr_cassettes/transfer/check_transfer.yml +56 -0
  80. data/spec/vcr_cassettes/transfer/check_transfer_exists.yml +57 -0
  81. data/spec/vcr_cassettes/transfer/get_transfers_away.yml +60 -0
  82. data/spec/vcr_cassettes/transfer/get_transfers_in.yml +80 -0
  83. data/spec/vcr_cassettes/transfer/process_transfer.yml +49 -0
  84. data/spec/vcr_cassettes/transfer/process_transfer_unsuccessful.yml +49 -0
  85. data/spec/vcr_cassettes/transfer/rsp2rsp_push_transfer.yml +49 -0
  86. data/spec/vcr_cassettes/transfer/send_password.yml +49 -0
  87. data/spec/vcr_cassettes/transfer/transfer.yml +58 -0
  88. metadata +280 -0
@@ -0,0 +1,6 @@
1
+ module MooMoo
2
+ module OpenSRS
3
+ class OpenSRSException < Exception
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,167 @@
1
+ module MooMoo
2
+ module OpenSRS
3
+ module ProvisioningCommands
4
+ # Cancels a Trust Service order
5
+ #
6
+ # ==== Required
7
+ # * <tt>:order_id</tt> - ID of the order
8
+ def cancel_order(order_id)
9
+ run_command :cancel_order, :trust_service, {
10
+ :order_id => order_id,
11
+ :key => 'attributes'
12
+ }
13
+ end
14
+
15
+ # Cancels pending or declined orders
16
+ #
17
+ # ==== Required
18
+ # * <tt>:to_date</tt> - date before which to cancel orders
19
+ def cancel_pending_orders(to_date)
20
+ run_command :cancel_pending_orders, :order, {
21
+ :to_date => to_date,
22
+ :key => 'attributes'
23
+ }
24
+ end
25
+
26
+ # Changes information associated with a domain
27
+ #
28
+ # ==== Required
29
+ # * <tt>:type</tt> - type of data to modify
30
+ # * <tt>:params</tt> - new parameter values to set
31
+ #
32
+ # ==== Optional
33
+ # * <tt>:cookie</tt> - cookie for the domain
34
+ def modify(params)
35
+ cookie = params.delete :cookie
36
+
37
+ run_command :modify, :domain, params, cookie
38
+ end
39
+
40
+ # Processes or cancels a pending order
41
+ #
42
+ # ==== Required
43
+ # * <tt>:order_id</tt> - ID of the pending order to process
44
+ def process_pending(order_id)
45
+ run_command :process_pending, :domain, {
46
+ :order_id => order_id,
47
+ :key => 'attributes'
48
+ }
49
+ end
50
+
51
+ # Renews a domain name
52
+ #
53
+ # ==== Required
54
+ # * <tt>:domain</tt> - domain name to renew
55
+ # * <tt>:term</tt> - number of years to renew for
56
+ # * <tt>:current_expiration_year</tt> - current expiration year in YYYY format
57
+ def renew_domain(attribs)
58
+ Args.new(attribs) do |c|
59
+ c.requires :domain, :term, :current_expiration_year
60
+ end
61
+
62
+ attribs[:handle] = 'process' unless attribs[:handle]
63
+ attribs[:key] = 'attributes'
64
+
65
+ run_command :renew, :domain, attribs
66
+ end
67
+
68
+ # Removes the domain at the registry
69
+ #
70
+ # ==== Required
71
+ # * <tt>:domain</tt> - domain name to remove
72
+ # * <tt>:reseller</tt> - username of the reseller
73
+ def revoke(params)
74
+ params[:key] = 'attributes'
75
+
76
+ run_command :revoke, :domain, params
77
+ end
78
+
79
+ # Submits a domain contact information update
80
+ #
81
+ # ==== Required
82
+ # * <tt>:domain</tt> - domain name to update the contacts of
83
+ # * <tt>:contacts</tt> - contact set with updated values
84
+ # * <tt>:types</tt> - list of contact types that are to be updated
85
+ def update_contacts(params)
86
+ params[:types] = index_array(params[:types])
87
+
88
+ params[:contact_set] = params.delete :contacts
89
+ params[:key] = 'attributes'
90
+
91
+ run_command :update_contacts, :domain, params
92
+ end
93
+
94
+ # Submits a new registration request or transfer order
95
+ #
96
+ # ==== Required
97
+ # * <tt>:domain</tt> - domain name to register
98
+ # * <tt>:contacts</tt> - contact set for the domain
99
+ # * <tt>:nameservers</tt> - array of nameservers
100
+ #
101
+ # ==== Optional
102
+ # * <tt>:term</tt> - number of years to register the domain for
103
+ # * <tt>:options</tt> - additional attributes to set
104
+ def register_domain(attribs)
105
+ Args.new(attribs) do |c|
106
+ c.requires :domain, :contacts, :nameservers
107
+ c.optionals :term, :options
108
+ end
109
+
110
+ attribs[:term] = 1 unless attribs[:term]
111
+ nameservers = format_nameservers(attribs[:nameservers])
112
+
113
+ attributes = {
114
+ :contact_set => attribs[:contacts],
115
+ :custom_nameservers => 1,
116
+ :custom_tech_contact => 1,
117
+ :domain => attribs[:domain],
118
+ :nameserver_list => nameservers,
119
+ :period => attribs[:term],
120
+ :reg_username => @user,
121
+ :reg_password => @password
122
+ }
123
+
124
+ attributes[:reg_type] = :new unless attribs[:options] && attribs[:options][:reg_type]
125
+ attributes.merge!(attribs[:options]) if attribs[:options]
126
+ attributes[:key] = 'attributes'
127
+
128
+ res = run_command :sw_register, :domain, attributes
129
+ end
130
+
131
+ # Submits a new registration request or transfer order
132
+ #
133
+ # ==== Required
134
+ # * <tt>:csr</tt> - certificate signing request
135
+ # * <tt>:contacts</tt> - contact set for the trust service
136
+ #
137
+ # ==== Optional
138
+ # * <tt>:attribs</tt> - additional attributes to set
139
+ # * <tt>:term</tt> - number of years to register the trust service for
140
+ def register_trust_service(params)
141
+ params[:period] = params.delete :term
142
+ params[:period] = 1 unless params[:period]
143
+ params[:reg_type] = 'new' unless params[:reg_type]
144
+ params[:handle] = 'process' unless params[:handle]
145
+ params[:contact_set] = params.delete :contacts
146
+ params[:key] = 'attributes'
147
+
148
+ run_command :sw_register, :trust_service, params
149
+ end
150
+
151
+ private
152
+
153
+ def format_nameservers(nameservers)
154
+ [
155
+ "0".to_sym => {
156
+ :sortorder => 1,
157
+ :name => nameservers.first
158
+ },
159
+ "1".to_sym => {
160
+ :sortorder => 2,
161
+ :name => nameservers.size == 2 ? nameservers[1] : nameservers.first
162
+ },
163
+ ]
164
+ end
165
+ end
166
+ end
167
+ end
@@ -0,0 +1,41 @@
1
+ module MooMoo
2
+ module OpenSRS
3
+ class Response
4
+ # Constructor
5
+ #
6
+ # ==== Required
7
+ # * <tt>:hash</tt> - hash of the response
8
+ #
9
+ # ==== Optional
10
+ # * <tt>:key</tt> - primary key to use when indexing the hash
11
+ def initialize(hash, key = nil)
12
+ @hash = hash
13
+ @key = key
14
+ end
15
+
16
+ # Returns whether or not the command executed was successful
17
+ #
18
+ def success?
19
+ @hash['is_success'].nil? ? true : @hash['is_success'].to_i == 1
20
+ end
21
+
22
+ # Returns the error message if one is present
23
+ #
24
+ def error_msg
25
+ @hash['response_text']
26
+ end
27
+
28
+ # Returns the response code if one is present
29
+ #
30
+ def error_code
31
+ @hash['response_code'].to_i
32
+ end
33
+
34
+ # Returns the result hash
35
+ #
36
+ def result
37
+ @key.nil? ? @hash : @hash[@key]
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,83 @@
1
+ module MooMoo
2
+ module OpenSRS
3
+ module TransferCommands
4
+ # Cancels a transfer that is pending owner approval
5
+ #
6
+ # ==== Required
7
+ # * <tt>:domain</tt> - domain name that is being transferred
8
+ # * <tt>:reseller</tt> - username of the reseller
9
+ def cancel_transfer(params)
10
+ run_command :cancel_transfer, :transfer, params
11
+ end
12
+
13
+ # Cancels a transfer that is pending owner approval by order ID
14
+ #
15
+ # ==== Required
16
+ # * <tt>:order_id</tt> - ID of the order
17
+ # * <tt>:reseller</tt> - username of the reseller
18
+ def cancel_transfer_for_order(params)
19
+ run_command :cancel_transfer, :transfer, params
20
+ end
21
+
22
+ # Checks to see if the given domain can be transferred
23
+ #
24
+ # ==== Required
25
+ # * <tt>:domain</tt> - domain name to check
26
+ def check_transfer(domain)
27
+ run_command :check_transfer, :domain, {
28
+ :domain => domain,
29
+ :key => 'attributes'
30
+ }
31
+ end
32
+
33
+ # Lists all domains that have been transferred away
34
+ #
35
+ def get_transfers_away
36
+ run_command :get_transfers_away, :domain, {
37
+ :key => 'attributes'
38
+ }
39
+ end
40
+
41
+ # Lists all domains that have been transferred in
42
+ def get_transfers_in
43
+ run_command :get_transfers_in, :domain, {
44
+ :key => 'attributes'
45
+ }
46
+ end
47
+
48
+ # Creates a new order with the same data as a cancelled order
49
+ #
50
+ # ==== Required
51
+ # * <tt>:order_id</tt> - ID of the cancelled order
52
+ # * <tt>:reseller</tt> - username of the reseller
53
+ def process_transfer(params)
54
+ params[:key] = 'attributes'
55
+
56
+ run_command :process_transfer, :transfer, params
57
+ end
58
+
59
+ # Resends an e-mail to the admin contact for the transfer that is in 'pending owner approval' state
60
+ #
61
+ # ==== Required
62
+ # * <tt>:domain</tt> - domain name being transferred
63
+ def send_password(domain)
64
+ run_command :send_password, :transfer, {
65
+ :domain_name => domain
66
+ }
67
+ end
68
+
69
+ # Transfers a domain name from one reseller to another
70
+ #
71
+ # ==== Required
72
+ # * <tt>:domain</tt> - domain name to transfer
73
+ # * <tt>:username</tt> - username of the registrant
74
+ # * <tt>:password</tt> - password of the registrant
75
+ # * <tt>:reseller</tt> - name of the gaining reseller
76
+ def push_transfer(params)
77
+ params[:grsp] = params.delete :reseller
78
+
79
+ run_command :rsp2rsp_push_transfer, nil, params
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,13 @@
1
+ module MooMoo
2
+ module OpenSRS
3
+ module Utils
4
+ def try_opensrs
5
+ begin
6
+ yield
7
+ rescue Exception => e
8
+ raise OpenSRSException, e.message
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,8 @@
1
+ module MooMoo
2
+ autoload :Args, 'moo_moo/opensrs/args'
3
+
4
+ module OpenSRS
5
+ autoload :Base, 'moo_moo/opensrs/base'
6
+ autoload :Response, 'moo_moo/opensrs/response'
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module MooMoo
2
+ VERSION = Version = "0.1.0"
3
+ end
data/lib/moo_moo.rb ADDED
@@ -0,0 +1,16 @@
1
+ module MooMoo
2
+ autoload :Version, 'moo_moo/version'
3
+ autoload :Config, 'moo_moo/config'
4
+ autoload :OpenSRS, 'moo_moo/opensrs'
5
+
6
+ class << self
7
+ attr_accessor :config
8
+ end
9
+
10
+ def self.configure
11
+ yield config if block_given?
12
+ config
13
+ end
14
+
15
+ self.config = Config.new
16
+ end
data/moo_moo.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require 'moo_moo/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "moo_moo"
7
+ s.version = MooMoo::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Tim Parkin"]
10
+ s.email = ["tparkin@site5.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{Implements OpenSRS XML API}
13
+ s.description = %q{Implements OpenSRS XML API}
14
+
15
+ s.rubyforge_project = "opensrs"
16
+
17
+ s.add_runtime_dependency('jruby-openssl', '~> 0.7.3') if RUBY_PLATFORM == 'java'
18
+ s.add_development_dependency 'rake', '~> 0.8.7'
19
+ s.add_development_dependency 'rspec', '~> 2.5.0'
20
+ s.add_development_dependency 'fakeweb', '~> 1.3.0'
21
+ s.add_development_dependency 'vcr', '~> 1.9.0'
22
+ if !defined?(RUBY_ENGINE) || RUBY_ENGINE != 'rbx'
23
+ s.add_development_dependency 'rcov', '>= 0.9.9'
24
+ s.add_development_dependency 'metric_fu', '>= 2.1.1'
25
+ end
26
+
27
+ s.add_dependency 'extlib'
28
+
29
+ s.files = `git ls-files`.split("\n")
30
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
31
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
32
+ s.require_paths = ["lib"]
33
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe MooMoo do
4
+ describe "::Version" do
5
+ it "has a valid version" do
6
+ MooMoo::Version.should match /\d+\.\d+\.\d+/
7
+ end
8
+ end
9
+
10
+ describe "::configure" do
11
+ it { MooMoo.configure.should be_a MooMoo::Config }
12
+ end
13
+
14
+ describe "::config" do
15
+ it { MooMoo.should have_attr_accessor :config }
16
+ end
17
+ end
@@ -0,0 +1,179 @@
1
+ require 'spec_helper'
2
+ require 'moo_moo/opensrs/args'
3
+
4
+ module MooMoo
5
+ describe MooMoo::Args do
6
+ context "required_parms" do
7
+ it "raises an error when missing" do
8
+ options = {:arg1 => true}
9
+ args = lambda {
10
+ MooMoo::Args.new(options) do |c|
11
+ c.requires :arg2
12
+ end
13
+ }
14
+ expect { args.call }.to raise_error(MooMooArgumentError, /Missing required parameter: arg2/)
15
+ end
16
+
17
+ it "does not raise an error with valid params" do
18
+ options = {:arg1 => true}
19
+ args = MooMoo::Args.new(options) { |c|
20
+ c.requires :arg1
21
+ }
22
+
23
+ args.required_params.should have(1).value
24
+ args.required_params.should include(:arg1)
25
+ end
26
+
27
+ it "sets optional_params" do
28
+ options = {:arg1 => true, :arg2 => 2}
29
+ args = MooMoo::Args.new(options) { |c|
30
+ c.requires :arg1, :arg2
31
+ }
32
+
33
+ args.optional_params.should have(2).values
34
+ args.required_params.should have(2).values
35
+
36
+ args.optional_params.should include(*args.required_params)
37
+ end
38
+
39
+ it "does not set boolean_params" do
40
+ options = {:arg1 => true, :arg2 => 2}
41
+ args = MooMoo::Args.new(options) { |c|
42
+ c.requires :arg1, :arg2
43
+ }
44
+
45
+ args.boolean_params.should be_empty
46
+ end
47
+ end
48
+
49
+ context "boolean_params" do
50
+ it "raises an error when the param is not boolean" do
51
+ options = {:arg1 => 'string'}
52
+ args = lambda {
53
+ MooMoo::Args.new(options) do |c|
54
+ c.booleans :arg1
55
+ end
56
+ }
57
+ expect { args.call }.to raise_error(MooMooArgumentError, /Boolean parameter must be.*: arg1/)
58
+ end
59
+
60
+ it "raises an error with boolean params" do
61
+ options = {:arg1 => true}
62
+ args = MooMoo::Args.new(options) { |c|
63
+ c.booleans :arg1
64
+ }
65
+
66
+ args.boolean_params.should have(1).value
67
+ args.boolean_params.should include(:arg1)
68
+ end
69
+
70
+ it "sets optional_params" do
71
+ options = {:arg1 => true, :arg2 => false}
72
+ args = MooMoo::Args.new(options) { |c|
73
+ c.booleans :arg1, :arg2
74
+ }
75
+
76
+ args.optional_params.should have(2).values
77
+ args.boolean_params.should have(2).values
78
+
79
+ args.optional_params.should include(:arg1, :arg2)
80
+ end
81
+
82
+ it "sets required_params" do
83
+ options = {:arg1 => true, :arg2 => false}
84
+ args = MooMoo::Args.new(options) { |c|
85
+ c.booleans :arg1, :arg2
86
+ }
87
+
88
+ args.required_params.should be_empty
89
+ end
90
+ end
91
+
92
+ context "optional_params" do
93
+ it "raises an error with unknown params" do
94
+ options = {:arg1 => true}
95
+ args = lambda {
96
+ MooMoo::Args.new(options) do |c|
97
+ c.optionals :arg2
98
+ end
99
+ }
100
+
101
+ expect { args.call }.to raise_error(MooMooArgumentError, /Not a valid parameter: arg1/)
102
+ end
103
+
104
+ it "does not raise an error with known params" do
105
+ options = {:arg1 => true, :arg2 => 2}
106
+ args = MooMoo::Args.new(options) { |c|
107
+ c.optionals :arg1, :arg2
108
+ }
109
+
110
+ args.optional_params.should have(2).values
111
+ args.optional_params.should include(:arg1, :arg2)
112
+ end
113
+
114
+ it "does not set required_params" do
115
+ options = {:arg1 => true, :arg2 => 2}
116
+ args = MooMoo::Args.new(options) { |c|
117
+ c.optionals :arg1, :arg2
118
+ }
119
+
120
+ args.required_params.should be_empty
121
+ end
122
+
123
+ it "does not set boolean_params" do
124
+ options = {:arg1 => true, :arg2 => 2}
125
+ args = MooMoo::Args.new(options) { |c|
126
+ c.optionals :arg1, :arg2
127
+ }
128
+
129
+ args.boolean_params.should be_empty
130
+ end
131
+ end
132
+
133
+ context "one_of" do
134
+ it "allows one arg" do
135
+ options = {:arg1 => true}
136
+ args = lambda {
137
+ MooMoo::Args.new(options) do |c|
138
+ c.one_of :arg1
139
+ end
140
+ }
141
+
142
+ expect { args.call }.to raise_error(MooMooArgumentError, /One of requires two or more items/)
143
+ end
144
+
145
+ it "allows two or more args" do
146
+ options = {:arg1 => true}
147
+
148
+ args = MooMoo::Args.new(options) do |c|
149
+ c.one_of :arg1, :arg2
150
+ end
151
+
152
+ args.one_of_params.should have(2).values
153
+ args.one_of_params.should include(:arg1, :arg2)
154
+ end
155
+
156
+ it "does not allow 0 params" do
157
+ options = {}
158
+ args = lambda {
159
+ MooMoo::Args.new(options) do |c|
160
+ c.one_of :arg1, :arg2
161
+ end
162
+ }
163
+
164
+ expect { args.call }.to raise_error(MooMooArgumentError, /The parameters may include only one of 'arg1, arg2'/)
165
+ end
166
+
167
+ it "does not allow both args" do
168
+ options = {:arg1 => true, :arg2 => 2}
169
+ args = lambda {
170
+ MooMoo::Args.new(options) do |c|
171
+ c.one_of :arg1, :arg2
172
+ end
173
+ }
174
+
175
+ expect { args.call }.to raise_error(MooMooArgumentError, /The parameters may include only one of 'arg1, arg2'/)
176
+ end
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+ require 'moo_moo/opensrs'
3
+
4
+ module MooMoo
5
+
6
+ describe OpenSRS do
7
+ before(:each) do
8
+ def random_domain
9
+ "domainthatsnottaken#{Time.now.to_i}.com"
10
+ end
11
+
12
+ @opensrs = OpenSRS::Base.new
13
+ @registered_domain = "domainthatsnottaken1302209138.com"
14
+ end
15
+
16
+ describe "CookieCommands" do
17
+ describe "#set_cookie" do
18
+ it "sets the cookie" do
19
+ VCR.use_cassette("cookie/set_cookie") do
20
+ res = @opensrs.set_cookie(:username => MooMoo.config.user,
21
+ :password => MooMoo.config.pass,
22
+ :domain => @registered_domain)
23
+ res.success?.should be_true
24
+ res.result['cookie'].should == "0000000000000000:000000:00000"
25
+ end
26
+ end
27
+
28
+ it "fails to set the cookie" do
29
+ VCR.use_cassette("cookie/set_cookie_fail") do
30
+ res = @opensrs.set_cookie(:username => MooMoo.config.user,
31
+ :password => 'password',
32
+ :domain => 'example.com')
33
+ res.success?.should be_false
34
+ res.error_code.should == 415
35
+ end
36
+ end
37
+ end
38
+
39
+ describe "#delete_cookie" do
40
+ use_vcr_cassette "cookie/delete_cookie"
41
+
42
+ it "destroys the cookie" do
43
+ res = @opensrs.set_cookie(:username => MooMoo.config.user,
44
+ :password => MooMoo.config.pass,
45
+ :domain => @registered_domain)
46
+ res = @opensrs.delete_cookie(res.result['cookie'])
47
+ res.success?.should be_true
48
+ end
49
+ end
50
+
51
+ describe "#update_cookie" do
52
+ use_vcr_cassette "cookie/update_cookie"
53
+
54
+ it "updates the cookie's domain" do
55
+ res = @opensrs.set_cookie(:username => MooMoo.config.user,
56
+ :password => MooMoo.config.pass,
57
+ :domain => @registered_domain)
58
+ res = @opensrs.update_cookie(
59
+ :old_domain => @registered_domain,
60
+ :new_domain => @registered_domain,
61
+ :cookie => res.result['cookie'])
62
+ res.success?.should be_true
63
+ res.result['domain_count'].to_i.should == 1
64
+ end
65
+ end
66
+
67
+ describe "#quit_session" do
68
+ use_vcr_cassette "cookie/quit_session"
69
+
70
+ it "quits the session" do
71
+ res = @opensrs.quit_session
72
+ res.success?.should be_true
73
+ end
74
+ end
75
+ end
76
+
77
+ end
78
+ end