From 53808b073f539ba2b442738b6abf97228488e311 Mon Sep 17 00:00:00 2001 From: Azul Date: Tue, 8 Apr 2014 09:12:37 +0200 Subject: moving all of core into toplevel, tests fail. --- billing/leap_web_billing.gemspec | 1 - billing/lib/leap_web_billing/engine.rb | 3 --- 2 files changed, 4 deletions(-) (limited to 'billing') diff --git a/billing/leap_web_billing.gemspec b/billing/leap_web_billing.gemspec index 94d92e0..cb0335e 100644 --- a/billing/leap_web_billing.gemspec +++ b/billing/leap_web_billing.gemspec @@ -15,7 +15,6 @@ Gem::Specification.new do |s| s.files = Dir["{app,config,db,lib}/**/*"] + ["Rakefile", "README.md"] s.test_files = Dir["test/**/*"] - s.add_dependency "leap_web_core", LeapWeb::VERSION # s.add_dependency "braintree-rails", "~> 0.4.5" s.add_dependency "braintree" #s.add_dependency "carmen-rails" diff --git a/billing/lib/leap_web_billing/engine.rb b/billing/lib/leap_web_billing/engine.rb index 6d76add..ab574f2 100644 --- a/billing/lib/leap_web_billing/engine.rb +++ b/billing/lib/leap_web_billing/engine.rb @@ -1,7 +1,4 @@ # thou shall require all your dependencies in an engine. -require "leap_web_core" -require "leap_web_core/ui_dependencies" - #require "braintree-rails" require "braintree" #require "carmen-rails" -- cgit v1.2.3 From 361cdbbacc57b17c198489238282e786cc827efa Mon Sep 17 00:00:00 2001 From: Azul Date: Fri, 11 Apr 2014 09:31:16 +0200 Subject: make sure billing tests do not interfere with others they are still broken though. --- billing/config/initializers/braintree.rb | 8 -------- billing/test/integration/admin_customer_test.rb | 7 +------ billing/test/integration/customer_creation_test.rb | 7 +------ billing/test/integration/subscription_test.rb | 6 +----- billing/test/support/braintree_integration_test.rb | 18 ++++++++++++++++++ 5 files changed, 21 insertions(+), 25 deletions(-) create mode 100644 billing/test/support/braintree_integration_test.rb (limited to 'billing') diff --git a/billing/config/initializers/braintree.rb b/billing/config/initializers/braintree.rb index c0c89e2..3d87f4c 100644 --- a/billing/config/initializers/braintree.rb +++ b/billing/config/initializers/braintree.rb @@ -8,14 +8,6 @@ else Braintree::Configuration.logger = Logger.new('log/braintree.log') end -# -# we use fake braintree in tests -# -if Rails.env.test? - require 'braintree_test_app' - Rails.application.config.middleware.use BraintreeTestApp -end - # # You can set these per environment in config/config.yml: # diff --git a/billing/test/integration/admin_customer_test.rb b/billing/test/integration/admin_customer_test.rb index 1b9953f..df92a0d 100644 --- a/billing/test/integration/admin_customer_test.rb +++ b/billing/test/integration/admin_customer_test.rb @@ -1,19 +1,14 @@ require 'test_helper' require 'fake_braintree' -require 'capybara/rails' -class AdminCustomerTest < ActionDispatch::IntegrationTest - include Warden::Test::Helpers - include Capybara::DSL +class AdminCustomerTest < BraintreeIntegrationTest setup do - Warden.test_mode! @admin = User.find_by_login('admin') || FactoryGirl.create(:user, login: 'admin') @user = FactoryGirl.create(:user) end teardown do - Warden.test_reset! @user.destroy if @user @admin.destroy if @admin end diff --git a/billing/test/integration/customer_creation_test.rb b/billing/test/integration/customer_creation_test.rb index aabd9b6..90319a9 100644 --- a/billing/test/integration/customer_creation_test.rb +++ b/billing/test/integration/customer_creation_test.rb @@ -1,20 +1,15 @@ require 'test_helper' require 'fake_braintree' -require 'capybara/rails' -class CustomerCreationTest < ActionDispatch::IntegrationTest - include Warden::Test::Helpers - include Capybara::DSL +class CustomerCreationTest < BraintreeIntegrationTest setup do - Warden.test_mode! @user = FactoryGirl.create(:user) login_as @user end teardown do @user.destroy - Warden.test_reset! end # Let's test both steps together with capybara diff --git a/billing/test/integration/subscription_test.rb b/billing/test/integration/subscription_test.rb index 1473eb0..cd010bd 100644 --- a/billing/test/integration/subscription_test.rb +++ b/billing/test/integration/subscription_test.rb @@ -1,14 +1,11 @@ require 'test_helper' require 'fake_braintree' -require 'capybara/rails' -class SubscriptionTest < BrowserIntegrationTest - include Warden::Test::Helpers +class SubscriptionTest < BraintreeIntegrationTest include CustomerTestHelper include StubRecordHelper setup do - Warden.test_mode! @admin = User.find_by_login('admin') || FactoryGirl.create(:user, login: 'admin') @customer = stub_customer @braintree_customer = @customer.braintree_customer @@ -19,7 +16,6 @@ class SubscriptionTest < BrowserIntegrationTest end teardown do - Warden.test_reset! @admin.destroy end diff --git a/billing/test/support/braintree_integration_test.rb b/billing/test/support/braintree_integration_test.rb new file mode 100644 index 0000000..976c5a2 --- /dev/null +++ b/billing/test/support/braintree_integration_test.rb @@ -0,0 +1,18 @@ +require 'capybara/rails' +# require 'fake_braintree' - messes up other integration tests +require 'braintree_test_app' + +class BraintreeIntegrationTest < BrowserIntegrationTest + include Warden::Test::Helpers + + setup do + Warden.test_mode! + Rails.application.config.middleware.use BraintreeTestApp + end + + teardown do + Warden.test_reset! + Rails.application.config.middleware.delete "BraintreeTestApp" + end + +end -- cgit v1.2.3 From 32136605ddd405a0bf47f3b795b22fd4b49465b5 Mon Sep 17 00:00:00 2001 From: Azul Date: Fri, 11 Apr 2014 09:38:50 +0200 Subject: moving broken billing integration tests out of the way They are currently using fake_braintree. I think this is not a good approach for integration tests. It's a fake - we should test against braintrees test api. However that requires getting an api key that we want to keep outside the repository. So these test can only run on travis if we manage to setup secret values in .travis.yml - which has been failing so far. So for now i moved the broken billing integration tests to billing/test/broken to move on. --- billing/test/broken/admin_customer_test.rb | 31 ++++++++ billing/test/broken/customer_creation_test.rb | 84 ++++++++++++++++++++++ billing/test/broken/subscription_test.rb | 49 +++++++++++++ billing/test/integration/admin_customer_test.rb | 31 -------- billing/test/integration/customer_creation_test.rb | 84 ---------------------- billing/test/integration/subscription_test.rb | 49 ------------- 6 files changed, 164 insertions(+), 164 deletions(-) create mode 100644 billing/test/broken/admin_customer_test.rb create mode 100644 billing/test/broken/customer_creation_test.rb create mode 100644 billing/test/broken/subscription_test.rb delete mode 100644 billing/test/integration/admin_customer_test.rb delete mode 100644 billing/test/integration/customer_creation_test.rb delete mode 100644 billing/test/integration/subscription_test.rb (limited to 'billing') diff --git a/billing/test/broken/admin_customer_test.rb b/billing/test/broken/admin_customer_test.rb new file mode 100644 index 0000000..df92a0d --- /dev/null +++ b/billing/test/broken/admin_customer_test.rb @@ -0,0 +1,31 @@ +require 'test_helper' +require 'fake_braintree' + +class AdminCustomerTest < BraintreeIntegrationTest + + setup do + @admin = User.find_by_login('admin') || FactoryGirl.create(:user, login: 'admin') + @user = FactoryGirl.create(:user) + end + + teardown do + @user.destroy if @user + @admin.destroy if @admin + end + + test "check non customer as admin" do + login_as @admin + visit '/' + click_link 'Users' + click_link @user.login + click_link 'Billing Settings' + assert page.has_content? @user.email_address + assert page.has_content? 'No Saved Customer' + end + + test "check customer as admin" do + skip "cannot check customer as admin" + # it would be good to have a test where an admin tries to view the 'Billing Settings' for another user. + # However, partially due to limitations of FakeBraintree, this doesn't seem pursuing at this time. + end +end diff --git a/billing/test/broken/customer_creation_test.rb b/billing/test/broken/customer_creation_test.rb new file mode 100644 index 0000000..90319a9 --- /dev/null +++ b/billing/test/broken/customer_creation_test.rb @@ -0,0 +1,84 @@ +require 'test_helper' +require 'fake_braintree' + +class CustomerCreationTest < BraintreeIntegrationTest + + setup do + @user = FactoryGirl.create(:user) + login_as @user + end + + teardown do + @user.destroy + end + + # Let's test both steps together with capybara + # + # This test is nice and clean but also a bit fragile: + # RackTest assumes all requests to be local. So we need + # BraintreeTestApp for the braintree transparent redirect to work. + # + # this mystifies me why this works. when i type the click_button line (and the + # customer.braintree_customer line) in the debugger, it gives a timeout, + # but it works fine embedded in the test. + test "create customer with braintree" do + visit '/' + click_link 'Billing Settings' + # i am a bit unclear why this works, as it seems there will be validation errors + assert_difference("Customer.count") do + click_button 'Save Payment Info' # this gives me a timeout + end + assert customer = Customer.find_by_user_id(@user.id) + assert customer.braintree_customer + end + + # We only test the confirmation here. + # The request to Braintree is triggered outside of rails + # In skippped test below, we see this works even if the attributes are + # for a broken customer + test "successfully confirms customer creation" do + response = post_transparent_redirect :create_customer_data, + customer: FactoryGirl.attributes_for(:braintree_customer), + redirect_url: confirm_customer_url + + assert_difference("Customer.count") do + post response['Location'] + end + + assert_equal 200, status + assert customer = Customer.find_by_user_id(@user.id) + assert customer.braintree_customer + end + + + test "failed customer creation" do + skip "cannot get customer creation to fail" + + FakeBraintree.decline_all_cards! + + response = post_transparent_redirect :create_customer_data, + customer: FactoryGirl.attributes_for(:broken_customer), + redirect_url: confirm_customer_url + + assert FakeBraintree.decline_all_cards? + assert_no_difference("Customer.count") do + post response['Location'] #this gives me a timeout when run alone + end + assert_nil Customer.find_by_user_id(@user.id) + + end + + def post_transparent_redirect(type, data) + params = data.dup + params[:tr_data] = Braintree::TransparentRedirect.send(type, params) + post_transparent_redirect_params(params) + end + + def post_transparent_redirect_params(params) + uri = URI.parse(Braintree::TransparentRedirect.url) + Net::HTTP.start(uri.host, uri.port) do |http| + http.post(uri.path, Rack::Utils.build_nested_query(params)) + end + end + +end diff --git a/billing/test/broken/subscription_test.rb b/billing/test/broken/subscription_test.rb new file mode 100644 index 0000000..cd010bd --- /dev/null +++ b/billing/test/broken/subscription_test.rb @@ -0,0 +1,49 @@ +require 'test_helper' +require 'fake_braintree' + +class SubscriptionTest < BraintreeIntegrationTest + include CustomerTestHelper + include StubRecordHelper + + setup do + @admin = User.find_by_login('admin') || FactoryGirl.create(:user, login: 'admin') + @customer = stub_customer + @braintree_customer = @customer.braintree_customer + response = Braintree::Subscription.create plan_id: '5', + payment_method_token: @braintree_customer.credit_cards.first.token, + price: '10' + @subscription = response.subscription + end + + teardown do + @admin.destroy + end + + test "admin can see all subscriptions for another" do + login_as @admin + @customer.stubs(:subscriptions).returns([@subscription]) + @subscription.stubs(:balance).returns 0 + visit user_subscriptions_path(@customer.user_id, :locale => nil) + assert page.has_content?("Subscriptions") + assert page.has_content?("Status: Active") + end + + # test "user cannot see all subscriptions for other user" do + #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/integration/admin_customer_test.rb b/billing/test/integration/admin_customer_test.rb deleted file mode 100644 index df92a0d..0000000 --- a/billing/test/integration/admin_customer_test.rb +++ /dev/null @@ -1,31 +0,0 @@ -require 'test_helper' -require 'fake_braintree' - -class AdminCustomerTest < BraintreeIntegrationTest - - setup do - @admin = User.find_by_login('admin') || FactoryGirl.create(:user, login: 'admin') - @user = FactoryGirl.create(:user) - end - - teardown do - @user.destroy if @user - @admin.destroy if @admin - end - - test "check non customer as admin" do - login_as @admin - visit '/' - click_link 'Users' - click_link @user.login - click_link 'Billing Settings' - assert page.has_content? @user.email_address - assert page.has_content? 'No Saved Customer' - end - - test "check customer as admin" do - skip "cannot check customer as admin" - # it would be good to have a test where an admin tries to view the 'Billing Settings' for another user. - # However, partially due to limitations of FakeBraintree, this doesn't seem pursuing at this time. - end -end diff --git a/billing/test/integration/customer_creation_test.rb b/billing/test/integration/customer_creation_test.rb deleted file mode 100644 index 90319a9..0000000 --- a/billing/test/integration/customer_creation_test.rb +++ /dev/null @@ -1,84 +0,0 @@ -require 'test_helper' -require 'fake_braintree' - -class CustomerCreationTest < BraintreeIntegrationTest - - setup do - @user = FactoryGirl.create(:user) - login_as @user - end - - teardown do - @user.destroy - end - - # Let's test both steps together with capybara - # - # This test is nice and clean but also a bit fragile: - # RackTest assumes all requests to be local. So we need - # BraintreeTestApp for the braintree transparent redirect to work. - # - # this mystifies me why this works. when i type the click_button line (and the - # customer.braintree_customer line) in the debugger, it gives a timeout, - # but it works fine embedded in the test. - test "create customer with braintree" do - visit '/' - click_link 'Billing Settings' - # i am a bit unclear why this works, as it seems there will be validation errors - assert_difference("Customer.count") do - click_button 'Save Payment Info' # this gives me a timeout - end - assert customer = Customer.find_by_user_id(@user.id) - assert customer.braintree_customer - end - - # We only test the confirmation here. - # The request to Braintree is triggered outside of rails - # In skippped test below, we see this works even if the attributes are - # for a broken customer - test "successfully confirms customer creation" do - response = post_transparent_redirect :create_customer_data, - customer: FactoryGirl.attributes_for(:braintree_customer), - redirect_url: confirm_customer_url - - assert_difference("Customer.count") do - post response['Location'] - end - - assert_equal 200, status - assert customer = Customer.find_by_user_id(@user.id) - assert customer.braintree_customer - end - - - test "failed customer creation" do - skip "cannot get customer creation to fail" - - FakeBraintree.decline_all_cards! - - response = post_transparent_redirect :create_customer_data, - customer: FactoryGirl.attributes_for(:broken_customer), - redirect_url: confirm_customer_url - - assert FakeBraintree.decline_all_cards? - assert_no_difference("Customer.count") do - post response['Location'] #this gives me a timeout when run alone - end - assert_nil Customer.find_by_user_id(@user.id) - - end - - def post_transparent_redirect(type, data) - params = data.dup - params[:tr_data] = Braintree::TransparentRedirect.send(type, params) - post_transparent_redirect_params(params) - end - - def post_transparent_redirect_params(params) - uri = URI.parse(Braintree::TransparentRedirect.url) - Net::HTTP.start(uri.host, uri.port) do |http| - http.post(uri.path, Rack::Utils.build_nested_query(params)) - end - end - -end diff --git a/billing/test/integration/subscription_test.rb b/billing/test/integration/subscription_test.rb deleted file mode 100644 index cd010bd..0000000 --- a/billing/test/integration/subscription_test.rb +++ /dev/null @@ -1,49 +0,0 @@ -require 'test_helper' -require 'fake_braintree' - -class SubscriptionTest < BraintreeIntegrationTest - include CustomerTestHelper - include StubRecordHelper - - setup do - @admin = User.find_by_login('admin') || FactoryGirl.create(:user, login: 'admin') - @customer = stub_customer - @braintree_customer = @customer.braintree_customer - response = Braintree::Subscription.create plan_id: '5', - payment_method_token: @braintree_customer.credit_cards.first.token, - price: '10' - @subscription = response.subscription - end - - teardown do - @admin.destroy - end - - test "admin can see all subscriptions for another" do - login_as @admin - @customer.stubs(:subscriptions).returns([@subscription]) - @subscription.stubs(:balance).returns 0 - visit user_subscriptions_path(@customer.user_id, :locale => nil) - assert page.has_content?("Subscriptions") - assert page.has_content?("Status: Active") - end - - # test "user cannot see all subscriptions for other user" do - #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 -- cgit v1.2.3 From 636692f9921bd695d726695d2d46c91f5a6e56f3 Mon Sep 17 00:00:00 2001 From: Azul Date: Fri, 11 Apr 2014 10:03:19 +0200 Subject: move engines into engines directory Also renamed help to support so it's harder to confuse it with documentation --- billing/Gemfile | 23 ---- billing/README.md | 49 -------- billing/Rakefile | 40 ------- .../app/controllers/billing_admin_controller.rb | 29 ----- billing/app/controllers/billing_base_controller.rb | 22 ---- .../app/controllers/credit_card_info_controller.rb | 35 ------ billing/app/controllers/customer_controller.rb | 64 ----------- billing/app/controllers/payments_controller.rb | 34 ------ .../app/controllers/subscriptions_controller.rb | 63 ----------- billing/app/helpers/billing_helper.rb | 51 --------- billing/app/helpers/braintree_form_helper.rb | 64 ----------- billing/app/helpers/braintree_helper.rb | 5 - billing/app/models/customer.rb | 58 ---------- billing/app/views/billing_admin/show.html.haml | 7 -- .../app/views/credit_card_info/confirm.html.haml | 5 - billing/app/views/credit_card_info/edit.html.haml | 17 --- .../app/views/customer/_customer_data.html.haml | 16 --- billing/app/views/customer/_transaction.html.haml | 0 billing/app/views/customer/confirm.html.haml | 14 --- billing/app/views/customer/edit.html.haml | 23 ---- billing/app/views/customer/new.html.haml | 24 ---- billing/app/views/customer/show.html.haml | 27 ----- .../views/payments/_non_customer_fields.html.haml | 16 --- .../views/payments/_transaction_details.html.haml | 15 --- billing/app/views/payments/confirm.html.haml | 26 ----- billing/app/views/payments/index.html.haml | 5 - billing/app/views/payments/new.html.haml | 17 --- .../subscriptions/_subscription_details.html.haml | 26 ----- billing/app/views/subscriptions/create.html.haml | 9 -- billing/app/views/subscriptions/destroy.html.haml | 7 -- billing/app/views/subscriptions/index.html.haml | 8 -- billing/app/views/subscriptions/new.html.haml | 15 --- billing/app/views/subscriptions/show.html.haml | 6 - billing/config/initializers/braintree.rb | 23 ---- billing/config/locales/en.yml | 11 -- billing/config/routes.rb | 25 ----- billing/leap_web_billing.gemspec | 21 ---- billing/lib/braintree_test_app.rb | 36 ------ billing/lib/leap_web_billing.rb | 4 - billing/lib/leap_web_billing/engine.rb | 10 -- billing/script/rails | 8 -- billing/test/broken/admin_customer_test.rb | 31 ------ billing/test/broken/customer_creation_test.rb | 84 -------------- billing/test/broken/subscription_test.rb | 49 -------- billing/test/factories.rb | 25 ----- .../test/functional/customer_controller_test.rb | 124 --------------------- .../test/functional/customers_controller_test.rb | 61 ---------- .../test/functional/payments_controller_test.rb | 50 --------- .../functional/subscriptions_controller_test.rb | 16 --- billing/test/support/braintree_integration_test.rb | 18 --- billing/test/support/customer_test_helper.rb | 11 -- billing/test/test_helper.rb | 15 --- billing/test/unit/customer_test.rb | 38 ------- .../test/unit/customer_with_payment_info_test.rb | 40 ------- 54 files changed, 1520 deletions(-) delete mode 100644 billing/Gemfile delete mode 100644 billing/README.md delete mode 100644 billing/Rakefile delete mode 100644 billing/app/controllers/billing_admin_controller.rb delete mode 100644 billing/app/controllers/billing_base_controller.rb delete mode 100644 billing/app/controllers/credit_card_info_controller.rb delete mode 100644 billing/app/controllers/customer_controller.rb delete mode 100644 billing/app/controllers/payments_controller.rb delete mode 100644 billing/app/controllers/subscriptions_controller.rb delete mode 100644 billing/app/helpers/billing_helper.rb delete mode 100644 billing/app/helpers/braintree_form_helper.rb delete mode 100644 billing/app/helpers/braintree_helper.rb delete mode 100644 billing/app/models/customer.rb delete mode 100644 billing/app/views/billing_admin/show.html.haml delete mode 100644 billing/app/views/credit_card_info/confirm.html.haml delete mode 100644 billing/app/views/credit_card_info/edit.html.haml delete mode 100644 billing/app/views/customer/_customer_data.html.haml delete mode 100644 billing/app/views/customer/_transaction.html.haml delete mode 100644 billing/app/views/customer/confirm.html.haml delete mode 100644 billing/app/views/customer/edit.html.haml delete mode 100644 billing/app/views/customer/new.html.haml delete mode 100644 billing/app/views/customer/show.html.haml delete mode 100644 billing/app/views/payments/_non_customer_fields.html.haml delete mode 100644 billing/app/views/payments/_transaction_details.html.haml delete mode 100644 billing/app/views/payments/confirm.html.haml delete mode 100644 billing/app/views/payments/index.html.haml delete mode 100644 billing/app/views/payments/new.html.haml delete mode 100644 billing/app/views/subscriptions/_subscription_details.html.haml delete mode 100644 billing/app/views/subscriptions/create.html.haml delete mode 100644 billing/app/views/subscriptions/destroy.html.haml delete mode 100644 billing/app/views/subscriptions/index.html.haml delete mode 100644 billing/app/views/subscriptions/new.html.haml delete mode 100644 billing/app/views/subscriptions/show.html.haml delete mode 100644 billing/config/initializers/braintree.rb delete mode 100644 billing/config/locales/en.yml delete mode 100644 billing/config/routes.rb delete mode 100644 billing/leap_web_billing.gemspec delete mode 100644 billing/lib/braintree_test_app.rb delete mode 100644 billing/lib/leap_web_billing.rb delete mode 100644 billing/lib/leap_web_billing/engine.rb delete mode 100755 billing/script/rails delete mode 100644 billing/test/broken/admin_customer_test.rb delete mode 100644 billing/test/broken/customer_creation_test.rb delete mode 100644 billing/test/broken/subscription_test.rb delete mode 100644 billing/test/factories.rb delete mode 100644 billing/test/functional/customer_controller_test.rb delete mode 100644 billing/test/functional/customers_controller_test.rb delete mode 100644 billing/test/functional/payments_controller_test.rb delete mode 100644 billing/test/functional/subscriptions_controller_test.rb delete mode 100644 billing/test/support/braintree_integration_test.rb delete mode 100644 billing/test/support/customer_test_helper.rb delete mode 100644 billing/test/test_helper.rb delete mode 100644 billing/test/unit/customer_test.rb delete mode 100644 billing/test/unit/customer_with_payment_info_test.rb (limited to 'billing') diff --git a/billing/Gemfile b/billing/Gemfile deleted file mode 100644 index 30e9669..0000000 --- a/billing/Gemfile +++ /dev/null @@ -1,23 +0,0 @@ -source "https://rubygems.org" - -eval(File.read(File.dirname(__FILE__) + '/../common_dependencies.rb')) -eval(File.read(File.dirname(__FILE__) + '/../ui_dependencies.rb')) - -# We require leap_web_core from here so we can use the path option. -gem "leap_web_core", :path => '../core' - -# Declare your gem's dependencies in billing.gemspec. -# Bundler will treat runtime dependencies like base dependencies, and -# development dependencies will be added by default to the :development group. -gemspec - -# jquery-rails is used by the dummy application -#gem "jquery-rails" - -# Declare any dependencies that are still in development here instead of in -# your gemspec. These might include edge Rails or gems from your path or -# Git. Remember to move these dependencies to your gemspec before releasing -# your gem to rubygems.org. - -# To use debugger -# gem 'debugger' diff --git a/billing/README.md b/billing/README.md deleted file mode 100644 index 3ef6153..0000000 --- a/billing/README.md +++ /dev/null @@ -1,49 +0,0 @@ -Billing Engine -==================== - -Currently, this engine support billing via Braintree. More backends to come later. - -Configuration ----------------------------------- - -Start with a sandbox account, which you can get here: https://www.braintreepayments.com/get-started - -Once you have registered for the sandbox, logging in will show you three important variables you will need to configure: - -* merchantId -* publicKey -* privatekey - -To configure the billing engine, edit `config/config.yaml` like so: - - production: (or "development", as you prefer) - billing: - braintree: - environment: sandbox - merchant_id: Ohp2aijaaqu6oJ4w - public_key: ahnar0UwLahwe6Ce - private_key: aemie2Geohgah2EaOad9DeeruW4Iegh4 - -If deploying via puppet, the same data in webapp.json would like this: - - "billing": { - "braintree": { - "environment": "sandbox", - "merchant_id": "Ohp2aijaaqu6oJ4w", - "public_key": "ahnar0UwLahwe6Ce", - "private_key": "aemie2Geohgah2EaOad9DeeruW4Iegh4" - } - } - -Now, you should be able to add charges to your own sandbox when you run the webapp. - -The acceptable values for `billing.braintree.environment` are: `development`, `qa`, `sandbox`, or `production`. - -Plans --------------------------------- - -You also will want to add a Plan to your Sandbox. Within the Braintree Sandbox, navigate to 'Recurring Billing' -> 'Plans'. From here, you can add a new Plan. The values of the test plan are not important, but the ID will be displayed, so should pick something descriptive. - -Here are credit cared numbers to try in the Sandbox: - -https://www.braintreepayments.com/docs/ruby/reference/sandbox \ No newline at end of file diff --git a/billing/Rakefile b/billing/Rakefile deleted file mode 100644 index 52929c4..0000000 --- a/billing/Rakefile +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env rake -begin - require 'bundler/setup' -rescue LoadError - puts 'You must `gem install bundler` and `bundle install` to run rake tasks' -end -begin - require 'rdoc/task' -rescue LoadError - require 'rdoc/rdoc' - require 'rake/rdoctask' - RDoc::Task = Rake::RDocTask -end - -RDoc::Task.new(:rdoc) do |rdoc| - rdoc.rdoc_dir = 'rdoc' - rdoc.title = 'LeapWebBilling' - rdoc.options << '--line-numbers' - rdoc.rdoc_files.include('README.rdoc') - rdoc.rdoc_files.include('lib/**/*.rb') -end - -spec = eval(File.read('leap_web_billing.gemspec')) -Gem::PackageTask.new(spec) do |p| - p.gem_spec = spec -end - -Bundler::GemHelper.install_tasks - -require 'rake/testtask' - -Rake::TestTask.new(:test) do |t| - t.libs << 'lib' - t.libs << 'test' - t.pattern = 'test/**/*_test.rb' - t.verbose = false -end - - -task :default => :test diff --git a/billing/app/controllers/billing_admin_controller.rb b/billing/app/controllers/billing_admin_controller.rb deleted file mode 100644 index e11d4ee..0000000 --- a/billing/app/controllers/billing_admin_controller.rb +++ /dev/null @@ -1,29 +0,0 @@ -class BillingAdminController < BillingBaseController - before_filter :require_admin - - def show - - br_atleast_90_days = Braintree::Subscription.search do |search| - search.days_past_due >= 90 - end - @past_due_atleast_90_days = braintree_resource_collection_to_array(br_atleast_90_days) - - br_all_past_due = Braintree::Subscription.search do |search| - search.status.is Braintree::Subscription::Status::PastDue - #cannot search by balance. - end - @all_past_due = braintree_resource_collection_to_array(br_all_past_due) - - end - - private - - def braintree_resource_collection_to_array(braintree_resource_collection) - array = [] - braintree_resource_collection.each do |object| - array << object - end - array - end - -end diff --git a/billing/app/controllers/billing_base_controller.rb b/billing/app/controllers/billing_base_controller.rb deleted file mode 100644 index 0453677..0000000 --- a/billing/app/controllers/billing_base_controller.rb +++ /dev/null @@ -1,22 +0,0 @@ -class BillingBaseController < ApplicationController - before_filter :assign_user - - helper 'billing' - - # required for navigation to work. - def assign_user - if params[:user_id] - @user = User.find(params[:user_id]) - 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] - @user = User.find(params[:id]) - else - # TODO - # hacky, what are cases where @user hasn't yet been set? certainly some cases with subscriptions and payments - @user = current_user - end - end - -end diff --git a/billing/app/controllers/credit_card_info_controller.rb b/billing/app/controllers/credit_card_info_controller.rb deleted file mode 100644 index fbaa6f1..0000000 --- a/billing/app/controllers/credit_card_info_controller.rb +++ /dev/null @@ -1,35 +0,0 @@ -class CreditCardInfoController < ApplicationController - before_filter :require_login, :set_user - - def edit - @credit_card = Braintree::CreditCard.find(params[:id]) - customer = Customer.find_by_user_id(@user.id) - if customer and customer.braintree_customer_id == @credit_card.customer_id - @tr_data = Braintree::TransparentRedirect. - update_credit_card_data(:redirect_url => confirm_credit_card_info_url, - :payment_method_token => @credit_card.token) - else - access_denied - end - - end - - def confirm - @result = Braintree::TransparentRedirect.confirm(request.query_string) - if @result.success? - render :action => "confirm" - else - @credit_card = Braintree::CreditCard.find(@result.params[:payment_method_token]) - render :action => "edit" - end - end - - - private - - def set_user - # this assumes anybody, even an admin, will not access for another user. - @user = current_user - end - -end diff --git a/billing/app/controllers/customer_controller.rb b/billing/app/controllers/customer_controller.rb deleted file mode 100644 index 6cbcb44..0000000 --- a/billing/app/controllers/customer_controller.rb +++ /dev/null @@ -1,64 +0,0 @@ -class CustomerController < BillingBaseController - before_filter :require_login, :fetch_customer - - def show - if @customer - @customer.with_braintree_data! - @default_cc = @customer.default_credit_card - @active_subscription = @customer.subscriptions - @transactions = @customer.braintree_customer.transactions - end - end - - def new - if @customer.has_payment_info? - redirect_to edit_customer_path(@user), :notice => 'Here is your saved customer data' - else - fetch_new_transparent_redirect_data - end - end - - def edit - fetch_edit_transparent_redirect_data - end - - def confirm - @result = Braintree::TransparentRedirect.confirm(request.query_string) - if @result.success? - @customer.braintree_customer = @result.customer - @customer.save - render :action => "confirm" - elsif @customer.has_payment_info? - fetch_edit_transparent_redirect_data - render :action => "edit" - else - fetch_new_transparent_redirect_data - render :action => "new" - end - end - - protected - - def fetch_new_transparent_redirect_data - access_denied unless @user == current_user # admins cannot do this for others - @tr_data = Braintree::TransparentRedirect. - create_customer_data(:redirect_url => confirm_customer_url) - end - - def fetch_edit_transparent_redirect_data - access_denied unless @user == current_user # admins cannot do this for others - @customer.with_braintree_data! - @default_cc = @customer.default_credit_card - @tr_data = Braintree::TransparentRedirect. - update_customer_data(:redirect_url => confirm_customer_url, - :customer_id => @customer.braintree_customer_id) ##?? - end - - def fetch_customer - @customer = Customer.find_by_user_id(@user.id) - if @user == current_user - @customer ||= Customer.new(user: @user) - end - access_denied unless (@customer and (@customer.user == current_user)) or admin? - end -end diff --git a/billing/app/controllers/payments_controller.rb b/billing/app/controllers/payments_controller.rb deleted file mode 100644 index fce6570..0000000 --- a/billing/app/controllers/payments_controller.rb +++ /dev/null @@ -1,34 +0,0 @@ -class PaymentsController < BillingBaseController - before_filter :require_login, :only => [:index] - - def new - fetch_transparent_redirect - end - - def confirm - @result = Braintree::TransparentRedirect.confirm(request.query_string) - if @result.success? - render :action => "confirm" - else - fetch_transparent_redirect - render :action => "new" - end - end - - def index - access_denied unless admin? or (@user == current_user) - customer = Customer.find_by_user_id(@user.id) - braintree_data = Braintree::Customer.find(customer.braintree_customer_id) - # these will be ordered by created_at descending, per http://stackoverflow.com/questions/16425475/ - @transactions = braintree_data.transactions - end - - protected - - - def fetch_transparent_redirect - @tr_data = Braintree::TransparentRedirect.transaction_data redirect_url: confirm_payment_url, - transaction: { type: "sale", options: {submit_for_settlement: true } } - end - -end diff --git a/billing/app/controllers/subscriptions_controller.rb b/billing/app/controllers/subscriptions_controller.rb deleted file mode 100644 index f066b3c..0000000 --- a/billing/app/controllers/subscriptions_controller.rb +++ /dev/null @@ -1,63 +0,0 @@ -class SubscriptionsController < BillingBaseController - before_filter :require_login - before_filter :fetch_subscription, :only => [:show, :destroy] - before_filter :confirm_cancel_subscription, :only => [:destroy] - before_filter :confirm_self_or_admin, :only => [:index] - before_filter :confirm_no_pending_active_pastdue_subscription, :only => [:new, :create] - # for now, admins cannot create or destroy subscriptions for others: - before_filter :confirm_self, :only => [:new, :create] - - def new - # don't show link to subscribe if they are already subscribed? - credit_card = @customer.default_credit_card #safe to assume default? - @payment_method_token = credit_card.token - @plans = Braintree::Plan.all - end - - # show has no content, so not needed at this point. - - def create - @result = Braintree::Subscription.create( :payment_method_token => params[:payment_method_token], :plan_id => params[:plan_id] ) - #if you want to test pastdue, can add :price => '2001', :trial_period => true,:trial_duration => 1,:trial_duration_unit => "day" and then wait a day - end - - def destroy - @result = Braintree::Subscription.cancel params[:id] - end - - def index - customer = Customer.find_by_user_id(@user.id) - @subscriptions = customer.subscriptions(nil, false) - end - - private - - def fetch_subscription - @subscription = Braintree::Subscription.find params[:id] - @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) - - end - - def confirm_cancel_subscription - access_denied unless view_context.allow_cancel_subscription(@subscription) - end - - def confirm_no_pending_active_pastdue_subscription - @customer = Customer.find_by_user_id(@user.id) - if subscription = @customer.subscriptions # will return pending, active or pastdue subscription, if it exists - redirect_to user_subscription_path(@user, subscription.id), :notice => 'You already have a subscription' - end - end - - def confirm_self - @user == current_user - end - - def confirm_self_or_admin - access_denied unless confirm_self or admin? - end - -end diff --git a/billing/app/helpers/billing_helper.rb b/billing/app/helpers/billing_helper.rb deleted file mode 100644 index b9e5e2e..0000000 --- a/billing/app/helpers/billing_helper.rb +++ /dev/null @@ -1,51 +0,0 @@ -module BillingHelper - - def braintree_form_for(object, options = {}, &block) - options.reverse_merge! params: @result && @result.params[object], - errors: @result && @result.errors.for(object), - builder: BraintreeFormHelper::BraintreeFormBuilder, - url: Braintree::TransparentRedirect.url - - form_for object, options, &block - end - - def billing_top_link(user) - # for admins, top link will show special admin information, which has link to show their own customer information - if (admin? and user == current_user) - billing_admin_path - else - show_or_new_customer_link(user) - end - end - - def show_or_new_customer_link(user) - # Link to show if user is admin viewing another user, or user is already a customer. - # Otherwise link to create a new customer. - if (admin? and (user != current_user)) or ((customer = Customer.find_by_user_id(user.id)) and customer.has_payment_info?) - show_customer_path(user) - else - new_customer_path - end - end - - # a bit strange to put here, but we don't have a subscription model - def user_for_subscription(subscription) - - if (transaction = subscription.transactions.first) - # much quicker, but will only work if there is already a transaction associated with subscription (should generally be) - braintree_customer_id = transaction.customer_details.id - else - credit_card = Braintree::CreditCard.find(subscription.payment_method_token) - braintree_customer_id = credit_card.customer_id - end - - customer = Customer.find_by_braintree_customer_id(braintree_customer_id) - user = User.find(customer.user_id) - - end - - def allow_cancel_subscription(subscription) - ['Active', 'Pending'].include? subscription.status or (admin? and subscription.status == 'Past Due') - end - -end diff --git a/billing/app/helpers/braintree_form_helper.rb b/billing/app/helpers/braintree_form_helper.rb deleted file mode 100644 index cb322fa..0000000 --- a/billing/app/helpers/braintree_form_helper.rb +++ /dev/null @@ -1,64 +0,0 @@ -module BraintreeFormHelper - class BraintreeFormBuilder < ActionView::Helpers::FormBuilder - include ActionView::Helpers::AssetTagHelper - include ActionView::Helpers::TagHelper - - def initialize(object_name, object, template, options, proc) - super - @braintree_params = @options[:params] - @braintree_errors = @options[:errors] - @braintree_existing = @options[:existing] - end - - def fields_for(record_name, *args, &block) - options = args.extract_options! - options[:builder] = BraintreeFormBuilder - options[:params] = @braintree_params && @braintree_params[record_name] - options[:errors] = @braintree_errors && @braintree_errors.for(record_name) - new_args = args + [options] - super record_name, *new_args, &block - end - - def text_field(method, options = {}) - has_errors = @braintree_errors && @braintree_errors.on(method).any? - field = super(method, options.merge(:value => determine_value(method))) - result = content_tag("div", field, :class => has_errors ? "fieldWithErrors" : "") - result.safe_concat validation_errors(method) - result - end - - protected - - def determine_value(method) - if @braintree_params - @braintree_params[method] - elsif @braintree_existing - - if @braintree_existing.kind_of?(Braintree::CreditCard) - - case method - when :number - method = :masked_number - when :cvv - return nil - end - end - - @braintree_existing.send(method) - else - nil - end - end - - def validation_errors(method) - if @braintree_errors && @braintree_errors.on(method).any? - @braintree_errors.on(method).map do |error| - content_tag("div", ERB::Util.h(error.message), {:style => "color: red;"}) - end.join - else - "" - end - end - end -end - diff --git a/billing/app/helpers/braintree_helper.rb b/billing/app/helpers/braintree_helper.rb deleted file mode 100644 index 2d18b6c..0000000 --- a/billing/app/helpers/braintree_helper.rb +++ /dev/null @@ -1,5 +0,0 @@ -module BraintreeHelper - - -end - diff --git a/billing/app/models/customer.rb b/billing/app/models/customer.rb deleted file mode 100644 index 1acc7a5..0000000 --- a/billing/app/models/customer.rb +++ /dev/null @@ -1,58 +0,0 @@ -class Customer < CouchRest::Model::Base - - FIELDS = [:first_name, :last_name, :phone, :website, :company, :fax, :addresses, :credit_cards, :custom_fields] - attr_accessor *FIELDS - - use_database "customers" - belongs_to :user - belongs_to :braintree_customer - - # Braintree::Customer - stored on braintrees servers - we only have the id. - def braintree_customer - @braintree_customer ||= Braintree::Customer.find(braintree_customer_id) - end - - validates :user, presence: true - - design do - view :by_user_id - view :by_braintree_customer_id - end - - def has_payment_info? - !!braintree_customer_id - end - - # from braintree_ruby_examples/rails3_tr_devise and should be tweaked - def with_braintree_data! - return self unless has_payment_info? - - FIELDS.each do |field| - send(:"#{field}=", braintree_customer.send(field)) - end - self - end - - def default_credit_card - return unless has_payment_info? - - credit_cards.find { |cc| cc.default? } - end - - # based on 2nd parameter, either returns the single active subscription (or nil if there isn't one), or an array of all subsciptions - def subscriptions(braintree_data=nil, only_pending_active_pastdue=true) - self.with_braintree_data! - return unless has_payment_info? - - subscriptions = [] - self.default_credit_card.subscriptions.each do |sub| - if only_pending_active_pastdue and ['Pending', 'Active','Past Due'].include? sub.status - return sub - else - subscriptions << sub - end - end - only_pending_active_pastdue ? nil : subscriptions - end - -end diff --git a/billing/app/views/billing_admin/show.html.haml b/billing/app/views/billing_admin/show.html.haml deleted file mode 100644 index 0382cf0..0000000 --- a/billing/app/views/billing_admin/show.html.haml +++ /dev/null @@ -1,7 +0,0 @@ -%legend= t(:more_than_90_days_past_due) -= render(:partial => "subscriptions/subscription_details", :collection => @past_due_atleast_90_days, :as => 'subscription', :locals => {:show_user => true}) || t(:none) -%legend= t(:all_past_due) -= render(:partial => "subscriptions/subscription_details", :collection => @all_past_due, :as => 'subscription', :locals => {:show_user => true}) || t(:none) - -%legend= t(:your_settings) -= link_to 'view own billing settings', show_or_new_customer_link(current_user) \ No newline at end of file diff --git a/billing/app/views/credit_card_info/confirm.html.haml b/billing/app/views/credit_card_info/confirm.html.haml deleted file mode 100644 index 9dd8176..0000000 --- a/billing/app/views/credit_card_info/confirm.html.haml +++ /dev/null @@ -1,5 +0,0 @@ -%h1 Payment Info Confirmation -%p Your payment information was successfully saved. -%dl - %dt Credit Card - %dd= @result.credit_card.masked_number diff --git a/billing/app/views/credit_card_info/edit.html.haml b/billing/app/views/credit_card_info/edit.html.haml deleted file mode 100644 index bd86a4c..0000000 --- a/billing/app/views/credit_card_info/edit.html.haml +++ /dev/null @@ -1,17 +0,0 @@ -%h1 Change Credit Card -- if @result - #total-errors{:style => "color:red;"} - = h(@result.errors.size) - error(s) -= braintree_form_for :credit_card, :existing => @credit_card do |f| - = field_set_tag "Credit Card" do - %dl - %dt= f.label :number, 'Number' - %dd= f.text_field :number - %dt= f.label :expiration_date, 'Expiration Date (MM/YY)' - %dd= f.text_field :expiration_date - %dt= f.label :cvv, 'CVV' - %dd= f.text_field :cvv - = hidden_field_tag :tr_data, @tr_data - = f.submit 'Save Payment Info', :class => :btn - = link_to t(:cancel), edit_customer_path(@user.id), :class => :btn diff --git a/billing/app/views/customer/_customer_data.html.haml b/billing/app/views/customer/_customer_data.html.haml deleted file mode 100644 index e9df040..0000000 --- a/billing/app/views/customer/_customer_data.html.haml +++ /dev/null @@ -1,16 +0,0 @@ -%legend= t(:customer_information) -%dl - %dt First Name - %dd= @customer.first_name - %dt Last Name - %dd= @customer.last_name - %dt Phone - %dd= @customer.phone -%legend= t(:credit_card_information) -%dl - %dt Number - %dd= @default_cc.masked_number - %dt Expiration Date - %dd= @default_cc.expiration_date - - if current_user == @user - = link_to t(:edit_saved_data), edit_customer_path(@user.id), :class => :btn diff --git a/billing/app/views/customer/_transaction.html.haml b/billing/app/views/customer/_transaction.html.haml deleted file mode 100644 index e69de29..0000000 diff --git a/billing/app/views/customer/confirm.html.haml b/billing/app/views/customer/confirm.html.haml deleted file mode 100644 index 877a8ac..0000000 --- a/billing/app/views/customer/confirm.html.haml +++ /dev/null @@ -1,14 +0,0 @@ -%h1 Payment Info Confirmation -%p Your payment information was successfully saved. -%dl - %dt First Name - %dd= @result.customer.first_name - %dt Last Name - %dd= @result.customer.last_name - %dt Phone - %dd= @result.customer.phone - %dt Credit Card - - @result.customer.credit_cards.each do |cc| - %dd= cc.masked_number -- customer = Customer.find_by_user_id(@user.id) -= link_to 'View Customer Info', show_customer_path(@user.id), :class=> :btn \ No newline at end of file diff --git a/billing/app/views/customer/edit.html.haml b/billing/app/views/customer/edit.html.haml deleted file mode 100644 index e882d53..0000000 --- a/billing/app/views/customer/edit.html.haml +++ /dev/null @@ -1,23 +0,0 @@ -- if @result - #total-errors{:style => "color:red;"} - = h(@result.errors.size) - error(s) -= braintree_form_for :customer, existing: @customer do |f| - = field_set_tag "Customer" do - %dl - %dt= f.label :first_name, 'First Name' - %dd= f.text_field :first_name - %dt= f.label :last_name, 'Last Name' - %dd= f.text_field :last_name - %dt= f.label :phone, 'Phone' - %dd= f.text_field :phone - - if @default_cc - = # todo, as they will need a credit card, so not sure about conditional? - %dt= t(:stored_credit_card) - %dd - = @default_cc.masked_number - = link_to t(:change_credit_card), edit_credit_card_info_path(:id => @default_cc.token), :class => :btn - = hidden_field_tag :tr_data, @tr_data - .form-actions - = f.submit t(:save_customer_info), :class => 'btn btn-primary' - = link_to t(:cancel), show_customer_path(@user), :class=> :btn diff --git a/billing/app/views/customer/new.html.haml b/billing/app/views/customer/new.html.haml deleted file mode 100644 index e1f5ba9..0000000 --- a/billing/app/views/customer/new.html.haml +++ /dev/null @@ -1,24 +0,0 @@ -- if @result - #total-errors{:style => "color:red;"} - = h(@result.errors.size) - error(s) -= braintree_form_for :customer do |f| - = field_set_tag "Customer" do - %dl - %dt= f.label :first_name, 'First Name' - %dd= f.text_field :first_name - %dt= f.label :last_name, 'Last Name' - %dd= f.text_field :last_name - %dt= f.label :phone, 'Phone' - %dd= f.text_field :phone - = field_set_tag "Credit Card" do - - f.fields_for :credit_card do |cc| - %dl - %dt= cc.label :number, 'Number' - %dd= cc.text_field :number - %dt= cc.label :expiration_date, 'Expiration Date (MM/YY)' - %dd= cc.text_field :expiration_date - %dt= cc.label :cvv, 'CVV' - %dd= cc.text_field :cvv - = hidden_field_tag :tr_data, @tr_data - = f.submit 'Save Payment Info' diff --git a/billing/app/views/customer/show.html.haml b/billing/app/views/customer/show.html.haml deleted file mode 100644 index ec1779c..0000000 --- a/billing/app/views/customer/show.html.haml +++ /dev/null @@ -1,27 +0,0 @@ -- if admin? and !@customer - = t(:no_saved_customer) -- else - = render :partial => 'customer_data' - %legend= t(:last_three_transactions) - - counter = 0 - = # these will be ordered with most recently created first, per http://stackoverflow.com/questions/16425475/ - - @transactions.each do |t| - - break if counter > 2 # not ruby-like, but object is a Braintree::ResourceCollection so limited methods available - = render :partial => "payments/transaction_details", :locals => {:transaction => t} - - counter += 1 - = link_to t(:transaction_history), user_payments_path(@user) - %legend= t(:subscriptions) - - if @active_subscription - = render :partial => "subscriptions/subscription_details", :locals => {:subscription => @active_subscription} - - else - %p - = t(:no_relevant_subscription) - - if current_user == @user - %p - .form-actions - = link_to t(:subscribe_to_plan), new_subscription_path, :class => :btn - %p - = link_to t(:all_subscriptions), user_subscriptions_path(@user) - -.form-actions - = link_to t(:make_donation), new_payment_path, :class => 'btn btn-primary' diff --git a/billing/app/views/payments/_non_customer_fields.html.haml b/billing/app/views/payments/_non_customer_fields.html.haml deleted file mode 100644 index 77cfe95..0000000 --- a/billing/app/views/payments/_non_customer_fields.html.haml +++ /dev/null @@ -1,16 +0,0 @@ -= field_set_tag "Personal Information" do - = f.fields_for :customer do |c| - %div= c.label :first_name, "First Name" - %div= c.text_field :first_name - %div= c.label :last_name, "Last Name" - %div= c.text_field :last_name - %div= c.label :email, "Email" - %div= c.text_field :email -= field_set_tag "Credit Card" do - = f.fields_for :credit_card do |c| - %div= c.label :number, "Number" - %div= c.text_field :number - %div= c.label :expiration_date, "Expiration Date (MM/YY)" - %div= c.text_field :expiration_date - %div= c.label :cvv, "CVV" - %div= c.text_field :cvv \ No newline at end of file diff --git a/billing/app/views/payments/_transaction_details.html.haml b/billing/app/views/payments/_transaction_details.html.haml deleted file mode 100644 index 85e4f6a..0000000 --- a/billing/app/views/payments/_transaction_details.html.haml +++ /dev/null @@ -1,15 +0,0 @@ -%p - = transaction.id - Type: - = transaction.type - Amount: - = number_to_currency(transaction.amount) - Status: - = transaction.status - Date - = transaction.created_at.strftime("%Y-%m-%d") - - if sub_start = transaction.subscription_details.billing_period_start_date - From subscription which started - = sub_start - - else # should not have any of these - Not paid as part of subscription \ No newline at end of file diff --git a/billing/app/views/payments/confirm.html.haml b/billing/app/views/payments/confirm.html.haml deleted file mode 100644 index 45af3c9..0000000 --- a/billing/app/views/payments/confirm.html.haml +++ /dev/null @@ -1,26 +0,0 @@ -%h1 Payment Result -%div Thank you for your donation. -%h2 Transaction Details -%table - %tr - %td Amount - %td - $#{@result.transaction.amount} - %tr - %td Transaction ID: - %td= @result.transaction.id - %tr - %td First Name: - %td= h @result.transaction.customer_details.first_name - %tr - %td Last Name: - %td= h @result.transaction.customer_details.last_name - %tr - %td Email: - %td= h @result.transaction.customer_details.email - %tr - %td Credit Card: - %td= h @result.transaction.credit_card_details.masked_number - %tr - %td Card Type: - %td= h @result.transaction.credit_card_details.card_type \ No newline at end of file diff --git a/billing/app/views/payments/index.html.haml b/billing/app/views/payments/index.html.haml deleted file mode 100644 index 7a89917..0000000 --- a/billing/app/views/payments/index.html.haml +++ /dev/null @@ -1,5 +0,0 @@ -%h2=t :transaction_history -- if (@transactions.count == 0) - = t(:no_transaction_history) -- @transactions.each do |t| - = render :partial => "transaction_details", :locals => {:transaction => t} \ No newline at end of file diff --git a/billing/app/views/payments/new.html.haml b/billing/app/views/payments/new.html.haml deleted file mode 100644 index e9a8273..0000000 --- a/billing/app/views/payments/new.html.haml +++ /dev/null @@ -1,17 +0,0 @@ -%h1 - = t(:Donation) -- if logged_in? - = t(:donation_not_payment) -- if @result and @result.errors.size > 0 - %div{:style => "color: red;"} - = h @result.errors.size - error(s) -- if @result and @result.transaction and @result.transaction.status != 'success' - %div{:style => "color: red;"} - = t(:processor_declined) -= braintree_form_for :transaction, :html => {:autocomplete => "off"} do |f| - = f.label :amount, t(:amount) - = f.text_field :amount - = render :partial => 'non_customer_fields', :locals => {:f => f} - = hidden_field_tag :tr_data, @tr_data - = f.submit "Submit Donation", :class => 'btn btn-primary' diff --git a/billing/app/views/subscriptions/_subscription_details.html.haml b/billing/app/views/subscriptions/_subscription_details.html.haml deleted file mode 100644 index 6145c95..0000000 --- a/billing/app/views/subscriptions/_subscription_details.html.haml +++ /dev/null @@ -1,26 +0,0 @@ -%p - - if local_assigns[:show_user] - User: - - user_to_show = user_for_subscription(subscription) - = link_to user_to_show.login, user_overview_path(user_to_show) - ID: - = link_to subscription.id, user_subscription_path(@user, subscription.id) - Balance: - - color = (subscription.balance > 0) ? "red" : "" - %font{:color => color} - = number_to_currency(subscription.balance) - Bill on: - = subscription.billing_day_of_month - Start date: - = subscription.first_billing_date - Paid through: - = subscription.paid_through_date - Plan: - = subscription.plan_id - Price: - = number_to_currency(subscription.price) - - color = (subscription.status == 'Active') ? "green" : "red" - Status: - %font{:color => color} - = subscription.status - - # would be good to get plan name but not sure if that is possible? \ No newline at end of file diff --git a/billing/app/views/subscriptions/create.html.haml b/billing/app/views/subscriptions/create.html.haml deleted file mode 100644 index 2b6c5e9..0000000 --- a/billing/app/views/subscriptions/create.html.haml +++ /dev/null @@ -1,9 +0,0 @@ -- if @result.success? - %h1 - Subscription Status - = @result.subscription.status - = render :partial => "subscription_details", :locals => {:subscription => @result.subscription} -- else - %h1 - Error: - = @result.message \ No newline at end of file diff --git a/billing/app/views/subscriptions/destroy.html.haml b/billing/app/views/subscriptions/destroy.html.haml deleted file mode 100644 index 44b4333..0000000 --- a/billing/app/views/subscriptions/destroy.html.haml +++ /dev/null @@ -1,7 +0,0 @@ -- if @result.success? - Subscription destroyed -- else - Error: - = @result.message -%p - = link_to 'Customer Information', show_customer_path(@user), :class=> :btn \ No newline at end of file diff --git a/billing/app/views/subscriptions/index.html.haml b/billing/app/views/subscriptions/index.html.haml deleted file mode 100644 index 3d4e8fd..0000000 --- a/billing/app/views/subscriptions/index.html.haml +++ /dev/null @@ -1,8 +0,0 @@ -%h2=t :all_subscriptions -- pending_active_pastdue = false -- @subscriptions.each do |s| - - if ['Pending', 'Active','Past Due'].include? s.status - - pending_active_pastdue = true - = render :partial => "subscription_details", :locals => {:subscription => s} -- if !pending_active_pastdue and @user == current_user - = link_to 'subscribe to plan', new_subscription_path, :class => :btn \ No newline at end of file diff --git a/billing/app/views/subscriptions/new.html.haml b/billing/app/views/subscriptions/new.html.haml deleted file mode 100644 index 4183458..0000000 --- a/billing/app/views/subscriptions/new.html.haml +++ /dev/null @@ -1,15 +0,0 @@ -- if @payment_method_token - %h1 - Subscribe to plan - = #currently just one plan - = @plans[0].name - = number_to_currency(@plans[0].price) - = simple_form_for :subscription, :url => :subscriptions do |f| - = hidden_field_tag :payment_method_token, @payment_method_token - = hidden_field_tag :plan_id, @plans[0].id - .form-actions - = f.submit t(:subscribe), :class => 'btn btn-primary' -- else - = t(:must_create_customer) - %p - = link_to t(:create_new_customer), new_customer_path diff --git a/billing/app/views/subscriptions/show.html.haml b/billing/app/views/subscriptions/show.html.haml deleted file mode 100644 index 2699db9..0000000 --- a/billing/app/views/subscriptions/show.html.haml +++ /dev/null @@ -1,6 +0,0 @@ -%h1 - - if @subscription.status == 'Active' - Current - Subscription -= render :partial => "subscription_details", :locals => {:subscription => @subscription} -= link_to t(:cancel_subscription), user_subscription_path(@user, @subscription.id), :confirm => t(:are_you_sure), :method => :delete, :class => 'btn btn-danger' if allow_cancel_subscription(@subscription) diff --git a/billing/config/initializers/braintree.rb b/billing/config/initializers/braintree.rb deleted file mode 100644 index 3d87f4c..0000000 --- a/billing/config/initializers/braintree.rb +++ /dev/null @@ -1,23 +0,0 @@ -# -# set logger -# -if APP_CONFIG[:logfile].blank? - require 'syslog/logger' - Braintree::Configuration.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new('webapp')) -else - Braintree::Configuration.logger = Logger.new('log/braintree.log') -end - -# -# You can set these per environment in config/config.yml: -# -# Environment must be one of: :development, :qa, :sandbox, :production -# -if billing = APP_CONFIG[:billing] - if braintree = billing[:braintree] - Braintree::Configuration.environment = braintree[:environment].downcase.to_sym - Braintree::Configuration.merchant_id = braintree[:merchant_id] - Braintree::Configuration.public_key = braintree[:public_key] - Braintree::Configuration.private_key = braintree[:private_key] - end -end diff --git a/billing/config/locales/en.yml b/billing/config/locales/en.yml deleted file mode 100644 index 1300958..0000000 --- a/billing/config/locales/en.yml +++ /dev/null @@ -1,11 +0,0 @@ -en: - create_new_customer: "Create a new Braintree Customer" - must_create_customer: "You must store a customer in braintree before subscribing to a plan" - subscribe: "Subscribe" - save_customer_info: "Save Customer Information" - donation_not_payment: "Note: This is a donation, and will not be applied towards your account." - no_relevant_subscription: "No subscription which is Active, Pending, or Past Due" - plan: "Plan" - description: "Description" - cost: "Cost" - free: "Free" \ No newline at end of file diff --git a/billing/config/routes.rb b/billing/config/routes.rb deleted file mode 100644 index 7263dff..0000000 --- a/billing/config/routes.rb +++ /dev/null @@ -1,25 +0,0 @@ -Rails.application.routes.draw do - - scope "(:locale)", :locale => MATCH_LOCALE do - match 'payments/new' => 'payments#new', :as => :new_payment - match 'payments/confirm' => 'payments#confirm', :as => :confirm_payment - resources :users do - resources :payments, :only => [:index] - resources :subscriptions, :only => [:index, :show, :destroy] - end - - resources :customer, :only => [:new, :edit] - resources :credit_card_info, :only => [:edit] - - match 'customer/confirm/' => 'customer#confirm', :as => :confirm_customer - 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] # index, show & destroy are within users path - match 'billing_admin' => 'billing_admin#show', :as => :billing_admin - - #match 'transactions/:product_id/new' => 'transactions#new', :as => :new_transaction - #match 'transactions/confirm/:product_id' => 'transactions#confirm', :as => :confirm_transaction - end - -end diff --git a/billing/leap_web_billing.gemspec b/billing/leap_web_billing.gemspec deleted file mode 100644 index cb0335e..0000000 --- a/billing/leap_web_billing.gemspec +++ /dev/null @@ -1,21 +0,0 @@ -$:.push File.expand_path("../lib", __FILE__) - -require File.expand_path('../../lib/leap_web/version.rb', __FILE__) - -# Describe your gem and declare its dependencies: -Gem::Specification.new do |s| - s.name = "leap_web_billing" - s.version = LeapWeb::VERSION - s.authors = ["Jessib"] - s.email = ["jessib@leap.se"] - s.homepage = "http://www.leap.se" - s.summary = "Billing for LeapWeb" - s.description = "Billing System for a Leap provider" - - s.files = Dir["{app,config,db,lib}/**/*"] + ["Rakefile", "README.md"] - s.test_files = Dir["test/**/*"] - - # s.add_dependency "braintree-rails", "~> 0.4.5" - s.add_dependency "braintree" - #s.add_dependency "carmen-rails" -end diff --git a/billing/lib/braintree_test_app.rb b/billing/lib/braintree_test_app.rb deleted file mode 100644 index 41c327d..0000000 --- a/billing/lib/braintree_test_app.rb +++ /dev/null @@ -1,36 +0,0 @@ -# RackTest assumes all requests to be local. -# Braintree requests need to go out to a different server though. -# So we use a middleware to catch these and send them out again. - -class BraintreeTestApp - def initialize(app) - @app = app - end - - def call(env) - @env = env - config = Braintree::Configuration.instantiate - if request.path =~ /\/merchants\/#{config.merchant_id}\/transparent_redirect_requests$/ - #proxy post to braintree - uri = URI.parse(config.protocol + "://" + config.server + ":" + - config.port.to_s + request.path) - http = Net::HTTP.new(uri.host, uri.port) - res = http.post(uri.path, request.body.read) - - if res.code == "303" - header_hash = res.header.to_hash - header_hash["location"].first.gsub!("http://localhost:3000/", "http://www.example.com/") - [303, {"location" => header_hash["location"].first}, ""] - else - raise "unexpected response from Braintree: expected a 303" - end - else - @app.call(env) - end - end - - def request - @request = Rack::Request.new(@env) - end -end - diff --git a/billing/lib/leap_web_billing.rb b/billing/lib/leap_web_billing.rb deleted file mode 100644 index 288d846..0000000 --- a/billing/lib/leap_web_billing.rb +++ /dev/null @@ -1,4 +0,0 @@ -require "leap_web_billing/engine" - -module LeapWebBilling -end diff --git a/billing/lib/leap_web_billing/engine.rb b/billing/lib/leap_web_billing/engine.rb deleted file mode 100644 index ab574f2..0000000 --- a/billing/lib/leap_web_billing/engine.rb +++ /dev/null @@ -1,10 +0,0 @@ -# thou shall require all your dependencies in an engine. -#require "braintree-rails" -require "braintree" -#require "carmen-rails" - -module LeapWebBilling - class Engine < ::Rails::Engine - - end -end diff --git a/billing/script/rails b/billing/script/rails deleted file mode 100755 index 8bd9c0a..0000000 --- a/billing/script/rails +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env ruby -# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. - -ENGINE_ROOT = File.expand_path('../..', __FILE__) -ENGINE_PATH = File.expand_path('../../lib/leap_web_billing/engine', __FILE__) - -require 'rails/all' -require 'rails/engine/commands' diff --git a/billing/test/broken/admin_customer_test.rb b/billing/test/broken/admin_customer_test.rb deleted file mode 100644 index df92a0d..0000000 --- a/billing/test/broken/admin_customer_test.rb +++ /dev/null @@ -1,31 +0,0 @@ -require 'test_helper' -require 'fake_braintree' - -class AdminCustomerTest < BraintreeIntegrationTest - - setup do - @admin = User.find_by_login('admin') || FactoryGirl.create(:user, login: 'admin') - @user = FactoryGirl.create(:user) - end - - teardown do - @user.destroy if @user - @admin.destroy if @admin - end - - test "check non customer as admin" do - login_as @admin - visit '/' - click_link 'Users' - click_link @user.login - click_link 'Billing Settings' - assert page.has_content? @user.email_address - assert page.has_content? 'No Saved Customer' - end - - test "check customer as admin" do - skip "cannot check customer as admin" - # it would be good to have a test where an admin tries to view the 'Billing Settings' for another user. - # However, partially due to limitations of FakeBraintree, this doesn't seem pursuing at this time. - end -end diff --git a/billing/test/broken/customer_creation_test.rb b/billing/test/broken/customer_creation_test.rb deleted file mode 100644 index 90319a9..0000000 --- a/billing/test/broken/customer_creation_test.rb +++ /dev/null @@ -1,84 +0,0 @@ -require 'test_helper' -require 'fake_braintree' - -class CustomerCreationTest < BraintreeIntegrationTest - - setup do - @user = FactoryGirl.create(:user) - login_as @user - end - - teardown do - @user.destroy - end - - # Let's test both steps together with capybara - # - # This test is nice and clean but also a bit fragile: - # RackTest assumes all requests to be local. So we need - # BraintreeTestApp for the braintree transparent redirect to work. - # - # this mystifies me why this works. when i type the click_button line (and the - # customer.braintree_customer line) in the debugger, it gives a timeout, - # but it works fine embedded in the test. - test "create customer with braintree" do - visit '/' - click_link 'Billing Settings' - # i am a bit unclear why this works, as it seems there will be validation errors - assert_difference("Customer.count") do - click_button 'Save Payment Info' # this gives me a timeout - end - assert customer = Customer.find_by_user_id(@user.id) - assert customer.braintree_customer - end - - # We only test the confirmation here. - # The request to Braintree is triggered outside of rails - # In skippped test below, we see this works even if the attributes are - # for a broken customer - test "successfully confirms customer creation" do - response = post_transparent_redirect :create_customer_data, - customer: FactoryGirl.attributes_for(:braintree_customer), - redirect_url: confirm_customer_url - - assert_difference("Customer.count") do - post response['Location'] - end - - assert_equal 200, status - assert customer = Customer.find_by_user_id(@user.id) - assert customer.braintree_customer - end - - - test "failed customer creation" do - skip "cannot get customer creation to fail" - - FakeBraintree.decline_all_cards! - - response = post_transparent_redirect :create_customer_data, - customer: FactoryGirl.attributes_for(:broken_customer), - redirect_url: confirm_customer_url - - assert FakeBraintree.decline_all_cards? - assert_no_difference("Customer.count") do - post response['Location'] #this gives me a timeout when run alone - end - assert_nil Customer.find_by_user_id(@user.id) - - end - - def post_transparent_redirect(type, data) - params = data.dup - params[:tr_data] = Braintree::TransparentRedirect.send(type, params) - post_transparent_redirect_params(params) - end - - def post_transparent_redirect_params(params) - uri = URI.parse(Braintree::TransparentRedirect.url) - Net::HTTP.start(uri.host, uri.port) do |http| - http.post(uri.path, Rack::Utils.build_nested_query(params)) - end - end - -end diff --git a/billing/test/broken/subscription_test.rb b/billing/test/broken/subscription_test.rb deleted file mode 100644 index cd010bd..0000000 --- a/billing/test/broken/subscription_test.rb +++ /dev/null @@ -1,49 +0,0 @@ -require 'test_helper' -require 'fake_braintree' - -class SubscriptionTest < BraintreeIntegrationTest - include CustomerTestHelper - include StubRecordHelper - - setup do - @admin = User.find_by_login('admin') || FactoryGirl.create(:user, login: 'admin') - @customer = stub_customer - @braintree_customer = @customer.braintree_customer - response = Braintree::Subscription.create plan_id: '5', - payment_method_token: @braintree_customer.credit_cards.first.token, - price: '10' - @subscription = response.subscription - end - - teardown do - @admin.destroy - end - - test "admin can see all subscriptions for another" do - login_as @admin - @customer.stubs(:subscriptions).returns([@subscription]) - @subscription.stubs(:balance).returns 0 - visit user_subscriptions_path(@customer.user_id, :locale => nil) - assert page.has_content?("Subscriptions") - assert page.has_content?("Status: Active") - end - - # test "user cannot see all subscriptions for other user" do - #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/factories.rb b/billing/test/factories.rb deleted file mode 100644 index 87543b2..0000000 --- a/billing/test/factories.rb +++ /dev/null @@ -1,25 +0,0 @@ -FactoryGirl.define do - - TEST_CC_NUMBER = %w(4111 1111 1111 1111).join - - factory :customer do - user - - factory :customer_with_payment_info do - braintree_customer - end - end - - factory :braintree_customer, class: Braintree::Customer do - first_name 'Big' - last_name 'Spender' - credit_card number: TEST_CC_NUMBER, expiration_date: '04/2016' - initialize_with { Braintree::Customer.create(attributes).customer } - skip_create - - factory :broken_customer do - credit_card number: '123456', expiration_date: '04/2016' - end - end - -end diff --git a/billing/test/functional/customer_controller_test.rb b/billing/test/functional/customer_controller_test.rb deleted file mode 100644 index d943e23..0000000 --- a/billing/test/functional/customer_controller_test.rb +++ /dev/null @@ -1,124 +0,0 @@ -require 'test_helper' -require 'fake_braintree' - -class CustomerControllerTest < ActionController::TestCase - include CustomerTestHelper - - test "new assigns redirect url" do - login - get :new - - assert_response :success - assert assigns(:tr_data) - tr_data = Braintree::Util.parse_query_string(assigns(:tr_data)) - assert_equal confirm_customer_url, tr_data[:redirect_url] - end - - test "new requires login" do - get :new - - assert_response :redirect - assert_redirected_to login_path - end - - test "edit uses params[:id]" do - customer = stub_customer - login customer.user - get :edit, id: customer.user.id - - assert_response :success - assert assigns(:tr_data) - tr_data = Braintree::Util.parse_query_string(assigns(:tr_data)) - assert_equal customer.braintree_customer_id, tr_data[:customer_id] - assert_equal confirm_customer_url, tr_data[:redirect_url] - end - - test "confirm customer creation" do - login - Braintree::TransparentRedirect.expects(:confirm).returns(success_response) - # to_confirm = prepare_confirmation :create_customer_data, - # customer: FactoryGirl.attributes_for(:braintree_customer), - # redirect_url: confirm_customer_url - - assert_difference("Customer.count") do - post :confirm, braintree: :query - end - - assert_response :success - assert result = assigns(:result) - assert result.success? - assert result.customer.id - end - - test "customer update" do - customer = stub_customer - customer.expects(:save) - login customer.user - Braintree::TransparentRedirect.expects(:confirm). - returns(success_response(customer)) - - assert_no_difference("Customer.count") do - post :confirm, query: :from_braintree - end - - assert_response :success - assert result = assigns(:result) - assert result.success? - assert_equal customer.braintree_customer, result.customer - end - - 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 - to_confirm = prepare_confirmation :create_customer_data, - customer: FactoryGirl.attributes_for(:broken_customer), - redirect_url: confirm_customer_url - post :confirm, to_confirm - - FakeBraintree.clear! - assert_response :success - assert result = assigns(:result) - assert !result.success? - end - - test "failed customer creation with stubbing" do - login - Braintree::TransparentRedirect.expects(:confirm).returns(failure_response) - post :confirm, bla: :blub - - assert_response :success - assert_template :new - end - - test "failed customer update with stubbing" do - customer = stub_customer - login customer.user - Braintree::TransparentRedirect.expects(:confirm).returns(failure_response) - post :confirm, bla: :blub - - assert_response :success - assert_template :edit - end - - def failure_response - stub success?: false, - errors: stub(for: nil, size: 0), - params: {} - end - - def success_response(customer = nil) - stub success?: true, - customer: braintree_customer(customer) - end - - def braintree_customer(customer) - if customer - customer.braintree_customer - else - FactoryGirl.build :braintree_customer - end - end - -end diff --git a/billing/test/functional/customers_controller_test.rb b/billing/test/functional/customers_controller_test.rb deleted file mode 100644 index 46c33c9..0000000 --- a/billing/test/functional/customers_controller_test.rb +++ /dev/null @@ -1,61 +0,0 @@ -require 'test_helper' -require 'fake_braintree' - -class CustomersControllerTest < ActionController::TestCase - tests CustomerController - - setup do - @user = FactoryGirl.create :user - @other_user = FactoryGirl.create :user - #FakeBraintree.clear! - #FakeBraintree.verify_all_cards! - testid = 'testid' - #this wasn't actually being used - #FakeBraintree::Customer.new({:credit_cards => [{:number=>"5105105105105100", :expiration_date=>"05/2013"}]}, {:id => testid, :merchant_id => Braintree::Configuration.merchant_id}) - # any reason to call the create instance method on the FakeBraintree::Customer ? - @customer = Customer.new(:user_id => @other_user.id) - @customer.braintree_customer_id = testid - @customer.save - - end - - teardown do - @user.destroy - @other_user.destroy - @customer.destroy - end - - test "no access if not logged in" do - get :new - assert_access_denied(true, false) - get :show, :id => @customer.braintree_customer_id - assert_access_denied(true, false) - get :edit, :id => @customer.braintree_customer_id - assert_access_denied(true, false) - end - - - test "should get new if logged in and not customer" do - login @user - get :new - assert_not_nil assigns(:tr_data) - assert_response :success - end - - test "new should direct edit if user is already a customer" do - login @other_user - get :new - assert_response :redirect - assert_equal edit_customer_url(@customer.user), response.header['Location'] - end - - - test "show" do - skip "show customer" - login @other_user - # Below will fail, as when we go to fetch the customer data, Braintree::Customer.find(params[:id]) won't find the customer as it is a FakeBraintree customer. - #get :show, :id => @customer.braintree_customer_id - - end - -end diff --git a/billing/test/functional/payments_controller_test.rb b/billing/test/functional/payments_controller_test.rb deleted file mode 100644 index 90b7582..0000000 --- a/billing/test/functional/payments_controller_test.rb +++ /dev/null @@ -1,50 +0,0 @@ -require 'test_helper' -require 'fake_braintree' - -class PaymentsControllerTest < ActionController::TestCase - include CustomerTestHelper - - test "payment when unauthorized" do - 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 diff --git a/billing/test/functional/subscriptions_controller_test.rb b/billing/test/functional/subscriptions_controller_test.rb deleted file mode 100644 index a6a1057..0000000 --- a/billing/test/functional/subscriptions_controller_test.rb +++ /dev/null @@ -1,16 +0,0 @@ -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/support/braintree_integration_test.rb b/billing/test/support/braintree_integration_test.rb deleted file mode 100644 index 976c5a2..0000000 --- a/billing/test/support/braintree_integration_test.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'capybara/rails' -# require 'fake_braintree' - messes up other integration tests -require 'braintree_test_app' - -class BraintreeIntegrationTest < BrowserIntegrationTest - include Warden::Test::Helpers - - setup do - Warden.test_mode! - Rails.application.config.middleware.use BraintreeTestApp - end - - teardown do - Warden.test_reset! - Rails.application.config.middleware.delete "BraintreeTestApp" - end - -end diff --git a/billing/test/support/customer_test_helper.rb b/billing/test/support/customer_test_helper.rb deleted file mode 100644 index adac00a..0000000 --- a/billing/test/support/customer_test_helper.rb +++ /dev/null @@ -1,11 +0,0 @@ -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 diff --git a/billing/test/test_helper.rb b/billing/test/test_helper.rb deleted file mode 100644 index 1e26a31..0000000 --- a/billing/test/test_helper.rb +++ /dev/null @@ -1,15 +0,0 @@ -# Configure Rails Environment -ENV["RAILS_ENV"] = "test" - -require File.expand_path("../dummy/config/environment.rb", __FILE__) -require "rails/test_help" - -Rails.backtrace_cleaner.remove_silencers! - -# Load support files -Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } - -# Load fixtures from the engine -if ActiveSupport::TestCase.method_defined?(:fixture_path=) - ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__) -end diff --git a/billing/test/unit/customer_test.rb b/billing/test/unit/customer_test.rb deleted file mode 100644 index 6156f87..0000000 --- a/billing/test/unit/customer_test.rb +++ /dev/null @@ -1,38 +0,0 @@ -require 'test_helper' - -class CustomerTest < ActiveSupport::TestCase - include StubRecordHelper - - setup do - @user = find_record :user - @customer = FactoryGirl.build(:customer, user: @user) - end - - test "test set of attributes should be valid" do - @customer.valid? - assert_equal Hash.new, @customer.errors.messages - end - - test "customer belongs to user" do - assert_equal User, @customer.user.class - end - - test "user validation" do - @customer.user = nil - assert !@customer.valid? - end - - test "has no payment info" do - assert !@customer.braintree_customer_id - assert !@customer.has_payment_info? - end - - test "with no braintree data" do - assert_equal @customer, @customer.with_braintree_data! - end - - test "without default credit card" do - assert_nil @customer.default_credit_card - end - -end diff --git a/billing/test/unit/customer_with_payment_info_test.rb b/billing/test/unit/customer_with_payment_info_test.rb deleted file mode 100644 index 0589a59..0000000 --- a/billing/test/unit/customer_with_payment_info_test.rb +++ /dev/null @@ -1,40 +0,0 @@ -require 'test_helper' -require 'fake_braintree' - -class CustomerWithPaymentInfoTest < ActiveSupport::TestCase - include StubRecordHelper - - setup do - @user = find_record :user - @customer = FactoryGirl.build(:customer_with_payment_info, user: @user) - end - - test "has payment_info" do - assert @customer.braintree_customer_id - assert @customer.has_payment_info? - end - - test "constructs customer with braintree data" do - @customer.with_braintree_data! - assert_equal 'Big', @customer.first_name - assert_equal 'Spender', @customer.last_name - assert_equal 1, @customer.credit_cards.size - assert_equal Hash.new, @customer.custom_fields - end - - test "can access braintree_customer after reload" do - @customer.save - @customer = Customer.find_by_user_id(@customer.user_id) - @customer.with_braintree_data! - assert_equal 'Big', @customer.first_name - assert_equal 'Spender', @customer.last_name - assert_equal 1, @customer.credit_cards.size - assert_equal Hash.new, @customer.custom_fields - @customer.destroy - end - - test "sets default_credit_card" do - @customer.with_braintree_data! - assert_equal @customer.credit_cards.first, @customer.default_credit_card - end -end -- cgit v1.2.3