mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
84 lines
2.4 KiB
Ruby
84 lines
2.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'system_helper'
|
|
|
|
RSpec.describe '
|
|
As an admin
|
|
I want to manage payments
|
|
' do
|
|
include AuthenticationHelper
|
|
|
|
let(:order) { create(:completed_order_with_fees) }
|
|
let(:confirmed_order) { create(:order_ready_for_confirmation) }
|
|
|
|
describe "payments/new" do
|
|
it "displays the order balance as the default payment amount" do
|
|
login_as_admin
|
|
visit spree.new_admin_order_payment_path order
|
|
|
|
expect(page).to have_content 'New Payment'
|
|
expect(page).to have_field(:payment_amount, with: order.outstanding_balance.to_f)
|
|
end
|
|
end
|
|
|
|
context "with sensitive payment fee" do
|
|
before do
|
|
payment_method = create(:payment_method, distributors: [order.distributor])
|
|
|
|
# This calculator doesn't handle a `nil` order well.
|
|
# That has been useful in finding bugs. ;-)
|
|
payment_method.calculator = Calculator::FlatPercentItemTotal.new
|
|
payment_method.save!
|
|
end
|
|
|
|
it "renders the new payment page" do
|
|
login_as_admin
|
|
visit spree.new_admin_order_payment_path order
|
|
|
|
expect(page).to have_content 'New Payment'
|
|
end
|
|
end
|
|
|
|
context "creating an order's first payment via admin" do
|
|
before do
|
|
order.update_columns(
|
|
state: "payment",
|
|
payment_state: nil,
|
|
shipment_state: nil,
|
|
completed_at: nil
|
|
)
|
|
end
|
|
|
|
it "creates the payment, completes the order, and updates payment and shipping states" do
|
|
login_as_admin
|
|
visit spree.new_admin_order_payment_path order
|
|
|
|
expect(page).to have_content "New Payment"
|
|
|
|
within "#new_payment" do
|
|
find('input[type="radio"]').click
|
|
end
|
|
|
|
click_button "Update"
|
|
expect(page).to have_content "Payments"
|
|
expect(page).to have_content "Payment has been successfully created!"
|
|
expect(page).not_to have_content "[object Object]true"
|
|
|
|
order.reload
|
|
expect(order.state).to eq "complete"
|
|
expect(order.payment_state).to eq "balance_due"
|
|
expect(order.shipment_state).to eq "pending"
|
|
end
|
|
end
|
|
|
|
describe 'Capture & complete order' do
|
|
it 'completes order when capturing payment' do
|
|
login_as_admin
|
|
visit spree.admin_order_payments_path confirmed_order
|
|
expect(page).to have_content "CHECKOUT"
|
|
page.find('a.icon-capture_and_complete_order').click
|
|
expect(confirmed_order.reload.state).to eq 'complete'
|
|
end
|
|
end
|
|
end
|