From 8a783bbb7dd885c0c0451278af357e981c63bb66 Mon Sep 17 00:00:00 2001 From: stveep Date: Sun, 4 Mar 2018 10:14:39 +0000 Subject: [PATCH] PR changes: extract SQL in methods to scopes, add case insensitivity to test for sorting --- app/mailers/producer_mailer.rb | 4 ++-- app/models/spree/line_item_decorator.rb | 8 ++++++-- spec/mailers/producer_mailer_spec.rb | 4 ++-- spec/models/spree/line_item_spec.rb | 6 ++++++ 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/mailers/producer_mailer.rb b/app/mailers/producer_mailer.rb index 0bf05b787d..ad7569dad2 100644 --- a/app/mailers/producer_mailer.rb +++ b/app/mailers/producer_mailer.rb @@ -32,8 +32,8 @@ class ProducerMailer < Spree::BaseMailer def line_items_from(order_cycle, producer) Spree::LineItem. - joins(order: :order_cycle, variant: :product). - where('order_cycles.id = ?', order_cycle). + from_order_cycle(order_cycle). + sorted_by_name_and_unit_value. merge(Spree::Product.in_supplier(producer)). merge(Spree::Order.by_state('complete')) end diff --git a/app/models/spree/line_item_decorator.rb b/app/models/spree/line_item_decorator.rb index 66f9504648..7ba0735a88 100644 --- a/app/models/spree/line_item_decorator.rb +++ b/app/models/spree/line_item_decorator.rb @@ -34,8 +34,12 @@ Spree::LineItem.class_eval do # Find line items that are from order sorted by variant name and unit value scope :sorted_by_name_and_unit_value, joins(variant: :product). - reorder('lower(spree_products.name) asc, lower(spree_variants.display_name) asc, spree_variants.unit_value asc'). - select('spree_line_items.*') + reorder('lower(spree_products.name) asc, lower(spree_variants.display_name) asc, spree_variants.unit_value asc') + + scope :from_order_cycle, lambda {|order_cycle| + joins(order: :order_cycle). + where('order_cycles.id = ?', order_cycle) + } scope :supplied_by, lambda { |enterprise| joins(:product). diff --git a/spec/mailers/producer_mailer_spec.rb b/spec/mailers/producer_mailer_spec.rb index 3441da1a6e..5fd1fc172d 100644 --- a/spec/mailers/producer_mailer_spec.rb +++ b/spec/mailers/producer_mailer_spec.rb @@ -19,7 +19,7 @@ describe ProducerMailer do let(:p1) { create(:product, name: "Zebra", price: 12.34, supplier: s1, tax_category: tax_category) } let(:p2) { create(:product, name: "Aardvark", price: 23.45, supplier: s2) } let(:p3) { create(:product, name: "Banana", price: 34.56, supplier: s1) } - let(:p4) { create(:product, name: "Coffee", price: 45.67, supplier: s1) } + let(:p4) { create(:product, name: "coffee", price: 45.67, supplier: s1) } let(:p5) { create(:product, name: "Daffodil", price: 56.78, supplier: s1) } let(:order_cycle) { create(:simple_order_cycle) } let!(:incoming_exchange) { order_cycle.exchanges.create! sender: s1, receiver: d1, incoming: true, receival_instructions: 'Outside shed.' } @@ -72,7 +72,7 @@ describe ProducerMailer do end it "contains an aggregated list of produce in alphabetical order" do - mail.body.encoded.should match(/Coffee.+\n.+Zebra/) + expect(mail.body.encoded).to match(/coffee.+\n.+Zebra/) body_lines_including(mail, p1.name).each do |line| line.should include 'QTY: 3' line.should include '@ $10.00 = $30.00' diff --git a/spec/models/spree/line_item_spec.rb b/spec/models/spree/line_item_spec.rb index ccda41c98b..7109322b1f 100644 --- a/spec/models/spree/line_item_spec.rb +++ b/spec/models/spree/line_item_spec.rb @@ -26,6 +26,8 @@ module Spree let(:li5) { create(:line_item, order: o, product: p4, variant: v3) } let(:li6) { create(:line_item, order: o, product: p4, variant: v4) } + let(:oc_order) { create :order_with_totals_and_distribution } + it "finds line items for products supplied by a particular enterprise" do LineItem.supplied_by(s1).should == [li1] LineItem.supplied_by(s2).should == [li2] @@ -56,6 +58,10 @@ module Spree it "finds line items sorted by name and unit_value" do expect(o.line_items.sorted_by_name_and_unit_value).to eq([li6,li5,li4,li3]) end + + it "finds line items from a given order cycle" do + expect(LineItem.from_order_cycle(oc_order.order_cycle).first.id).to eq oc_order.line_items.first.id + end end describe "capping quantity at stock level" do