Skip to content
Snippets Groups Projects
Commit 890c9e17 authored by jessib's avatar jessib
Browse files

Merge pull request #84 from azul/test/billing-sessions

Test/billing subscriptions
parents 16b8966a 7398048b
Branches
Tags 0.2.3
No related merge requests found
...@@ -31,7 +31,8 @@ class SubscriptionsController < BillingBaseController ...@@ -31,7 +31,8 @@ class SubscriptionsController < BillingBaseController
def fetch_subscription def fetch_subscription
@subscription = Braintree::Subscription.find params[:id] @subscription = Braintree::Subscription.find params[:id]
@subscription_customer_id = @subscription.transactions.first.customer_details.id #all of subscriptions transactions should have same customer @credit_card = Braintree::CreditCard.find @subscription.payment_method_token
@subscription_customer_id = @credit_card.customer_id
current_user_customer = Customer.find_by_user_id(current_user.id) current_user_customer = Customer.find_by_user_id(current_user.id)
access_denied unless admin? or (current_user_customer and current_user_customer.braintree_customer_id == @subscription_customer_id) access_denied unless admin? or (current_user_customer and current_user_customer.braintree_customer_id == @subscription_customer_id)
......
...@@ -2,6 +2,7 @@ require 'test_helper' ...@@ -2,6 +2,7 @@ require 'test_helper'
require 'fake_braintree' require 'fake_braintree'
class CustomerControllerTest < ActionController::TestCase class CustomerControllerTest < ActionController::TestCase
include CustomerTestHelper
test "new assigns redirect url" do test "new assigns redirect url" do
login login
...@@ -21,9 +22,7 @@ class CustomerControllerTest < ActionController::TestCase ...@@ -21,9 +22,7 @@ class CustomerControllerTest < ActionController::TestCase
end end
test "edit uses params[:id]" do test "edit uses params[:id]" do
user = find_record :user customer = stub_customer
customer = stub_record :customer_with_payment_info, user: user
Customer.stubs(:find_by_user_id).with(user.id).returns(customer)
login customer.user login customer.user
get :edit, id: customer.user.id get :edit, id: customer.user.id
...@@ -34,7 +33,7 @@ class CustomerControllerTest < ActionController::TestCase ...@@ -34,7 +33,7 @@ class CustomerControllerTest < ActionController::TestCase
assert_equal confirm_customer_url, tr_data[:redirect_url] assert_equal confirm_customer_url, tr_data[:redirect_url]
end end
test "confirm user creation" do test "confirm customer creation" do
login login
Braintree::TransparentRedirect.expects(:confirm).returns(success_response) Braintree::TransparentRedirect.expects(:confirm).returns(success_response)
# to_confirm = prepare_confirmation :create_customer_data, # to_confirm = prepare_confirmation :create_customer_data,
...@@ -52,10 +51,8 @@ class CustomerControllerTest < ActionController::TestCase ...@@ -52,10 +51,8 @@ class CustomerControllerTest < ActionController::TestCase
end end
test "customer update" do test "customer update" do
user = find_record :user customer = stub_customer
customer = stub_record :customer_with_payment_info, user: user
customer.expects(:save) customer.expects(:save)
Customer.stubs(:find_by_user_id).with(user.id).returns(customer)
login customer.user login customer.user
Braintree::TransparentRedirect.expects(:confirm). Braintree::TransparentRedirect.expects(:confirm).
returns(success_response(customer)) returns(success_response(customer))
...@@ -70,8 +67,8 @@ class CustomerControllerTest < ActionController::TestCase ...@@ -70,8 +67,8 @@ class CustomerControllerTest < ActionController::TestCase
assert_equal customer.braintree_customer, result.customer assert_equal customer.braintree_customer, result.customer
end end
test "failed user creation" do test "failed customer creation" do
skip "can't get user creation to fail" skip "can't get customer creation to fail"
login login
FakeBraintree.decline_all_cards! FakeBraintree.decline_all_cards!
# what is prepare_confirmation ?? this method isn't found # what is prepare_confirmation ?? this method isn't found
...@@ -86,7 +83,7 @@ class CustomerControllerTest < ActionController::TestCase ...@@ -86,7 +83,7 @@ class CustomerControllerTest < ActionController::TestCase
assert !result.success? assert !result.success?
end end
test "failed user creation with stubbing" do test "failed customer creation with stubbing" do
login login
Braintree::TransparentRedirect.expects(:confirm).returns(failure_response) Braintree::TransparentRedirect.expects(:confirm).returns(failure_response)
post :confirm, bla: :blub post :confirm, bla: :blub
...@@ -95,10 +92,8 @@ class CustomerControllerTest < ActionController::TestCase ...@@ -95,10 +92,8 @@ class CustomerControllerTest < ActionController::TestCase
assert_template :new assert_template :new
end end
test "failed user update with stubbing" do test "failed customer update with stubbing" do
user = find_record :user customer = stub_customer
customer = stub_record :customer_with_payment_info, user: user
Customer.stubs(:find_by_user_id).with(user.id).returns(customer)
login customer.user login customer.user
Braintree::TransparentRedirect.expects(:confirm).returns(failure_response) Braintree::TransparentRedirect.expects(:confirm).returns(failure_response)
post :confirm, bla: :blub post :confirm, bla: :blub
......
...@@ -2,6 +2,7 @@ require 'test_helper' ...@@ -2,6 +2,7 @@ require 'test_helper'
require 'fake_braintree' require 'fake_braintree'
class PaymentsControllerTest < ActionController::TestCase class PaymentsControllerTest < ActionController::TestCase
include CustomerTestHelper
test "payment when unauthorized" do test "payment when unauthorized" do
get :new get :new
...@@ -17,9 +18,7 @@ class PaymentsControllerTest < ActionController::TestCase ...@@ -17,9 +18,7 @@ class PaymentsControllerTest < ActionController::TestCase
end end
test "payment when authenticated as customer" do test "payment when authenticated as customer" do
user = find_record :user customer = stub_customer
customer = stub_record :customer_with_payment_info, user: user
Customer.stubs(:find_by_user_id).with(user.id).returns(customer)
login customer.user login customer.user
get :new get :new
assert_not_nil assigns(:tr_data) assert_not_nil assigns(:tr_data)
......
require 'test_helper'
require 'fake_braintree'
class SubscriptionsControllerTest < ActionController::TestCase
include CustomerTestHelper
test "destroy cancels subscription" do
customer = stub_customer
login customer.user
result = Braintree::Subscription.create plan_id: 'my_plan',
payment_method_token: customer.braintree_customer.credit_cards.first.token
subscription = result.subscription
delete :destroy, id: subscription.id, user_id: customer.user.id
assert_equal "Canceled", Braintree::Subscription.find(subscription.id).status
end
end
...@@ -5,29 +5,31 @@ require 'capybara/rails' ...@@ -5,29 +5,31 @@ require 'capybara/rails'
class SubscriptionTest < ActionDispatch::IntegrationTest class SubscriptionTest < ActionDispatch::IntegrationTest
include Warden::Test::Helpers include Warden::Test::Helpers
include Capybara::DSL include Capybara::DSL
include CustomerTestHelper
include StubRecordHelper
setup do setup do
Warden.test_mode! Warden.test_mode!
@admin = User.find_by_login('admin') || FactoryGirl.create(:user, login: 'admin') @admin = stub_record :user, :admin => true
@customer = FactoryGirl.create(:customer) @customer = stub_customer
@braintree_customer = FactoryGirl.create(:braintree_customer) @braintree_customer = @customer.braintree_customer
@customer.braintree_customer_id = @braintree_customer.id response = Braintree::Subscription.create plan_id: '5',
@customer.save payment_method_token: @braintree_customer.credit_cards.first.token
@subscription = FakeBraintree::Subscription.new({:payment_method_token => @braintree_customer.credit_cards.first, :plan_id => '5'}, {:id => @braintree_customer.id, :merchant_id => Braintree::Configuration.merchant_id}) @subscription = response.subscription
# unfortunately @braintree_customer.credit_cards.first.subscriptions still returns empty array Capybara.current_driver = Capybara.javascript_driver
end end
teardown do teardown do
Warden.test_reset! Warden.test_reset!
@admin.destroy
@customer.destroy
end end
test "admin can cancel subscription for another" do test "admin can see subscription for another" do
skip "not sure about testing admin cancelling subscription with fake_braintree"
login_as @admin login_as @admin
#visit user_subscriptions_path(@customer.user_id) @customer.stubs(:subscriptions).returns([@subscription])
#delete :destroy, :id => @subscription.id visit user_subscriptions_path(@customer.user_id)
assert page.has_content?("Subscriptions")
assert page.has_content?("Status: Active")
page.save_screenshot('/tmp/subscriptions.png')
end end
#test "admin cannot add subscription for another" do #test "admin cannot add subscription for another" do
......
module CustomerTestHelper
def stub_customer(user = nil)
user ||= find_record :user
customer = stub_record :customer_with_payment_info,
user: user,
user_id: user.id
Customer.stubs(:find_by_user_id).with(user.id).returns(customer)
return customer
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment