diff --git a/app/models/garden.rb b/app/models/garden.rb index 8e17873ce..ecacfc17f 100644 --- a/app/models/garden.rb +++ b/app/models/garden.rb @@ -7,6 +7,8 @@ class Garden < ActiveRecord::Base has_many :plantings, :order => 'created_at DESC' has_many :crops, :through => :plantings + default_scope order("lower(name) asc") + def garden_slug "#{owner.login_name}-#{name}".downcase.gsub(' ', '-') end diff --git a/app/views/plantings/_form.html.haml b/app/views/plantings/_form.html.haml index cdbb15531..b7fcc6b6e 100644 --- a/app/views/plantings/_form.html.haml +++ b/app/views/plantings/_form.html.haml @@ -8,11 +8,11 @@ .control-group = f.label 'What did you plant?', :class => 'control-label' - .controls= collection_select(:planting, :crop_id, Crop.all, :id, :system_name, :selected => @crop.id) + .controls= collection_select(:planting, :crop_id, Crop.all, :id, :system_name, :selected => @planting.crop_id || @crop.id) .control-group = f.label 'Where did you plant it?', :class => 'control-label' .controls= collection_select(:planting, :garden_id, - Garden.where(:owner_id => current_member), :id, :name, :selected => @garden.id) + Garden.where(:owner_id => current_member), :id, :name, :selected => @planting.garden_id || @garden.id) .control-group = f.label 'When?', :class => 'control-label' .controls= f.date_select :planted_at, options = { :include_blank => true }, html_options = { :class => "span1" } diff --git a/spec/factories/garden.rb b/spec/factories/garden.rb index 12d95040f..d699e5e58 100644 --- a/spec/factories/garden.rb +++ b/spec/factories/garden.rb @@ -3,5 +3,15 @@ FactoryGirl.define do name 'Springfield Community Garden' description "This is a **totally** cool garden" owner + + # the following are used for testing alphabetical ordering + factory :garden_a do + name 'A garden starting with A' + end + + factory :garden_z do + name 'Zzzz this garden makes me sleepy' + end + end end diff --git a/spec/models/garden_spec.rb b/spec/models/garden_spec.rb index 40b17cc3a..58dc4a591 100644 --- a/spec/models/garden_spec.rb +++ b/spec/models/garden_spec.rb @@ -59,4 +59,12 @@ describe Garden do end end + context 'ordering' do + it "should be sorted alphabetically" do + z = FactoryGirl.create(:garden_z) + a = FactoryGirl.create(:garden_a) + Garden.first.should == a + end + end + end diff --git a/spec/views/plantings/edit.html.haml_spec.rb b/spec/views/plantings/edit.html.haml_spec.rb index 15f754d48..d5b12e3b9 100644 --- a/spec/views/plantings/edit.html.haml_spec.rb +++ b/spec/views/plantings/edit.html.haml_spec.rb @@ -11,11 +11,17 @@ describe "plantings/edit" do :email => 'wrong@example.com' ) - @crop = FactoryGirl.create(:crop) - @garden = FactoryGirl.create(:garden, :owner => @right_member) + # creating two crops to make sure that the correct one is selected + # in the form. + @tomato = FactoryGirl.create(:tomato) + @maize = FactoryGirl.create(:maize) + + # and likewise for gardens + @garden = FactoryGirl.create(:garden_z, :owner => @right_member) + @garden2 = FactoryGirl.create(:garden_a, :owner => @right_member) @planting = assign(:planting, - FactoryGirl.create(:planting, :garden => @garden, :crop => @crop) + FactoryGirl.create(:planting, :garden => @garden, :crop => @tomato) ) end @@ -47,11 +53,20 @@ describe "plantings/edit" do it "renders the edit planting form" do assert_select "form", :action => plantings_path(@planting), :method => "post" do - assert_select "select#planting_garden_id", :name => "planting[garden_id]" - assert_select "select#planting_crop_id", :name => "planting[crop_id]" assert_select "input#planting_quantity", :name => "planting[quantity]" assert_select "textarea#planting_description", :name => "planting[description]" end end + + it "chooses the right crop" do + assert_select "select#planting_crop_id", + :html => /option value="#{@tomato.id}" selected="selected"/ + end + + it "chooses the right garden" do + assert_select "select#planting_garden_id", + :html => /option value="#{@garden.id}" selected="selected"/ + end + end end diff --git a/spec/views/plantings/new.html.haml_spec.rb b/spec/views/plantings/new.html.haml_spec.rb index c9ec1aeef..b97e54187 100644 --- a/spec/views/plantings/new.html.haml_spec.rb +++ b/spec/views/plantings/new.html.haml_spec.rb @@ -5,12 +5,15 @@ describe "plantings/new" do @member = FactoryGirl.create(:member) # create gardens and crops to populate dropdowns - @garden1 = FactoryGirl.create(:garden, :owner => @member, :name => 'Garden1') - @garden2 = FactoryGirl.create(:garden, :owner => @member, :name => 'Garden2') + @garden_a = FactoryGirl.create(:garden, :owner => @member) + @garden_z = FactoryGirl.create(:garden, :owner => @member) @crop1 = FactoryGirl.create(:tomato) @crop2 = FactoryGirl.create(:maize) - assign(:planting, FactoryGirl.create(:planting, :garden => @garden1)) + assign(:planting, FactoryGirl.create(:planting, + :garden => @garden_a, + :crop => @crop2 + )) end @@ -24,8 +27,9 @@ describe "plantings/new" do context "logged in" do before(:each) do sign_in @member + assign(:planting, Planting.new()) assign(:crop, @crop2) - assign(:garden, @garden2) + assign(:garden, @garden_z) render end @@ -45,7 +49,7 @@ describe "plantings/new" do it "selects a garden given in a param" do assert_select "select#planting_garden_id", - :html => /option value="#{@garden2.id}" selected="selected"/ + :html => /option value="#{@garden_z.id}" selected="selected"/ end end end