From 9ebbeb125d3a8fa5b118331e77ef37010638e71b Mon Sep 17 00:00:00 2001 From: Miles Gould Date: Fri, 25 Jan 2013 00:16:50 +0000 Subject: [PATCH 1/4] Sort crops case-insensitively in the plantings form. --- app/views/plantings/_form.html.haml | 2 +- spec/factories/crop.rb | 4 ++++ spec/views/plantings/_form.html.haml_spec.rb | 23 ++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 spec/views/plantings/_form.html.haml_spec.rb diff --git a/app/views/plantings/_form.html.haml b/app/views/plantings/_form.html.haml index 52c432fe7..8b2c1af53 100644 --- a/app/views/plantings/_form.html.haml +++ b/app/views/plantings/_form.html.haml @@ -8,7 +8,7 @@ .control-group = f.label 'What did you plant?', :class => 'control-label' - .controls= collection_select(:planting, :crop_id, Crop.all(:order => :system_name), :id, :system_name, :selected => @crop.id) + .controls= collection_select(:planting, :crop_id, Crop.order("lower(system_name) ASC").all, :id, :system_name, :selected => @crop.id) .control-group = f.label 'Where did you plant it?', :class => 'control-label' .controls= collection_select(:planting, :garden_id, diff --git a/spec/factories/crop.rb b/spec/factories/crop.rb index ae36699ba..e761a2f8e 100644 --- a/spec/factories/crop.rb +++ b/spec/factories/crop.rb @@ -30,6 +30,10 @@ FactoryGirl.define do system_name "Pear" end + factory :lowercasecrop do + system_name "ffrench bean" + end + end end diff --git a/spec/views/plantings/_form.html.haml_spec.rb b/spec/views/plantings/_form.html.haml_spec.rb new file mode 100644 index 000000000..944375ebc --- /dev/null +++ b/spec/views/plantings/_form.html.haml_spec.rb @@ -0,0 +1,23 @@ +require 'spec_helper' + +describe "plantings/_form" do + before(:each) do + @member = FactoryGirl.create(:member) + @garden = FactoryGirl.create(:garden, :owner => @member) + @crop = FactoryGirl.create(:tomato) + FactoryGirl.create(:lowercasecrop) + + @planting = FactoryGirl.create(:planting, + :garden => @garden, + :crop => @crop + ) + render + end + + context "logged in" do + it "orders crops alphabetically" do + rendered.should =~ /ffrench bean.*Tomato/m + end + end +end + From 8d2fe8809dd3c4f0abb7dc2008eb5233eb1d069e Mon Sep 17 00:00:00 2001 From: Miles Gould Date: Fri, 25 Jan 2013 11:10:37 +0000 Subject: [PATCH 2/4] Add an uppercase crop factory. Use it to test that crops are sorted alphabetically in the plantings form. --- spec/factories/crop.rb | 6 ++++++ spec/views/plantings/_form.html.haml_spec.rb | 7 ++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/spec/factories/crop.rb b/spec/factories/crop.rb index e761a2f8e..4ae2367d0 100644 --- a/spec/factories/crop.rb +++ b/spec/factories/crop.rb @@ -30,10 +30,16 @@ FactoryGirl.define do system_name "Pear" end + # This should have a name that is alphabetically earlier than :uppercase + # crop to ensure that the ordering tests work. factory :lowercasecrop do system_name "ffrench bean" end + factory :uppercasecrop do + system_name "Swiss chard" + end + end end diff --git a/spec/views/plantings/_form.html.haml_spec.rb b/spec/views/plantings/_form.html.haml_spec.rb index 944375ebc..6c81c85ba 100644 --- a/spec/views/plantings/_form.html.haml_spec.rb +++ b/spec/views/plantings/_form.html.haml_spec.rb @@ -4,8 +4,9 @@ describe "plantings/_form" do before(:each) do @member = FactoryGirl.create(:member) @garden = FactoryGirl.create(:garden, :owner => @member) - @crop = FactoryGirl.create(:tomato) - FactoryGirl.create(:lowercasecrop) + @uppercase = FactoryGirl.create(:uppercasecrop) + @lowercase = FactoryGirl.create(:lowercasecrop) + @crop = @lowercase # needed to render the form @planting = FactoryGirl.create(:planting, :garden => @garden, @@ -16,7 +17,7 @@ describe "plantings/_form" do context "logged in" do it "orders crops alphabetically" do - rendered.should =~ /ffrench bean.*Tomato/m + rendered.should =~ /#{@lowercase.system_name}.*#{@uppercase.system_name}/m end end end From dc1ab0912fcc47088bf8de5dd4c849886dd29eb2 Mon Sep 17 00:00:00 2001 From: Miles Gould Date: Fri, 25 Jan 2013 11:19:15 +0000 Subject: [PATCH 3/4] Order crops case-insensitively by default. --- app/models/crop.rb | 1 + spec/models/crop_spec.rb | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/app/models/crop.rb b/app/models/crop.rb index 75b2a1ffb..73be923aa 100644 --- a/app/models/crop.rb +++ b/app/models/crop.rb @@ -4,6 +4,7 @@ class Crop < ActiveRecord::Base attr_accessible :en_wikipedia_url, :system_name has_many :scientific_names has_many :plantings + default_scope order("lower(system_name) asc") def Crop.random @crop = Crop.offset(rand(Crop.count)).first diff --git a/spec/models/crop_spec.rb b/spec/models/crop_spec.rb index 36f645451..4716526ac 100644 --- a/spec/models/crop_spec.rb +++ b/spec/models/crop_spec.rb @@ -42,4 +42,12 @@ describe Crop do @rand_crop.system_name.should == 'Tomato' end end + + context 'ordering' do + it "should be sorted case-insensitively" do + uppercase = FactoryGirl.create(:uppercasecrop) + lowercase = FactoryGirl.create(:lowercasecrop) + Crop.first.should == lowercase + end + end end From 5be099bb64a49812597ec6e08dac9912eb1dc396 Mon Sep 17 00:00:00 2001 From: Miles Gould Date: Fri, 25 Jan 2013 11:21:32 +0000 Subject: [PATCH 4/4] Remove crop-ordering code from the Plantings form. --- app/views/plantings/_form.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/plantings/_form.html.haml b/app/views/plantings/_form.html.haml index 8b2c1af53..cdbb15531 100644 --- a/app/views/plantings/_form.html.haml +++ b/app/views/plantings/_form.html.haml @@ -8,7 +8,7 @@ .control-group = f.label 'What did you plant?', :class => 'control-label' - .controls= collection_select(:planting, :crop_id, Crop.order("lower(system_name) ASC").all, :id, :system_name, :selected => @crop.id) + .controls= collection_select(:planting, :crop_id, Crop.all, :id, :system_name, :selected => @crop.id) .control-group = f.label 'Where did you plant it?', :class => 'control-label' .controls= collection_select(:planting, :garden_id,