require 'spec_helper' describe RubyEcommClient::Client do before do use_test = [:qa, :production].include?(RubyEcommClient::Client.environment) @shopper_id = use_test ? '255528' : '922411' @low_tree_id = '1734' @downgrade_tree_id = '1736' @current_tree_id = '1735' @upgrade_tree_id = '1737' @resource_type = 'outright' @resource_id = use_test ? 'e1dd6ab9-b072-11e3-9aad-005056953ce3' : '10e16f14-b606-11e3-a45e-0050569575d8' @client = RubyEcommClient::Client.new(@shopper_id, @resource_type, @resource_id) end context '#initialize' do it 'require shopper_id non-nil' do expect { RubyEcommClient::Client.new(nil, @resource_type, @resource_id) }.to raise_error(ArgumentError) end it 'require shopper_id non-blank' do expect { RubyEcommClient::Client.new('', @resource_type, @resource_id) }.to raise_error(ArgumentError) end it 'require resource_type non-nil' do expect { RubyEcommClient::Client.new(@shopper_id, nil, @resource_id) }.to raise_error(ArgumentError) end it 'require resource_type non-blank' do expect { RubyEcommClient::Client.new(@shopper_id, '', @resource_id) }.to raise_error(ArgumentError) end it 'require resource_id non-nil' do expect { RubyEcommClient::Client.new(@shopper_id, @resource_type, nil) }.to raise_error(ArgumentError) end it 'require resource_id non-blank' do expect { RubyEcommClient::Client.new(@shopper_id, @resource_type, '') }.to raise_error(ArgumentError) end it 'set shopper_id' do @client.shopper_id.should eq(@shopper_id) end it 'set resource_type' do @client.resource_type.should eq(@resource_type) end it 'set resource_id' do @client.resource_id.should eq(@resource_id) end end context '#environment' do it 'not be nil' do RubyEcommClient::Client.environment.should_not be_nil end it 'not be blank' do RubyEcommClient::Client.environment.should_not eq('') end it 'honor ENV' do old_env = ENV['RAILS_ENV'] ENV['RAILS_ENV'] = 'production' RubyEcommClient::Client.environment.should eq(:production) ENV['RAILS_ENV'] = old_env end end context '#express_checkout?' do it 'return false for unknown' do VCR.use_cassette('express_checkout/unknown') do @client.shopper_id = '101010' @client.express_checkout?.should eq(false) end end it 'return true when configured' do VCR.use_cassette('express_checkout/configured') do @client.express_checkout?.should eq(true) end end end context '#account_info' do before do VCR.use_cassette('account_info/default') do @account_info = @client.account_info end end it 'raise RubyEcommError for unknown resource_type' do VCR.use_cassette('account_info/unknown/resource_type') do @client.resource_type = 'flugel' expect { @client.account_info }.to raise_error(RubyEcommError){|e| e.result_code.should eq(-100) } end end it 'raise RubyEcommError for unknown resource_id' do VCR.use_cassette('account_info/unknown/resource_id') do @client.resource_id = 'unknown' expect { @client.account_info }.to raise_error(RubyEcommError){|e| e.result_code.should eq(-304) } end end it 'raise RubyEcommError for unknown source_tree_id' do VCR.use_cassette('account_info/unknown/source_tree_id') do expect { @client.account_info(90909) }.to raise_error(RubyEcommError){|e| e.result_code.should eq(-999) } end end it 'return a Hash' do @account_info.class.should eq(Hash) end it 'include product_id' do @account_info[:product_id].class.should eq(Fixnum) end it 'include tree_id' do @account_info[:tree_id].class.should eq(Fixnum) @account_info[:tree_id].should eq(@current_tree_id.to_i) end it 'include is_free' do @account_info[:is_free].class.should eq(FalseClass) end it 'include tree Hash' do @account_info[:tree].class.should eq(Hash) end end context '#transitions' do it 'raise RubyEcommError for unknown source_tree_id' do VCR.use_cassette('transitions/default/unknown/source_tree_id') do expect { @client.transitions(87563) }.to raise_error(RubyEcommError){|e| e.result_code.should eq(-999) } end end end context '#transitions for one' do before do VCR.use_cassette('transitions/one') do @transitions = @client.transitions(@low_tree_id) end end it 'return an Array' do @transitions.class.should eq(Array) end it 'return multiple' do @transitions.size.should eq(1) end it 'return containing Hashes' do @transitions.first.class.should eq(Hash) end it 'return containing Hashes with product_id' do @transitions.first[:product_id].class.should eq(Fixnum) end it 'return containing Hashes with tree_id' do @transitions.first[:tree_id].class.should eq(Fixnum) end it 'return containing Hashes with node_name' do @transitions.first[:node_name].class.should eq(String) end end context '#transitions for many' do before do VCR.use_cassette('transitions/many') do @transitions = @client.transitions(@current_tree_id) end end it 'return an Array' do @transitions.class.should eq(Array) end it 'return multiple' do @transitions.size.should eq(6) end it 'return containing Hashes' do @transitions.first.class.should eq(Hash) end it 'return containing Hashes with product_id' do @transitions.first[:product_id].class.should eq(Fixnum) end it 'return containing Hashes with tree_id' do @transitions.first[:tree_id].class.should eq(Fixnum) end it 'return containing Hashes with node_name' do @transitions.first[:node_name].class.should eq(String) end end context '#request_change' do context 'via express_checkout' do before do @client.stub(:express_checkout?).and_return(true) end context 'upgrade' do before do VCR.use_cassette('request_change/express/upgrade/default') do @result = @client.request_change(@upgrade_tree_id) end end it 'require target_tree_id non-nil' do expect { @client.request_change(nil) }.to raise_error(ArgumentError) end it 'require target_tree_id non-blank' do expect { @client.request_change('') }.to raise_error(ArgumentError) end it 'raise RubyEcommError for unknown resource_type' do VCR.use_cassette('request_change/express/upgrade/unknown/resource_type') do @client.resource_type = 'flugel' expect { @client.request_change(@upgrade_tree_id) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-100) } end end it 'raise RubyEcommError for unknown resource_id' do VCR.use_cassette('request_change/express/upgrade/unknown/resource_id') do @client.resource_id = 'unknown' expect { @client.request_change(@upgrade_tree_id) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-304) } end end it 'raise RubyEcommError for unknown target_tree_id' do VCR.use_cassette('request_change/express/upgrade/unknown/target_tree_id') do expect { @client.request_change(73223) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-999) } end end it "return no-op request_result for transition to same" do VCR.use_cassette('request_change/express/upgrade/noop') do result = @client.request_change(@current_tree_id) result[:request_result].should eq(1) result[:used_express_checkout].should eq(true) end end it "return success request_result for valid transition" do @result[:request_result].should eq(0) @result[:used_express_checkout].should eq(true) end end context 'downgrade' do before do VCR.use_cassette('request_change/express/downgrade/default') do @result = @client.request_change(@downgrade_tree_id) end end it 'require target_tree_id non-nil' do expect { @client.request_change(nil) }.to raise_error(ArgumentError) end it 'require target_tree_id non-blank' do expect { @client.request_change('') }.to raise_error(ArgumentError) end it 'raise RubyEcommError for unknown resource_type' do VCR.use_cassette('request_change/express/downgrade/unknown/resource_type') do @client.resource_type = 'flugel' expect { @client.request_change(@downgrade_tree_id) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-100) } end end it 'raise RubyEcommError for unknown resource_id' do VCR.use_cassette('request_change/express/downgrade/unknown/resource_id') do @client.resource_id = 'unknown' expect { @client.request_change(@downgrade_tree_id) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-304) } end end it 'raise RubyEcommError for unknown target_tree_id' do VCR.use_cassette('request_change/express/downgrade/unknown/target_tree_id') do expect { @client.request_change(73541) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-999) } end end it "return no-op request_result for transition to same" do VCR.use_cassette('request_change/express/downgrade/noop') do result = @client.request_change(@current_tree_id) result[:request_result].should eq(1) result[:used_express_checkout].should eq(true) end end it "return success request_result for valid transition" do @result[:request_result].should eq(0) @result[:used_express_checkout].should eq(true) end end end context 'via manager' do before do @client.stub(:express_checkout?).and_return(false) end context 'upgrade' do before do VCR.use_cassette('request_change/manager/upgrade/default') do @result = @client.request_change(@upgrade_tree_id) end end it 'require target_tree_id non-nil' do expect { @client.request_change(nil) }.to raise_error(ArgumentError) end it 'require target_tree_id non-blank' do expect { @client.request_change('') }.to raise_error(ArgumentError) end it 'raise RubyEcommError for unknown resource_type' do VCR.use_cassette('request_change/manager/upgrade/unknown/resource_type') do @client.resource_type = 'flugel' expect { @client.request_change(@upgrade_tree_id) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-100) } end end it 'raise RubyEcommError for unknown resource_id' do VCR.use_cassette('request_change/manager/upgrade/unknown/resource_id') do @client.resource_id = 'unknown' expect { @client.request_change(@upgrade_tree_id) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-304) } end end it 'raise RubyEcommError for unknown target_tree_id' do VCR.use_cassette('request_change/manager/upgrade/unknown/target_tree_id') do expect { @client.request_change(73223) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-999) } end end it "return no-op request_result for transition to same" do VCR.use_cassette('request_change/manager/upgrade/noop') do result = @client.request_change(@current_tree_id) result[:request_result].should eq(1) result[:used_express_checkout].should eq(false) end end it "return success request_result for valid transition" do @result[:request_result].should eq(2) @result[:used_express_checkout].should eq(false) end end context 'downgrade' do before do VCR.use_cassette('request_change/manager/downgrade/default') do @result = @client.request_change(@downgrade_tree_id) end end it 'require target_tree_id non-nil' do expect { @client.request_change(nil) }.to raise_error(ArgumentError) end it 'require target_tree_id non-blank' do expect { @client.request_change('') }.to raise_error(ArgumentError) end it 'raise RubyEcommError for unknown resource_type' do VCR.use_cassette('request_change/manager/downgrade/unknown/resource_type') do @client.resource_type = 'flugel' expect { @client.request_change(@downgrade_tree_id) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-100) } end end it 'raise RubyEcommError for unknown resource_id' do VCR.use_cassette('request_change/manager/downgrade/unknown/resource_id') do @client.resource_id = 'unknown' expect { @client.request_change(@downgrade_tree_id) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-304) } end end it 'raise RubyEcommError for unknown target_tree_id' do VCR.use_cassette('request_change/manager/downgrade/unknown/target_tree_id') do expect { @client.request_change(73541) }.to raise_error(RubyEcommError) { |e| e.result_code.should eq(-999) } end end it "return no-op request_result for transition to same" do VCR.use_cassette('request_change/manager/downgrade/noop') do result = @client.request_change(@current_tree_id) result[:request_result].should eq(1) result[:used_express_checkout].should eq(false) end end it "return success request_result for valid transition" do @result[:request_result].should eq(2) @result[:used_express_checkout].should eq(false) end end end end end