summaryrefslogtreecommitdiff
path: root/engines/billing/test/broken/customer_creation_test.rb
diff options
context:
space:
mode:
authorazul <azul@riseup.net>2014-04-17 10:12:05 +0200
committerazul <azul@riseup.net>2014-04-17 10:12:05 +0200
commit3513ad74f950b113af1ba1e3d06bc6a55c48fde5 (patch)
treedb49ebd4428053d5c8d720275b77594a531a1ad1 /engines/billing/test/broken/customer_creation_test.rb
parentcb6442c344d6bdaf52c3878b2de2fcf4d85f2648 (diff)
parent3d3688647fab7049e5b531c45b85c1e46a1d528f (diff)
Merge pull request #146 from azul/refactor/engines
Refactor/engines
Diffstat (limited to 'engines/billing/test/broken/customer_creation_test.rb')
-rw-r--r--engines/billing/test/broken/customer_creation_test.rb84
1 files changed, 84 insertions, 0 deletions
diff --git a/engines/billing/test/broken/customer_creation_test.rb b/engines/billing/test/broken/customer_creation_test.rb
new file mode 100644
index 0000000..90319a9
--- /dev/null
+++ b/engines/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