require 'spec_helper' describe CookieJar::Wallet::Transfer do let!(:user_id){ "some-user-id" } let!(:token) { "sample token" } let!(:transfer_id){ "some-transfer-id" } let!(:access_denied) { {"message" => "You're not authorized to access the resource"} } let!(:transfer_not_found_id) { "invalid-transfer-id" } let!(:transfer_not_found_message) { {"message" => "Couldn't find Transfer id =#{transfer_not_found_id}"} } let!(:transfer_permission_denied) { {"message" => "You do not have permission to access the transfer."} } let!(:account_permission_denied) { {"message" => "You do not have permission to access the account."} } let!(:transfer_already_initiated) { {"message" => "Transfer is already initiated."} } let!(:invalid_withdraw_amount) { {"message" => "Invalid withdraw amount."} } let!(:successful_response){ { :id => "some-id", :user_id => "some-user-id", :state => "some-state", :from_account_balance => 1000, :to_account_balance => 500, :created_at => Time.now, :updated_at => Time.now } } before do CookieJar::Wallet::WalletBase.any_instance.stub(:init_token).and_return(double OAuth2::AccessToken) CookieJar::Wallet::WalletBase.any_instance.stub(:get_token).and_return(double OAuth2::AccessToken, :token => token) CookieJar::Wallet::WalletBase.any_instance.stub(:get_user_id).and_return(user_id) end let!(:user){ CookieJar::Wallet::User.new(*INITIALIZE_VALUES) } context "#create_transfer" do context "successful" do let!(:successful_json_response){ JSON.dump(successful_response) } before do user.stub(:post).and_return(successful_response) end it "should create a transfer" do user.create_transfer.should eql(successful_response) end end context "failure" do context "when unauthorized" do before do user.stub(:post).and_return(access_denied) end it "should raise ACCESS DENIED error" do expect { user.create_transfer }.to raise_error(CookieJar::Error::AccessDenied) end end end end context "#get_transfer" do context "successful" do let!(:successful_json_response){ JSON.dump(successful_response) } before do user.stub(:get).and_return(successful_response) end it "should get a transfer" do user.get_transfer(transfer_id).should eql(successful_response) end end context "on failure" do context "when transfer not found" do before do user.stub(:get).and_return(transfer_not_found_message) end it "should raise TRANSFER_NOT_FOUND error" do expect { user.get_transfer(transfer_not_found_id) }.to raise_error(CookieJar::Error::TransferNotFound) end end context "when unauthorized" do before do user.stub(:get).and_return(access_denied) end it "should raise ACCESS DENIED error" do expect { user.get_transfer(transfer_id) }.to raise_error(CookieJar::Error::AccessDenied) end end end end context "#all_transfers" do context "successful" do before do user.stub(:get).and_return([successful_response]) end it "should return all transfers created" do user.all_transfers.should eql([successful_response]) end end context "failure" do context "when unauthorized" do before do user.stub(:get).and_return({:code => 401}) end it "should raise ACCESS_DENIED error" do expect { user.all_transfers }.to raise_error(CookieJar::Error::AccessDenied) end end end end context "#activate_transfer" do context "successful" do let!(:successful_json_response){ JSON.dump(successful_response) } let!(:hash_params){ ["some-id", "some_user_id", 100, 80] } before do user.stub(:put).and_return(successful_response) end it "should transfer zing to another account" do user.activate_transfer(*hash_params).should eql(successful_response) end end context "on failure" do let!(:hash_params){ ["some-id", "some_user_id", 100, 80] } context "when unauthorized" do before do user.stub(:put).and_return(account_permission_denied) end it "should raise ACCESS_DENIED error" do expect { user.activate_transfer(*hash_params) }.to raise_error(CookieJar::Error::AccountPermissionDenied) end end context "when transfer is already initiated" do before do user.stub(:put).and_return(transfer_already_initiated) end it "should raise TriggerAlreadyInitiated error" do expect { user.activate_transfer(*hash_params) }.to raise_error(CookieJar::Error::TransferAlreadyInitiated) end end context "when transfer permission is denied" do before do user.stub(:put).and_return(transfer_permission_denied) end it "should raise TriggerAlreadyInitiated error" do expect { user.activate_transfer(*hash_params) }.to raise_error(CookieJar::Error::TransferPermissionDenied) end end context "when withdraw amount is invalid" do before do user.stub(:put).and_return(invalid_withdraw_amount) end it "should raise TriggerAlreadyInitiated error" do expect { user.activate_transfer(*hash_params) }.to raise_error(CookieJar::Error::InvalidWithdrawAmount) end end end end end