diff --git a/billing/app/controllers/subscriptions_controller.rb b/billing/app/controllers/subscriptions_controller.rb
index 4b1851a761a0227e539c7d9ea0974e0d81ee7550..7689f358967c75f351e0f37ffe3a5cfe0f8ca692 100644
--- a/billing/app/controllers/subscriptions_controller.rb
+++ b/billing/app/controllers/subscriptions_controller.rb
@@ -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/test/functional/customer_controller_test.rb b/billing/test/functional/customer_controller_test.rb
index 878ed48650889e951c108d77326121f4636b26a1..d943e23d4a1a084ffb57df1ea8a8a3858a03f030 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 055a990ba25830b78aad2fddf25d5226ed2c14a9..655aa16a61b1a7322f1c152a800ebe81b1697206 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 0000000000000000000000000000000000000000..a6a1057c3458dd6c9fe4d60efca781eaf56370b6
--- /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
index 74101188628105863c77a46dc390caa4cf34496c..b89389634bd1a8e4781487654177ffa9bbc25163 100644
--- a/billing/test/integration/subscription_test.rb
+++ b/billing/test/integration/subscription_test.rb
@@ -5,29 +5,31 @@ require 'capybara/rails'
 class SubscriptionTest < ActionDispatch::IntegrationTest
   include Warden::Test::Helpers
   include Capybara::DSL
+  include CustomerTestHelper
+  include StubRecordHelper
 
   setup do
     Warden.test_mode!
-    @admin = User.find_by_login('admin') || FactoryGirl.create(:user, login: 'admin')
-    @customer = FactoryGirl.create(:customer)
-    @braintree_customer = FactoryGirl.create(:braintree_customer)
-    @customer.braintree_customer_id = @braintree_customer.id
-    @customer.save
-    @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})
-    # unfortunately @braintree_customer.credit_cards.first.subscriptions still returns empty array
+    @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!
-    @admin.destroy
-    @customer.destroy
   end
 
-  test "admin can cancel subscription for another" do
-    skip "not sure about testing admin cancelling subscription with fake_braintree"
+  test "admin can see subscription for another" do
     login_as @admin
-    #visit user_subscriptions_path(@customer.user_id)
-    #delete :destroy, :id => @subscription.id
+    @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
diff --git a/billing/test/support/customer_test_helper.rb b/billing/test/support/customer_test_helper.rb
new file mode 100644
index 0000000000000000000000000000000000000000..adac00a781d5ba09615c957729623d542f13d4c3
--- /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