mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-28 21:07:16 +00:00
100 lines
3.2 KiB
Ruby
100 lines
3.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "system_helper"
|
|
|
|
describe '
|
|
As an administrator
|
|
I want to print a ticket for an order
|
|
' do
|
|
include CheckoutHelper
|
|
include AuthenticationHelper
|
|
include ActionView::Helpers::NumberHelper
|
|
include WebHelper
|
|
|
|
context "as an enterprise manager" do
|
|
let!(:shipping_method) { create(:shipping_method, distributors: [distributor]) }
|
|
let!(:distributor) { create(:distributor_enterprise) }
|
|
|
|
let!(:order) do
|
|
create(:order_with_taxes, distributor: distributor, ship_address: create(:address),
|
|
product_price: 110, tax_rate_amount: 0.1,
|
|
tax_rate_name: "Tax 1").tap do |order|
|
|
order.create_tax_charge!
|
|
order.update_shipping_fees!
|
|
end
|
|
end
|
|
|
|
before do
|
|
@enterprise_user = create(:user)
|
|
@enterprise_user.enterprise_roles.build(enterprise: distributor).save
|
|
|
|
login_as @enterprise_user
|
|
|
|
Spree::Config[:enable_receipt_printing?] = true
|
|
end
|
|
|
|
describe "viewing the edit page" do
|
|
it "can print an order's ticket" do
|
|
visit spree.edit_admin_order_path(order)
|
|
|
|
find("#links-dropdown .ofn-drop-down").click
|
|
|
|
ticket_window = window_opened_by do
|
|
within('#links-dropdown') do
|
|
click_link('Print Ticket')
|
|
end
|
|
end
|
|
|
|
within_window ticket_window do
|
|
accept_alert do
|
|
# The JS code needs time to load but there's no visual indicator
|
|
# we can wait for.
|
|
print_data = nil
|
|
wait_until do
|
|
print_data = page.evaluate_script('printData')
|
|
rescue Ferrum::JavaScriptError
|
|
false
|
|
end
|
|
|
|
elements_in_print_data = [
|
|
order.distributor.name,
|
|
order.distributor.address.address_part1,
|
|
order.distributor.address.address_part2,
|
|
order.distributor.contact.email, order.number,
|
|
line_items_in_print_data,
|
|
adjustments_in_print_data,
|
|
order.display_total.format(with_currency: false),
|
|
taxes_in_print_data,
|
|
display_checkout_total_less_tax(order).format(with_currency: false)
|
|
]
|
|
expect(print_data.join).to include(*elements_in_print_data.flatten)
|
|
end
|
|
end
|
|
end
|
|
|
|
def line_items_in_print_data
|
|
order.line_items.map { |line_item|
|
|
[line_item.quantity.to_s,
|
|
line_item.product.name,
|
|
line_item.single_display_amount_with_adjustments.format(symbol: false,
|
|
with_currency: false),
|
|
line_item.display_amount_with_adjustments.format(symbol: false, with_currency: false)]
|
|
}
|
|
end
|
|
|
|
def adjustments_in_print_data
|
|
checkout_adjustments_for(order, exclude: [:line_item]).
|
|
reject { |a| a.amount.zero? }.
|
|
map do |adjustment|
|
|
[raw(adjustment.label),
|
|
display_adjustment_amount(adjustment).format(symbol: false, with_currency: false)]
|
|
end
|
|
end
|
|
|
|
def taxes_in_print_data
|
|
[["10.0%", "$11.00"]]
|
|
end
|
|
end
|
|
end
|
|
end
|