ruby-ecomm-client 1.1.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +15 -0
  2. data/.ruby-version +1 -1
  3. data/Gemfile +1 -0
  4. data/README.md +10 -0
  5. data/fixtures/vcr_cassettes/account_info/default.yml +49 -34
  6. data/fixtures/vcr_cassettes/account_info/unknown/resource_id.yml +42 -34
  7. data/fixtures/vcr_cassettes/account_info/unknown/resource_type.yml +42 -34
  8. data/fixtures/vcr_cassettes/account_info/unknown/source_tree_id.yml +42 -34
  9. data/fixtures/vcr_cassettes/express_checkout/configured.yml +39 -31
  10. data/fixtures/vcr_cassettes/express_checkout/unknown.yml +39 -31
  11. data/fixtures/vcr_cassettes/request_change/express/downgrade/default.yml +46 -36
  12. data/fixtures/vcr_cassettes/request_change/express/downgrade/noop.yml +55 -34
  13. data/fixtures/vcr_cassettes/request_change/express/downgrade/unknown/resource_id.yml +46 -34
  14. data/fixtures/vcr_cassettes/request_change/express/downgrade/unknown/resource_type.yml +47 -34
  15. data/fixtures/vcr_cassettes/request_change/express/downgrade/unknown/target_tree_id.yml +46 -34
  16. data/fixtures/vcr_cassettes/request_change/express/relay/default.yml +48 -0
  17. data/fixtures/vcr_cassettes/request_change/express/upgrade/default.yml +55 -36
  18. data/fixtures/vcr_cassettes/request_change/express/upgrade/noop.yml +46 -34
  19. data/fixtures/vcr_cassettes/request_change/express/upgrade/unknown/resource_id.yml +46 -34
  20. data/fixtures/vcr_cassettes/request_change/express/upgrade/unknown/resource_type.yml +47 -34
  21. data/fixtures/vcr_cassettes/request_change/express/upgrade/unknown/target_tree_id.yml +46 -34
  22. data/fixtures/vcr_cassettes/request_change/manager/downgrade/default.yml +43 -34
  23. data/fixtures/vcr_cassettes/request_change/manager/downgrade/noop.yml +43 -34
  24. data/fixtures/vcr_cassettes/request_change/manager/downgrade/unknown/resource_id.yml +43 -34
  25. data/fixtures/vcr_cassettes/request_change/manager/downgrade/unknown/resource_type.yml +43 -34
  26. data/fixtures/vcr_cassettes/request_change/manager/downgrade/unknown/target_tree_id.yml +43 -34
  27. data/fixtures/vcr_cassettes/request_change/manager/relay/default.yml +100 -0
  28. data/fixtures/vcr_cassettes/request_change/manager/upgrade/default.yml +43 -34
  29. data/fixtures/vcr_cassettes/request_change/manager/upgrade/noop.yml +43 -34
  30. data/fixtures/vcr_cassettes/request_change/manager/upgrade/unknown/resource_id.yml +43 -34
  31. data/fixtures/vcr_cassettes/request_change/manager/upgrade/unknown/resource_type.yml +43 -34
  32. data/fixtures/vcr_cassettes/request_change/manager/upgrade/unknown/target_tree_id.yml +43 -34
  33. data/fixtures/vcr_cassettes/transitions/default/unknown/source_tree_id.yml +42 -34
  34. data/fixtures/vcr_cassettes/transitions/many.yml +49 -34
  35. data/fixtures/vcr_cassettes/transitions/one.yml +49 -34
  36. data/lib/ruby-ecomm-client.rb +13 -1
  37. data/lib/ruby-ecomm-client/client.rb +19 -148
  38. data/lib/ruby-ecomm-client/config.rb +25 -0
  39. data/lib/ruby-ecomm-client/service_base.rb +55 -0
  40. data/lib/ruby-ecomm-client/service_manager.rb +75 -0
  41. data/lib/ruby-ecomm-client/service_profile.rb +30 -0
  42. data/lib/ruby-ecomm-client/service_purchase.rb +79 -0
  43. data/lib/ruby-ecomm-client/util.rb +16 -0
  44. data/lib/ruby-ecomm-client/version.rb +1 -1
  45. data/ruby-ecomm-client.gemspec +2 -1
  46. data/script/bootstrap +68 -0
  47. data/script/cibuild +4 -5
  48. data/spec/ruby-ecomm-client/client_spec.rb +32 -339
  49. data/spec/ruby-ecomm-client/config_spec.rb +56 -0
  50. data/spec/ruby-ecomm-client/service_base_spec.rb +119 -0
  51. data/spec/ruby-ecomm-client/service_manager_spec.rb +285 -0
  52. data/spec/ruby-ecomm-client/service_profile_spec.rb +33 -0
  53. data/spec/ruby-ecomm-client/service_purchase_spec.rb +160 -0
  54. data/spec/ruby-ecomm-client/util_spec.rb +66 -0
  55. data/spec/spec_helper.rb +10 -0
  56. metadata +160 -152
  57. data/lib/ruby-ecomm-client/converter.rb +0 -45
  58. data/spec/ruby-ecomm-client/converter_spec.rb +0 -96
