require 'test_helper' module RubyPsigate class GatewayTest < Test::Unit::TestCase should "default to TEST environment" do assert_equal :test, Gateway.env end should "set Gateway.env to :live" do Gateway.live! assert_equal :live, Gateway.env end should "set Gateway.env to :test" do Gateway.test! assert_equal :test, Gateway.env end should "set mode based on information passed to object instantiation" do @gateway = Gateway.new(:store_id => "teststore", :passphrase => "psigate1234") assert_equal :transaction, @gateway.mode end should "manually set mode" do @gateway = Gateway.new @gateway.mode = :account_manager assert_equal :account_manager, @gateway.mode end should "set mode when parameter entered is a string" do @gateway = Gateway.new @gateway.mode = "account_manager" assert_equal :account_manager, @gateway.mode end should "raise error if mode is invalid" do @gateway = Gateway.new assert_raises(InvalidGatewayMode) do @gateway.mode = :unsupported end end context "transaction interface" do setup do @gateway = Gateway.new(:store_id => "teststore", :passphrase => "psigate1234") end should "be set to transaction mode" do assert_equal :transaction, @gateway.mode end should "respond to order getter/setter" do assert @gateway.respond_to?(:order) assert @gateway.respond_to?(:order=) end should "set the order" do order = RubyPsigate::Order.new assert @gateway.order.nil? @gateway.order = order assert_equal order, @gateway.order end should "raise error if mode not set before post" do @gateway = Gateway.new assert_nil @gateway.mode assert_raises(InvalidGatewayMode) { @gateway.commit! } end should "raise error if mode is :transaction and passphrase is missing" do @gateway = Gateway.new(:store_id => "teststore", :passphrase => nil) @gateway.mode = :transaction assert_raises(InvalidCredentials) { @gateway.commit! } end should "raise error if mode is :transaction and store_id is missing" do @gateway = Gateway.new(:store_id => nil, :passphrase => "password") @gateway.mode = :transaction assert_raises(InvalidCredentials) { @gateway.commit! } end should "raise error if order not valid" do @order = Order.new @order.expects(:valid?).returns(false) @gateway.order = @order assert_raises(InvalidOrder) { @gateway.commit! } end end context "account manager" do should "raise error if mode is :account_manager and cid is missing" do @gateway = Gateway.new(:cid => nil, :user_id => "teststore", :password => "password") @gateway.mode = :account_manager assert_raises(InvalidCredentials) { @gateway.commit! } end should "raise error if mode is :account_manager and user_id is missing" do @gateway = Gateway.new(:cid => "1000001", :user_id => nil, :password => "password") @gateway.mode = :account_manager assert_raises(InvalidCredentials) { @gateway.commit! } end should "raise error if mode is :account_manager and password is missing" do @gateway = Gateway.new(:cid => "1000001", :user_id => "teststore", :password => nil) @gateway.mode = :account_manager assert_raises(InvalidCredentials) { @gateway.commit! } end end end end