diff options
Diffstat (limited to 'billing/test/functional/payments_controller_test.rb')
-rw-r--r-- | billing/test/functional/payments_controller_test.rb | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/billing/test/functional/payments_controller_test.rb b/billing/test/functional/payments_controller_test.rb new file mode 100644 index 0000000..8f3bfe7 --- /dev/null +++ b/billing/test/functional/payments_controller_test.rb @@ -0,0 +1,64 @@ +require 'test_helper' +require 'fake_braintree' + +class PaymentsControllerTest < ActionController::TestCase + + test "payment when unauthorized" do + get :new + assert_not_nil assigns(:tr_data) + assert_response :success + end + + test "authenticated user must create account before making payment" do + login + get :new + assert_response :redirect + assert_equal new_customer_url, response.header['Location'] + end + + test "payment when authenticated as customer" do + customer = FactoryGirl.create :customer_with_payment_info + login customer.user + get :new + assert_not_nil assigns(:tr_data) + assert_response :success + end + + test "successful confirmation renders confirm" do + Braintree::TransparentRedirect.expects(:confirm).returns(success_response) + get :confirm + + assert_response :success + assert_template :confirm + end + + test "failed confirmation renders new" do + Braintree::TransparentRedirect.expects(:confirm).returns(failure_response) + get :confirm + + assert_response :success + assert_not_nil assigns(:tr_data) + assert_template :new + end + + def failure_response + stub success?: false, + errors: stub(for: nil, size: 0), + params: {}, + transaction: stub(status: nil) + end + + def success_response + stub success?: true, + transaction: stub_transaction + end + + # that's what you get when not following the law of demeter... + def stub_transaction + stub amount: "100.00", + id: "ASDF", + customer_details: FactoryGirl.build(:braintree_customer), + credit_card_details: FactoryGirl.build(:braintree_customer).credit_cards.first + end + +end |