@@ -0,0 +1,75 @@
1
+ module RubyEcommClient
2
+ class ServiceManager < ServiceBase
3
+ ENDPOINTS_MANAGER = {
4
+ :development => 'http://bonsai.dev.glbt1.gdg/Bonsai/BonsaiManager/Service.asmx',
5
+ :production => 'http://bonsai.prod.phx3.gdg/Bonsai/BonsaiManager/Service.asmx',
6
+ :qa => 'http://bonsai.test.glbt1.gdg/Bonsai/BonsaiManager/Service.asmx',
7
+ :test => 'http://bonsai.dev.glbt1.gdg/Bonsai/BonsaiManager/Service.asmx'
8
+ }
9
+
10
+ WSDL_MANAGER = 'manager.wsdl'
11
+
12
+ def account_info(source_tree_id = 0)
13
+ result = client_manager.call(:get_account_xml, :message => generate_request_account_hash(source_tree_id))
14
+ response = convert_response(result.body[:get_account_xml_response])
15
+ if response[:result_code] == 0
16
+ response[:account_xml][:bonsai][:bonsai]
17
+ else
18
+ raise RubyEcommError.new(response[:result_code])
19
+ end
20
+ end
21
+
22
+ def transitions(source_tree_id = 0)
23
+ transitions = account_info(source_tree_id)[:tree][:transition]
24
+ transitions.is_a?(Array) ? transitions : [transitions]
25
+ end
26
+
27
+ def find_transition(transitions, target_pfid)
28
+ raise ArgumentError.new('transitions must be specified') if blank?(transitions)
29
+ raise ArgumentError.new('target_pfid must be specified') if blank?(target_pfid)
30
+
31
+ transitions = transitions.is_a?(Array) ? transitions : [transitions]
32
+ transitions.find do |transition|
33
+ transition[:product_id].to_s == target_pfid.to_s
34
+ end
35
+ end
36
+
37
+ def request_change_via_manager(target_tree_id)
38
+ raise ArgumentError.new('target_tree_id must be specified') if blank?(target_tree_id)
39
+
40
+ request_hash = generate_request_change_hash
41
+ request_hash['AccountChangeXml'] = %W(
42
+ <ClientChange
43
+ TreeID='#{target_tree_id}'
44
+ ShopperID='#{config_client.shopper_id}'/>
45
+ ).join(' ')
46
+
47
+ result = client_manager.call(:change_account_request, :message => request_hash)
48
+ response = convert_response(result.body[:change_account_request_response])
49
+ if response[:result_code] == 0
50
+ {
51
+ :used_express_checkout => false,
52
+ :request_result => response[:change_account_request_result]
53
+ }
54
+ else
55
+ raise RubyEcommError.new(response[:result_code], response[:change_account_request_result])
56
+ end
57
+ end
58
+
59
+ private
60
+
61
+ def client_manager
62
+ @client_manager ||= create_client do |globals|
63
+ globals.wsdl "#{wsdl_path}#{WSDL_MANAGER}"
64
+ globals.endpoint ENDPOINTS_MANAGER[environment]
65
+ end
66
+ end
67
+
68
+ def generate_request_account_hash(source_tree_id = 0)
69
+ generate_request_hash.merge({
70
+ 'TreeID' => source_tree_id,
71
+ 'PrivateLabelID' => 1
72
+ })
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,30 @@
1
+ module RubyEcommClient
2
+ class ServiceProfile < ServiceBase
3
+ ENDPOINTS_PROFILE = {
4
+ :development => 'http://gdcomm.dev.glbt1.gdg/WSgdInstantPurchasePublic/Service.asmx',
5
+ :production => 'https://gdcomm.prod.phx3.gdg/WSgdInstantPurchasePublic/Service.asmx',
6
+ :qa => 'http://gdcomm.test.glbt1.gdg/WSgdInstantPurchasePublic/Service.asmx',
7
+ :test => 'http://gdcomm.dev.glbt1.gdg/WSgdInstantPurchasePublic/Service.asmx'
8
+ }
9
+
10
+ WSDL_PROFILE = 'profile.wsdl'
11
+
12
+ def express_checkout?
13
+ result = client_profile.call(:shopper_has_instant_purchase_payment, :message => {
14
+ 'sShopperID' => config_client.shopper_id
15
+ })
16
+ response = convert_value(result.body[:shopper_has_instant_purchase_payment_response])
17
+ response[:b_has_instant_purchase_payment]
18
+ end
19
+
20
+ private
21
+
22
+ def client_profile
23
+ @client_profile ||= create_client do |globals|
24
+ globals.wsdl "#{wsdl_path}#{WSDL_PROFILE}"
25
+ globals.endpoint ENDPOINTS_PROFILE[environment]
26
+ globals.namespace 'http://tempuri.org/'
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,79 @@
1
+ module RubyEcommClient
2
+ class ServicePurchase < ServiceBase
3
+ ENDPOINTS_PURCHASE = {
4
+ :development => 'https://bonsaipurchase.dev.glbt1.gdg/BonsaiPurchase/Service.asmx',
5
+ :production => 'https://bonsaipurchase.prod.phx3.gdg/BonsaiPurchase/Service.asmx',
6
+ :qa => 'https://bonsaipurchase.test.glbt1.gdg/BonsaiPurchase/Service.asmx',
7
+ :test => 'https://bonsaipurchase.dev.glbt1.gdg/BonsaiPurchase/Service.asmx'
8
+ }
9
+
10
+ HOST_NAME = `hostname`.chomp
11
+
12
+ WSDL_PURCHASE = 'purchase.wsdl'
13
+
14
+ def request_change(target_tree_id, client_ip = '127.0.0.1')
15
+ raise ArgumentError.new('target_tree_id must be specified') if blank?(target_tree_id)
16
+
17
+ if config_client.express_checkout?
18
+ request_change_via_express(target_tree_id, client_ip)
19
+ else
20
+ config_client.request_change_via_manager(target_tree_id)
21
+ end
22
+ end
23
+
24
+ def request_change_via_express(target_tree_id, client_ip = '127.0.0.1')
25
+ raise ArgumentError.new('target_tree_id must be specified') if blank?(target_tree_id)
26
+ config_global.validate
27
+
28
+ request_hash = generate_request_change_hash
29
+ request_hash['AccountPurchaseChangeXml'] = %W(
30
+ <ClientChange
31
+ TreeID='#{target_tree_id}'
32
+ ShopperID='#{config_client.shopper_id}'
33
+ TransactionCurrency='USD'
34
+ RequestingApp='#{config_global.requesting_app}'
35
+ RequestingAppHost='#{HOST_NAME}'
36
+ ClientAddr='#{client_ip}'
37
+ EnteredBy='customer'
38
+ OrderSource='Online'
39
+ RedirectToBasket='false'
40
+ EstimateOnly='false'
41
+ SendConfirmEmail='false'/>
42
+ ).join(' ')
43
+
44
+ result = client_purchase.call(:purchase_change_account_request, :message => request_hash)
45
+ response = convert_response(result.body[:purchase_change_account_request_response])
46
+ if response[:result_code] == 0
47
+ {
48
+ :used_express_checkout => true,
49
+ :request_result => response[:purchase_change_account_request_result],
50
+ :error => response[:error],
51
+ :order_xml => response[:order_xml]
52
+ }
53
+ else
54
+ raise RubyEcommError.new(response[:result_code], response[:change_account_request_result])
55
+ end
56
+ end
57
+
58
+ private
59
+
60
+ def client_purchase
61
+ @client_purchase ||= create_client do |globals|
62
+ globals.wsdl "#{wsdl_path}#{WSDL_PURCHASE}"
63
+ globals.endpoint ENDPOINTS_PURCHASE[environment]
64
+
65
+ globals.ssl_verify_mode :none
66
+ # Must force explicit value to avoid ECONNRESET on P3 servers
67
+ globals.ssl_version :TLSv1
68
+ if !blank?(config_global.ssl_cert_file) && File.exists?(config_global.ssl_cert_file)
69
+ globals.ssl_cert_file config_global.ssl_cert_file
70
+ end
71
+ if !blank?(config_global.ssl_cert_key_file) && File.exists?(config_global.ssl_cert_key_file)
72
+ globals.ssl_cert_key_file config_global.ssl_cert_key_file
73
+ end
74
+ globals.ssl_cert_content config_global.ssl_cert_content unless blank?(config_global.ssl_cert_content)
75
+ globals.ssl_cert_key_content config_global.ssl_cert_key_content unless blank?(config_global.ssl_cert_key_content)
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,16 @@
1
+ module Utils
2
+ def self.included(base)
3
+ base.send(:include, Methods)
4
+ base.extend Methods
5
+ end
6
+
7
+ module Methods
8
+ def blank?(value)
9
+ value.nil? || (value.respond_to?(:empty?) && value.empty?) || value.to_s.strip == ''
10
+ end
11
+
12
+ def environment
13
+ ((defined?(Rails) ? Rails.env : ENV['RAILS_ENV']) || 'development').to_sym
14
+ end
15
+ end
16
+ end
@@ -1,3 +1,3 @@
1
1
  module RubyEcommClient
