Test error when Braintree payment is enabled?
Hi, I got these errors when running
rails test after enabled Braintree (and PayPal) to my app:INFO -- : [Braintree] [23/Jan/2022 08:51:26 UTC] POST /merchants//client_token 404
Error:
PaymentMethodsTest#test_fake_processor_sees_a_message:
ActionView::Template::Error: No more expects available for :client_token: []
app/views/payment_methods/forms/_braintree.html.erb:6
app/views/payment_methods/new.html.erb:19
lib/jumpstart/lib/jumpstart/account_middleware.rb:30:in `call'
test/integration/payment_methods_test.rb:18:in `block in <class:PaymentMethodsTest>'
rails test test/integration/payment_methods_test.rb:16INFO -- : [Braintree] [23/Jan/2022 08:21:41 UTC] POST /merchants//client_token 404
Error:
PaymentMethodsTest#test_user_can_add_a_payment_method_without_a_processor_set:
ActionView::Template::Error: Braintree::NotFoundError
app/views/payment_methods/forms/_braintree.html.erb:6
app/views/payment_methods/new.html.erb:19
lib/jumpstart/lib/jumpstart/account_middleware.rb:30:in `call'
test/integration/payment_methods_test.rb:12:in `block in <class:PaymentMethodsTest>'
rails test test/integration/payment_methods_test.rb:11INFO -- : [Braintree] [23/Jan/2022 08:51:26 UTC] POST /merchants//client_token 404
Error:
PurchasesControllerTest#test_should_get_new:
ActionView::Template::Error: Braintree::NotFoundError
app/views/purchases/_form.html.erb:6
app/views/purchases/new.html.erb:23
lib/jumpstart/lib/jumpstart/account_middleware.rb:30:in `call'
test/controllers/purchases_controller_test.rb:15:in `block in <class:PurchasesControllerTest>'
rails test test/controllers/purchases_controller_test.rb:14I guess the `POST /merchants//client_token 404` is the issue, but I have no idea how to fix it.
The actual payment page and Braintree/PayPal integration is working, at least in the sandbox environment.
But the tests shipped with JumpstartPro seemed to fail. Any help?
I already added the credentials to credentials/test.
Update:
It seems this part is causing the issue:
<%= form_with url: local_assigns.fetch(:url, subscriptions_path),
method: local_assigns.fetch(:method, :post),
data: {
controller: "braintree",
braintree_target: "form",
braintree_env: braintree_env,
braintree_client_token: Pay.braintree_gateway.client_token.generate,
} do |f| %>More specific, it seems
Pay.braintree_gateway.client_token.generate is not working in test environment. Any ideas?Update #2:
After I added the actual payment_processor code from the Pay gem documentation to my controller, the payment worked, but I got a new error when running the test:
After I added the actual payment_processor code from the Pay gem documentation to my controller, the payment worked, but I got a new error when running the test:
Error:
PurchasesControllerTest#test_should_create_purchase:
Pay::Braintree::Error: Braintree::NotFoundError
app/controllers/purchases_controller.rb:54:in `create'
lib/jumpstart/lib/jumpstart/account_middleware.rb:30:in `call'
test/controllers/purchases_controller_test.rb:21:in `block (2 levels) in <class:PurchasesControllerTest>'
test/controllers/purchases_controller_test.rb:20:in `block in <class:PurchasesControllerTest>'
rails test test/controllers/purchases_controller_test.rb:19And this is the create code in my controller:
def create
@purchase = Purchase.new(purchase_params)
authorize @purchase
# set payment processor when necessary
account = current_account
account.set_payment_processor :braintree if current_account.payment_processor.blank?
account.payment_processor.payment_method_token = params[:payment_method_token]
account.payment_processor.charge(@purchase.price_total_cents)
respond_to do |format|
if @purchase.save
format.html { redirect_to @purchase, notice: "Purchase info was successfully created." }
format.json { render :show, status: :created, location: @purchase }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @purchase.errors, status: :unprocessable_entity }
end
end
endThe test content is from the scaffold:
test "should create purchase" do
assert_difference("Purchase.count") do
post purchases_url, params: {purchase: {account_id: @purchase.account_id, payment_data: @purchase.payment_data, payment_method: @purchase.payment_method, price_total: @purchase.price_total}}
end
assert_redirected_to purchase_url(Purchase.last)
endAfter looking at the test code, I found there is a helper for Stripe:
StripeSystemTestHelper for filling out the payment form, but there isn't one for Braintree.So I guess the test is just not complete with Braintree?
Notifications
You’re not receiving notifications from this thread.