diff --git a/app/services/invoice_renderer.rb b/app/services/invoice_renderer.rb index 2f8663d24c..bbb1886a5b 100644 --- a/app/services/invoice_renderer.rb +++ b/app/services/invoice_renderer.rb @@ -1,4 +1,8 @@ class InvoiceRenderer + def initialize(renderer = ApplicationController.new) + @renderer = renderer + end + def render_to_string(order) renderer.instance_variable_set(:@order, order) renderer.render_to_string(args(order)) @@ -15,9 +19,7 @@ class InvoiceRenderer private - def renderer - @renderer ||= ApplicationController.new - end + attr_reader :renderer def invoice_template if Spree::Config.invoice_style2? diff --git a/spec/services/invoice_renderer_spec.rb b/spec/services/invoice_renderer_spec.rb index 87e654eb3f..d78f5e97a8 100644 --- a/spec/services/invoice_renderer_spec.rb +++ b/spec/services/invoice_renderer_spec.rb @@ -4,19 +4,46 @@ require 'spec_helper' describe InvoiceRenderer do let(:service) { described_class.new } - - it "creates a PDF invoice with two different templates" do + let(:order) do order = create(:completed_order_with_fees) order.bill_address = order.ship_address order.save! + order + end - result = service.render_to_string(order) - expect(result).to match /^%PDF/ + context 'when invoice_style2 is configured' do + before { allow(Spree::Config).to receive(:invoice_style2?).and_return(true) } - allow(Spree::Config).to receive(:invoice_style2?).and_return true + it 'uses the invoice2 template' do + renderer = instance_double(ApplicationController) + expect(renderer) + .to receive(:render_to_string) + .with(include(template: 'spree/admin/orders/invoice2')) - alternative = service.render_to_string(order) - expect(alternative).to match /^%PDF/ - expect(alternative).to_not eq result + described_class.new(renderer).render_to_string(order) + end + + it 'creates a PDF invoice' do + result = service.render_to_string(order) + expect(result).to match /^%PDF/ + end + end + + context 'when invoice_style2 is not configured' do + before { allow(Spree::Config).to receive(:invoice_style2?).and_return(false) } + + it 'uses the invoice template' do + renderer = instance_double(ApplicationController) + expect(renderer) + .to receive(:render_to_string) + .with(include(template: 'spree/admin/orders/invoice')) + + described_class.new(renderer).render_to_string(order) + end + + it 'creates a PDF invoice' do + result = service.render_to_string(order) + expect(result).to match /^%PDF/ + end end end