2
- VERSION = "1.1.0"
2
+ VERSION = "1.7.0"
3
3
  end
@@ -21,10 +21,11 @@ Gem::Specification.new do |gem|
21
21
  gem.add_development_dependency "ci_reporter"
22
22
  gem.add_development_dependency 'fakeweb'
23
23
  gem.add_development_dependency "gemfury"
24
- gem.add_development_dependency "rcov"
24
+ gem.add_development_dependency "simplecov"
25
25
  gem.add_development_dependency "rspec"
26
26
  gem.add_development_dependency 'vcr'
27
27
 
28
+ gem.add_runtime_dependency "freddy"
28
29
  gem.add_runtime_dependency "nokogiri", "1.5.10"
29
30
  gem.add_runtime_dependency "savon"
30
31
  end
@@ -0,0 +1,68 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ main()
5
+ {
6
+ has_ruby_version_manager
7
+ install_correct_version_of_ruby
8
+ install_bundler
9
+
10
+ install_bundle
11
+ }
12
+
13
+ log()
14
+ {
15
+ local blue="\033[0;34m"
16
+ local reset="\033[0m"
17
+ printf "$blue[bootstrap] %s$reset\n" "$1"
18
+ }
19
+
20
+ has_bundle_installed()
21
+ {
22
+ bundle check > /dev/null 2>&1
23
+ }
24
+
25
+ install_bundle()
26
+ {
27
+ if ! has_bundle_installed; then
28
+ log "Installing bundle"
29
+ bundle install --path='vendor' --binstubs='.bin' --clean
30
+ fi
31
+ }
32
+
33
+ has_ruby_version_manager()
34
+ {
35
+ command -v rbenv > /dev/null 2>&1 || exit 2;
36
+ }
37
+
38
+ has_correct_version_of_ruby()
39
+ {
40
+ rbenv versions | grep $(cat .ruby-version) &>/dev/null
41
+ }
42
+
43
+ install_correct_version_of_ruby()
44
+ {
45
+ if ! has_correct_version_of_ruby; then
46
+ version="$(cat .ruby-version)"
47
+ log "Installing ruby $version"
48
+ rbenv install $version
49
+ rbenv rehash
50
+ fi
51
+ }
52
+
53
+ has_bundler_installed()
54
+ {
55
+ # exits non-zero if bundle is not a command in the current Ruby version.
56
+ rbenv which bundle &>/dev/null
57
+ }
58
+
59
+ install_bundler()
60
+ {
61
+ if ! has_bundler_installed; then
62
+ log "Installing bundler"
63
+ gem install bundler --no-ri --no-rdoc
64
+ rbenv rehash
65
+ fi
66
+ }
67
+
68
+ main
@@ -1,10 +1,9 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
- [[ -f "$HOME/.bash_profile" ]] && source ~/.bash_profile
4
- [[ ! $(echo $PATH | grep 'rbenv') ]] && rvm use ree-1.8.7-2012.02@ruby_ecomm_client --create
3
+ echo ""
4
+ echo "[$(date)] Bootstrapping"
5
+ script/bootstrap
5
6
 
