diff options
Diffstat (limited to 'billing')
-rw-r--r-- | billing/app/controllers/billing_base_controller.rb | 2 | ||||
-rw-r--r-- | billing/app/controllers/subscriptions_controller.rb | 5 | ||||
-rw-r--r-- | billing/app/views/subscriptions/show.html.haml | 3 | ||||
-rw-r--r-- | billing/config/routes.rb | 4 | ||||
-rw-r--r-- | billing/test/functional/customer_controller_test.rb | 23 | ||||
-rw-r--r-- | billing/test/functional/payments_controller_test.rb | 5 | ||||
-rw-r--r-- | billing/test/functional/subsciptions_controller_test.rb | 16 | ||||
-rw-r--r-- | billing/test/integration/subscription_test.rb | 50 | ||||
-rw-r--r-- | billing/test/support/customer_test_helper.rb | 11 |
9 files changed, 95 insertions, 24 deletions
diff --git a/billing/app/controllers/billing_base_controller.rb b/billing/app/controllers/billing_base_controller.rb index c250831..0453677 100644 --- a/billing/app/controllers/billing_base_controller.rb +++ b/billing/app/controllers/billing_base_controller.rb @@ -7,7 +7,7 @@ class BillingBaseController < ApplicationController def assign_user if params[:user_id] @user = User.find(params[:user_id]) - elsif params[:action] == "confirm" or params[:action] == "destroy" # confirms and subscription deletes will come back with different ID set, so check for this first + elsif params[:action] == "confirm"# confirms will come back with different ID set, so check for this first # This is only for cases where an admin cannot apply action for customer, but should be all confirms @user = current_user elsif params[:id] diff --git a/billing/app/controllers/subscriptions_controller.rb b/billing/app/controllers/subscriptions_controller.rb index 4047847..7689f35 100644 --- a/billing/app/controllers/subscriptions_controller.rb +++ b/billing/app/controllers/subscriptions_controller.rb @@ -3,7 +3,7 @@ class SubscriptionsController < BillingBaseController before_filter :fetch_subscription, :only => [:show, :destroy] before_filter :confirm_no_active_subscription, :only => [:new, :create] # for now, admins cannot create or destroy subscriptions for others: - before_filter :confirm_self, :only => [:destroy, :new, :create] + before_filter :confirm_self, :only => [:new, :create] def new # don't show link to subscribe if they are already subscribed? @@ -31,7 +31,8 @@ class SubscriptionsController < BillingBaseController def fetch_subscription @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) access_denied unless admin? or (current_user_customer and current_user_customer.braintree_customer_id == @subscription_customer_id) diff --git a/billing/app/views/subscriptions/show.html.haml b/billing/app/views/subscriptions/show.html.haml index ebb7e0d..39f4d1a 100644 --- a/billing/app/views/subscriptions/show.html.haml +++ b/billing/app/views/subscriptions/show.html.haml @@ -3,5 +3,4 @@ Current Subscription = render :partial => "subscription_details", :locals => {:subscription => @subscription} -- if @user == current_user - = link_to t(:cancel_subscription), subscription_path(@subscription.id), :confirm => t(:are_you_sure), :method => :delete, :class => 'btn btn-danger' if @subscription.status == 'Active' # permission check or should that just be on show? += link_to t(:cancel_subscription), user_subscription_path(@user, @subscription.id), :confirm => t(:are_you_sure), :method => :delete, :class => 'btn btn-danger' if @subscription.status == 'Active' # permission check or should that just be on show? diff --git a/billing/config/routes.rb b/billing/config/routes.rb index 8b7b5bf..e024f43 100644 --- a/billing/config/routes.rb +++ b/billing/config/routes.rb @@ -4,7 +4,7 @@ Rails.application.routes.draw do match 'payments/confirm' => 'payments#confirm', :as => :confirm_payment resources :users do resources :payments, :only => [:index] - resources :subscriptions, :only => [:index, :show] + resources :subscriptions, :only => [:index, :show, :destroy] end resources :customer, :only => [:new, :edit] @@ -14,7 +14,7 @@ Rails.application.routes.draw do match 'customer/show/:id' => 'customer#show', :as => :show_customer match 'credit_card_info/confirm' => 'credit_card_info#confirm', :as => :confirm_credit_card_info - resources :subscriptions, :only => [:new, :create, :update, :destroy] # index and show are within users path + resources :subscriptions, :only => [:new, :create, :update] # index, show & destroy are within users path #match 'transactions/:product_id/new' => 'transactions#new', :as => :new_transaction #match 'transactions/confirm/:product_id' => 'transactions#confirm', :as => :confirm_transaction diff --git a/billing/test/functional/customer_controller_test.rb b/billing/test/functional/customer_controller_test.rb index 878ed48..d943e23 100644 --- a/billing/test/functional/customer_controller_test.rb +++ b/billing/test/functional/customer_controller_test.rb @@ -2,6 +2,7 @@ require 'test_helper' require 'fake_braintree' class CustomerControllerTest < ActionController::TestCase + include CustomerTestHelper test "new assigns redirect url" do login @@ -21,9 +22,7 @@ class CustomerControllerTest < ActionController::TestCase end test "edit uses params[:id]" do - user = find_record :user - customer = stub_record :customer_with_payment_info, user: user - Customer.stubs(:find_by_user_id).with(user.id).returns(customer) + customer = stub_customer login customer.user get :edit, id: customer.user.id @@ -34,7 +33,7 @@ class CustomerControllerTest < ActionController::TestCase assert_equal confirm_customer_url, tr_data[:redirect_url] end - test "confirm user creation" do + test "confirm customer creation" do login Braintree::TransparentRedirect.expects(:confirm).returns(success_response) # to_confirm = prepare_confirmation :create_customer_data, @@ -52,10 +51,8 @@ class CustomerControllerTest < ActionController::TestCase end test "customer update" do - user = find_record :user - customer = stub_record :customer_with_payment_info, user: user + customer = stub_customer customer.expects(:save) - Customer.stubs(:find_by_user_id).with(user.id).returns(customer) login customer.user Braintree::TransparentRedirect.expects(:confirm). returns(success_response(customer)) @@ -70,8 +67,8 @@ class CustomerControllerTest < ActionController::TestCase assert_equal customer.braintree_customer, result.customer end - test "failed user creation" do - skip "can't get user creation to fail" + test "failed customer creation" do + skip "can't get customer creation to fail" login FakeBraintree.decline_all_cards! # what is prepare_confirmation ?? this method isn't found @@ -86,7 +83,7 @@ class CustomerControllerTest < ActionController::TestCase assert !result.success? end - test "failed user creation with stubbing" do + test "failed customer creation with stubbing" do login Braintree::TransparentRedirect.expects(:confirm).returns(failure_response) post :confirm, bla: :blub @@ -95,10 +92,8 @@ class CustomerControllerTest < ActionController::TestCase assert_template :new end - test "failed user update with stubbing" do - user = find_record :user - customer = stub_record :customer_with_payment_info, user: user - Customer.stubs(:find_by_user_id).with(user.id).returns(customer) + test "failed customer update with stubbing" do + customer = stub_customer login customer.user Braintree::TransparentRedirect.expects(:confirm).returns(failure_response) post :confirm, bla: :blub diff --git a/billing/test/functional/payments_controller_test.rb b/billing/test/functional/payments_controller_test.rb index 055a990..655aa16 100644 --- a/billing/test/functional/payments_controller_test.rb +++ b/billing/test/functional/payments_controller_test.rb @@ -2,6 +2,7 @@ require 'test_helper' require 'fake_braintree' class PaymentsControllerTest < ActionController::TestCase + include CustomerTestHelper test "payment when unauthorized" do get :new @@ -17,9 +18,7 @@ class PaymentsControllerTest < ActionController::TestCase end test "payment when authenticated as customer" do - user = find_record :user - customer = stub_record :customer_with_payment_info, user: user - Customer.stubs(:find_by_user_id).with(user.id).returns(customer) + customer = stub_customer login customer.user get :new assert_not_nil assigns(:tr_data) diff --git a/billing/test/functional/subsciptions_controller_test.rb b/billing/test/functional/subsciptions_controller_test.rb new file mode 100644 index 0000000..a6a1057 --- /dev/null +++ b/billing/test/functional/subsciptions_controller_test.rb @@ -0,0 +1,16 @@ +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 diff --git a/billing/test/integration/subscription_test.rb b/billing/test/integration/subscription_test.rb new file mode 100644 index 0000000..b893896 --- /dev/null +++ b/billing/test/integration/subscription_test.rb @@ -0,0 +1,50 @@ +require 'test_helper' +require 'fake_braintree' +require 'capybara/rails' + +class SubscriptionTest < ActionDispatch::IntegrationTest + include Warden::Test::Helpers + include Capybara::DSL + include CustomerTestHelper + include StubRecordHelper + + setup do + Warden.test_mode! + @admin = stub_record :user, :admin => true + @customer = stub_customer + @braintree_customer = @customer.braintree_customer + response = Braintree::Subscription.create plan_id: '5', + payment_method_token: @braintree_customer.credit_cards.first.token + @subscription = response.subscription + Capybara.current_driver = Capybara.javascript_driver + end + + teardown do + Warden.test_reset! + end + + test "admin can see subscription for another" do + login_as @admin + @customer.stubs(:subscriptions).returns([@subscription]) + 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 + + #test "admin cannot add subscription for another" do + #end + + #test "authenticated user can cancel own subscription" do + #end + + #test "user cannot add subscription if they have active one" do + #end + + #test "user can view own subscriptions" + #end + + #test "admin can view another user's subscriptions" do + #end + +end diff --git a/billing/test/support/customer_test_helper.rb b/billing/test/support/customer_test_helper.rb new file mode 100644 index 0000000..adac00a --- /dev/null +++ b/billing/test/support/customer_test_helper.rb @@ -0,0 +1,11 @@ +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 |