diff --git a/app/helpers/spree/admin/orders_helper_decorator.rb b/app/helpers/spree/admin/orders_helper_decorator.rb index b3623c5721..63a8b925a5 100644 --- a/app/helpers/spree/admin/orders_helper_decorator.rb +++ b/app/helpers/spree/admin/orders_helper_decorator.rb @@ -5,7 +5,7 @@ module Spree @order ||= order links = [] links << edit_order_link unless action_name == "edit" - links << complete_order_links if @order.complete? + links.concat(complete_order_links) if @order.complete? links << ship_order_link if @order.ready_to_ship? links << cancel_order_link if @order.can_cancel? links @@ -16,8 +16,8 @@ module Spree def complete_order_links complete_order_links = [] complete_order_links << resend_confirmation_link - complete_order_links << invoice_links - complete_order_links << ticket_links + complete_order_links.concat(invoice_links) + complete_order_links.concat(ticket_links) complete_order_links end @@ -34,7 +34,7 @@ module Spree end def ticket_links - return [] unless Spree::Config.enable_receipt_printing? + return [] unless Spree::Config[:enable_receipt_printing?] [print_ticket_link, select_ticket_printer_link] end diff --git a/spec/helpers/spree/admin/orders_helper_spec.rb b/spec/helpers/spree/admin/orders_helper_spec.rb new file mode 100644 index 0000000000..deaf4c6daa --- /dev/null +++ b/spec/helpers/spree/admin/orders_helper_spec.rb @@ -0,0 +1,102 @@ +require 'spec_helper' + +describe Spree::Admin::OrdersHelper, type: :helper do + describe "#orders_links" do + let(:order) { double(:order) } + let(:distributor) { double(:enterprise) } + + around do |example| + original_invoices_setting = Spree::Config[:enable_invoices?] + original_tickets_setting = Spree::Config[:enable_receipt_printing?] + example.run + Spree::Config[:enable_invoices?] = original_invoices_setting + Spree::Config[:enable_receipt_printing?] = original_tickets_setting + end + + before do + allow(order).to receive(:complete?) { false } + allow(order).to receive(:ready_to_ship?) { false } + allow(order).to receive(:can_cancel?) { false } + Spree::Config[:enable_invoices?] = false + Spree::Config[:enable_receipt_printing?] = false + end + + it "returns only edit order link when all conditions are set to false" do + links = helper.order_links(order) + + expect(links.size).to eq 1 + expect(links.first[:name]).to eq "Edit Order" + end + + context "complete order" do + before do + allow(order).to receive(:complete?) { true } + end + + it "returns edit order and resend confirmation links" do + links = helper.order_links(order) + + expect(links.size).to eq 2 + expect(links[0][:name]).to eq "Edit Order" + expect(links[1][:name]).to eq "Resend Confirmation" + end + + context "that can be canceled" do + before do + allow(order).to receive(:can_cancel?) { true } + allow(order).to receive(:number) { 111 } + end + + it "adds cancel order link" do + links = helper.order_links(order) + + expect(links.size).to eq 3 + expect(links[2][:name]).to eq "Cancel Order" + end + end + + context "that can be shipped" do + before do + allow(order).to receive(:ready_to_ship?) { true } + end + + it "adds ship order link" do + links = helper.order_links(order) + + expect(links.size).to eq 3 + expect(links[2][:name]).to eq "Ship Order" + end + end + + context "with invoices enabled" do + before do + Spree::Config[:enable_invoices?] = true + allow(order).to receive(:distributor) { distributor } + allow(distributor).to receive(:can_invoice?) { true } + end + + it "adds send and print invoice links" do + links = helper.order_links(order) + + expect(links.size).to eq 4 + expect(links[2][:name]).to eq "Send Invoice" + expect(links[3][:name]).to eq "Print Invoice" + end + end + + context "with tickets enabled" do + before do + Spree::Config[:enable_receipt_printing?] = true + end + + it "adds print and select ticket links" do + links = helper.order_links(order) + + expect(links.size).to eq 4 + expect(links[2][:name]).to eq "Print Ticket" + expect(links[3][:name]).to eq "Select printer for tickets" + end + end + end + end +end