6
7
  set -e
7
8
 
8
- bundle check || bundle install
9
-
10
- bundle exec rake
9
+ bundle exec rake spec
@@ -4,13 +4,13 @@ describe RubyEcommClient::Client do
4
4
  before do
5
5
  use_test = [:qa, :production].include?(RubyEcommClient::Client.environment)
6
6
 
7
- @shopper_id = use_test ? '255528' : '922411'
8
- @low_tree_id = '1734'
9
- @downgrade_tree_id = '1736'
10
- @current_tree_id = '1735'
11
- @upgrade_tree_id = '1737'
7
+ @shopper_id = use_test ? '261639' : '923518'
8
+ @low_tree_id = '2402'
9
+ @downgrade_tree_id = '2402'
10
+ @current_tree_id = '2410'
11
+ @upgrade_tree_id = '2418'
12
12
  @resource_type = 'outright'
13
- @resource_id = use_test ? 'e1dd6ab9-b072-11e3-9aad-005056953ce3' : '10e16f14-b606-11e3-a45e-0050569575d8'
13
+ @resource_id = use_test ? 'd5e2ead3-c1c4-11e3-9ea5-005056953ce3' : 'b6be6fd0-c1a5-11e3-8e42-0050569575d8'
14
14
 
15
15
  @client = RubyEcommClient::Client.new(@shopper_id, @resource_type, @resource_id)
16
16
  end
@@ -53,366 +53,59 @@ describe RubyEcommClient::Client do
53
53
  end
54
54
  end
55
55
 
56
- context '#environment' do
57
- it 'not be nil' do
58
- RubyEcommClient::Client.environment.should_not be_nil
59
- end
60
-
61
- it 'not be blank' do
62
- RubyEcommClient::Client.environment.should_not eq('')
63
- end
64
-
65
- it 'honor ENV' do
66
- old_env = ENV['RAILS_ENV']
67
- ENV['RAILS_ENV'] = 'production'
68
- RubyEcommClient::Client.environment.should eq(:production)
69
- ENV['RAILS_ENV'] = old_env
70
- end
71
- end
72
-
73
56
  context '#express_checkout?' do
74
- it 'return false for unknown' do
75
- VCR.use_cassette('express_checkout/unknown') do
76
- @client.shopper_id = '101010'
77
- @client.express_checkout?.should eq(false)
78
- end
79
- end
57
+ it 'must relay' do
58
+ RubyEcommClient::ServiceProfile.any_instance.should_receive(:express_checkout?).once
80
59
 
81
- it 'return true when configured' do
82
- VCR.use_cassette('express_checkout/configured') do
83
- @client.express_checkout?.should eq(true)
84
- end
60
+ @client.express_checkout?
85
61
  end
86
62
  end
87
63
 
88
64
  context '#account_info' do
89
- before do
90
- VCR.use_cassette('account_info/default') do
91
- @account_info = @client.account_info
92
- end
93
- end
94
-
95
- it 'raise RubyEcommError for unknown resource_type' do
96
- VCR.use_cassette('account_info/unknown/resource_type') do
97
- @client.resource_type = 'flugel'
98
- expect { @client.account_info }.to raise_error(RubyEcommError){|e| e.result_code.should eq(-100) }
99
- end
100
- end
101
-
102
- it 'raise RubyEcommError for unknown resource_id' do
103
- VCR.use_cassette('account_info/unknown/resource_id') do
104
- @client.resource_id = 'unknown'
105
- expect { @client.account_info }.to raise_error(RubyEcommError){|e| e.result_code.should eq(-304) }
106
- end
107
- end
108
-
109
- it 'raise RubyEcommError for unknown source_tree_id' do
110
- VCR.use_cassette('account_info/unknown/source_tree_id') do
111
- expect { @client.account_info(90909) }.to raise_error(RubyEcommError){|e| e.result_code.should eq(-999) }
112
- end
113
- end
65
+ it 'must relay' do
66
+ RubyEcommClient::ServiceManager.any_instance.should_receive(:account_info).with(1).once
114
67
 
115
- it 'return a Hash' do
116
- @account_info.class.should eq(Hash)
117
- end
118
-
119
- it 'include product_id' do
120
- @account_info[:product_id].class.should eq(Fixnum)
121
- end
122
-
123
- it 'include tree_id' do
124
- @account_info[:tree_id].class.should eq(Fixnum)
125
- @account_info[:tree_id].should eq(@current_tree_id.to_i)
126
- end
127
-
128
- it 'include is_free' do
129
- @account_info[:is_free].class.should eq(FalseClass)
130
- end
131
-
132
- it 'include tree Hash' do
133
- @account_info[:tree].class.should eq(Hash)
68
+ @client.account_info(1)
134
69
  end
135
70
  end
136
71
 
137
72
  context '#transitions' do
138
- it 'raise RubyEcommError for unknown source_tree_id' do
139
- VCR.use_cassette('transitions/default/unknown/source_tree_id') do
140
- expect { @client.transitions(87563) }.to raise_error(RubyEcommError){|e| e.result_code.should eq(-999) }
141
- end
142
- end
143
- end
73
+ it 'must relay' do
74
+ RubyEcommClient::ServiceManager.any_instance.should_receive(:transitions).with(1).once
144
75
 
145
- context '#transitions for one' do
146
- before do
147
- VCR.use_cassette('transitions/one') do
148
- @transitions = @client.transitions(@low_tree_id)
149
- end
150
- end
151
-
152
- it 'return an Array' do
153
- @transitions.class.should eq(Array)
154
- end
155
-
156
- it 'return multiple' do
157
- @transitions.size.should eq(1)
158
- end
159
-
160
- it 'return containing Hashes' do
161
- @transitions.first.class.should eq(Hash)
162
- end
163
-
164
- it 'return containing Hashes with product_id' do
165
- @transitions.first[:product_id].class.should eq(Fixnum)
166
- end
167
-
168
- it 'return containing Hashes with tree_id' do
169
- @transitions.first[:tree_id].class.should eq(Fixnum)
170
- end
171
-
172
- it 'return containing Hashes with node_name' do
173
- @transitions.first[:node_name].class.should eq(String)
76
+ @client.transitions(1)
174
77
  end
175
78
  end
176
79
 
177
- context '#transitions for many' do
178
- before do
179
- VCR.use_cassette('transitions/many') do
180
- @transitions = @client.transitions(@current_tree_id)
181
- end
182
- end
80
+ context '#find_transition' do
81
+ it 'must relay' do
82
+ RubyEcommClient::ServiceManager.any_instance.should_receive(:find_transition).with([], 1).once
183
83
 
184
- it 'return an Array' do
185
- @transitions.class.should eq(Array)
186
- end
187
-
188
- it 'return multiple' do
189
- @transitions.size.should eq(6)
84
+ @client.find_transition([], 1)
190
85
  end
86
+ end
191
87
 
192
- it 'return containing Hashes' do
193
- @transitions.first.class.should eq(Hash)
194
- end
88
+ context '#request_change_via_manager' do
89
+ it 'must relay' do
90
+ RubyEcommClient::ServiceManager.any_instance.should_receive(:request_change_via_manager).with(1).once
195
91
 
196
- it 'return containing Hashes with product_id' do
197
- @transitions.first[:product_id].class.should eq(Fixnum)
92
+ @client.request_change_via_manager(1)
198
93
  end
94
+ end
199
95
 
200
- it 'return containing Hashes with tree_id' do
201
- @transitions.first[:tree_id].class.should eq(Fixnum)
202
- end
96
+ context '#request_change_via_express' do
97
+ it 'must relay' do
98
+ RubyEcommClient::ServicePurchase.any_instance.should_receive(:request_change_via_express).with(1, '10.0.1.1').once
203
99
 
204
- it 'return containing Hashes with node_name' do
205
- @transitions.first[:node_name].class.should eq(String)
100
+ @client.request_change_via_express(1, '10.0.1.1')
206
101
  end
207
102
  end
208
103
 
209
104
  context '#request_change' do
210
- context 'via express_checkout' do
211
- before do
212
- @client.stub(:express_checkout?).and_return(true)
213
- end
214
-
215
- context 'upgrade' do
216
- before do
217
- VCR.use_cassette('request_change/express/upgrade/default') do
218
- @result = @client.request_change(@upgrade_tree_id)
219
- end
220
- end
221
-
222
- it 'require target_tree_id non-nil' do
223
- expect { @client.request_change(nil) }.to raise_error(ArgumentError)
224
- end
225
-
226
- it 'require target_tree_id non-blank' do
227
- expect { @client.request_change('') }.to raise_error(ArgumentError)
228
- end
229
-
230
- it 'raise RubyEcommError for unknown resource_type' do
231
- VCR.use_cassette('request_change/express/upgrade/unknown/resource_type') do
232
- @client.resource_type = 'flugel'
233
- expect { @client.request_change(@upgrade_tree_id) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-100) }
234
- end
235
- end
236
-
237
- it 'raise RubyEcommError for unknown resource_id' do
238
- VCR.use_cassette('request_change/express/upgrade/unknown/resource_id') do
239
- @client.resource_id = 'unknown'
240
- expect { @client.request_change(@upgrade_tree_id) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-304) }
241
- end
242
- end
243
-
244
- it 'raise RubyEcommError for unknown target_tree_id' do
245
- VCR.use_cassette('request_change/express/upgrade/unknown/target_tree_id') do
246
- expect { @client.request_change(73223) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-999) }
247
- end
248
- end
249
-
250
- it "return no-op request_result for transition to same" do
251
- VCR.use_cassette('request_change/express/upgrade/noop') do
252
- result = @client.request_change(@current_tree_id)
253
- result[:request_result].should eq(1)
254
- result[:used_express_checkout].should eq(true)
255
- end
256
- end
257
-
258
- it "return success request_result for valid transition" do
259
- @result[:request_result].should eq(0)
260
- @result[:used_express_checkout].should eq(true)
261
- end
262
- end
263
-
264
- context 'downgrade' do
265
- before do
266
- VCR.use_cassette('request_change/express/downgrade/default') do
267
- @result = @client.request_change(@downgrade_tree_id)
268
- end
269
- end
270
-
271
- it 'require target_tree_id non-nil' do
272
- expect { @client.request_change(nil) }.to raise_error(ArgumentError)
273
- end
274
-
275
- it 'require target_tree_id non-blank' do
276
- expect { @client.request_change('') }.to raise_error(ArgumentError)
277
- end
278
-
279
- it 'raise RubyEcommError for unknown resource_type' do
280
- VCR.use_cassette('request_change/express/downgrade/unknown/resource_type') do
281
- @client.resource_type = 'flugel'
282
- expect { @client.request_change(@downgrade_tree_id) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-100) }
283
- end
284
- end
285
-
286
- it 'raise RubyEcommError for unknown resource_id' do
287
- VCR.use_cassette('request_change/express/downgrade/unknown/resource_id') do
288
- @client.resource_id = 'unknown'
289
- expect { @client.request_change(@downgrade_tree_id) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-304) }
290
- end
291
- end
292
-
293
- it 'raise RubyEcommError for unknown target_tree_id' do
294
- VCR.use_cassette('request_change/express/downgrade/unknown/target_tree_id') do
295
- expect { @client.request_change(73541) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-999) }
296
- end
297
- end
298
-
299
- it "return no-op request_result for transition to same" do
300
- VCR.use_cassette('request_change/express/downgrade/noop') do
301
- result = @client.request_change(@current_tree_id)
302
- result[:request_result].should eq(1)
303
- result[:used_express_checkout].should eq(true)
304
- end
305
- end
306
-
307
- it "return success request_result for valid transition" do
308
- @result[:request_result].should eq(0)
309
- @result[:used_express_checkout].should eq(true)
310
- end
311
- end
312
- end
313
-
314
- context 'via manager' do
315
- before do
316
- @client.stub(:express_checkout?).and_return(false)
317
- end
318
-
319
- context 'upgrade' do
320
- before do
321
- VCR.use_cassette('request_change/manager/upgrade/default') do
322
- @result = @client.request_change(@upgrade_tree_id)
323
- end
324
- end
325
-
326
- it 'require target_tree_id non-nil' do
327
- expect { @client.request_change(nil) }.to raise_error(ArgumentError)
328
- end
329
-
330
- it 'require target_tree_id non-blank' do
331
- expect { @client.request_change('') }.to raise_error(ArgumentError)
332
- end
333
-
334
- it 'raise RubyEcommError for unknown resource_type' do
335
- VCR.use_cassette('request_change/manager/upgrade/unknown/resource_type') do
336
- @client.resource_type = 'flugel'
337
- expect { @client.request_change(@upgrade_tree_id) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-100) }
338
- end
339
- end
340
-
341
- it 'raise RubyEcommError for unknown resource_id' do
342
- VCR.use_cassette('request_change/manager/upgrade/unknown/resource_id') do
343
- @client.resource_id = 'unknown'
344
- expect { @client.request_change(@upgrade_tree_id) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-304) }
345
- end
346
- end
347
-
348
- it 'raise RubyEcommError for unknown target_tree_id' do
349
- VCR.use_cassette('request_change/manager/upgrade/unknown/target_tree_id') do
350
- expect { @client.request_change(73223) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-999) }
351
- end
352
- end
353
-
354
- it "return no-op request_result for transition to same" do
355
- VCR.use_cassette('request_change/manager/upgrade/noop') do
356
- result = @client.request_change(@current_tree_id)
357
- result[:request_result].should eq(1)
358
- result[:used_express_checkout].should eq(false)
359
- end
360
- end
361
-
362
- it "return success request_result for valid transition" do
363
- @result[:request_result].should eq(2)
364
- @result[:used_express_checkout].should eq(false)
365
- end
366
- end
367
-
368
- context 'downgrade' do
369
- before do
370
- VCR.use_cassette('request_change/manager/downgrade/default') do
371
- @result = @client.request_change(@downgrade_tree_id)
372
- end
373
- end
374
-
375
- it 'require target_tree_id non-nil' do
376
- expect { @client.request_change(nil) }.to raise_error(ArgumentError)
377
- end
378
-
379
- it 'require target_tree_id non-blank' do
380
- expect { @client.request_change('') }.to raise_error(ArgumentError)
381
- end
382
-
383
- it 'raise RubyEcommError for unknown resource_type' do
384
- VCR.use_cassette('request_change/manager/downgrade/unknown/resource_type') do
385
- @client.resource_type = 'flugel'
386
- expect { @client.request_change(@downgrade_tree_id) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-100) }
387
- end
388
- end
389
-
390
- it 'raise RubyEcommError for unknown resource_id' do
391
- VCR.use_cassette('request_change/manager/downgrade/unknown/resource_id') do
392
- @client.resource_id = 'unknown'
393
- expect { @client.request_change(@downgrade_tree_id) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-304) }
394
- end
395
- end
396
-
397
- it 'raise RubyEcommError for unknown target_tree_id' do
398
- VCR.use_cassette('request_change/manager/downgrade/unknown/target_tree_id') do
399
- expect { @client.request_change(73541) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-999) }
400
- end
401
- end
402
-
403
- it "return no-op request_result for transition to same" do
404
- VCR.use_cassette('request_change/manager/downgrade/noop') do
405
- result = @client.request_change(@current_tree_id)
406
- result[:request_result].should eq(1)
407
- result[:used_express_checkout].should eq(false)
408
- end
409
- end
105
+ it 'must relay' do
106
+ RubyEcommClient::ServicePurchase.any_instance.should_receive(:request_change).with(1, '10.0.1.1').once
410
107
 
411
- it "return success request_result for valid transition" do
412
- @result[:request_result].should eq(2)
413
- @result[:used_express_checkout].should eq(false)
414
- end
415
- end
108
+ @client.request_change(1, '10.0.1.1')
416
109
  end
417
110
  end
418
111
  end