From fd651de7ea5957b07b5694b61ce112bf09dac6c1 Mon Sep 17 00:00:00 2001 From: Taylor Griffin Date: Sun, 24 Aug 2014 12:02:53 +1000 Subject: [PATCH] implement auto suggest on new seed page --- app/assets/javascripts/auto_suggest.js.coffee | 1 - app/views/seeds/_form.html.haml | 13 +++++---- spec/features/adding_a_seed_spec.rb | 28 +++++++++++++++++++ spec/features/harvesting_a_crop_spec.rb | 6 ++-- spec/features/planting_a_crop_spec.rb | 6 ++-- .../shared_examples/crop_suggest_spec.rb | 20 +++++++++++++ 6 files changed, 61 insertions(+), 13 deletions(-) create mode 100644 spec/features/adding_a_seed_spec.rb diff --git a/app/assets/javascripts/auto_suggest.js.coffee b/app/assets/javascripts/auto_suggest.js.coffee index c57a53643..9e76ad718 100644 --- a/app/assets/javascripts/auto_suggest.js.coffee +++ b/app/assets/javascripts/auto_suggest.js.coffee @@ -16,7 +16,6 @@ jQuery -> el.autocomplete minLength: 1, source: el.attr( 'data-source-url' ), - autoFocus: true, focus: ( event, ui ) -> el.val( ui.item.name ) id.val( ui.item.id ) diff --git a/app/views/seeds/_form.html.haml b/app/views/seeds/_form.html.haml index cb4ca579e..6200320a9 100644 --- a/app/views/seeds/_form.html.haml +++ b/app/views/seeds/_form.html.haml @@ -7,20 +7,21 @@ %li= msg .control-group - = f.label 'Crop:', :class => 'control-label' - .controls= collection_select(:seed, :crop_id, Crop.all, :id, :name, :selected => @seed.crop_id || @crop.id) + = f.label :crop, 'Crop:', :class => 'control-label' + .controls + = auto_suggest @seed, :crop .control-group - = f.label 'Quantity:', :class => 'control-label' + = f.label :quantity, 'Quantity:', :class => 'control-label' .controls = f.number_field :quantity, :class => 'input-small' .control-group - = f.label 'Plant before:', :class => 'control-label' + = f.label :plant_before, 'Plant before:', :class => 'control-label' .controls= f.text_field :plant_before, :value => @seed.plant_before ? @seed.plant_before.to_s(:ymd) : '', :class => 'add-datepicker' .control-group - = f.label 'Description:', :class => 'control-label' + = f.label :description, 'Description:', :class => 'control-label' .controls= f.text_area :description, :rows => 6 .control-group - = f.label 'Will trade:', :class => 'control-label' + = f.label :tradable_to, 'Will trade:', :class => 'control-label' .controls = f.select(:tradable_to, options_for_select(Seed::TRADABLE_TO_VALUES, :selected => @seed.tradable_to || 'nowhere')) diff --git a/spec/features/adding_a_seed_spec.rb b/spec/features/adding_a_seed_spec.rb new file mode 100644 index 000000000..018531ec5 --- /dev/null +++ b/spec/features/adding_a_seed_spec.rb @@ -0,0 +1,28 @@ +require 'spec_helper' + +feature "Harvesting a crop", :js => true do + let(:member) { FactoryGirl.create(:member) } + let!(:maize) { FactoryGirl.create(:maize) } + + background do + login_as(member) + visit '/seeds/new' + end + + it_behaves_like "crop suggest", "seed", "crop" + + scenario "Adding a new seed", :js => true do + fill_autocomplete "crop", :with => "m" + select_from_autocomplete "maize" + within "form#new_seed" do + fill_in "Quantity:", :with => 42 + fill_in "Plant before:", :with => "2014-06-15" + fill_in "Description", :with => "It's killer." + select "internationally", :from => "Will trade:" + click_button "Save" + end + + expect(page).to have_content "Successfully added maize seed to your stash" + end + +end \ No newline at end of file diff --git a/spec/features/harvesting_a_crop_spec.rb b/spec/features/harvesting_a_crop_spec.rb index 33366187d..46404edd2 100644 --- a/spec/features/harvesting_a_crop_spec.rb +++ b/spec/features/harvesting_a_crop_spec.rb @@ -1,15 +1,15 @@ require 'spec_helper' feature "Harvesting a crop", :js => true do - let(:member) { FactoryGirl.create(:member) } - let!(:maize) { FactoryGirl.create(:maize) } + let(:member) { FactoryGirl.create(:member) } + let!(:maize) { FactoryGirl.create(:maize) } background do login_as(member) visit '/harvests/new' end - it_behaves_like "crop suggest", "harvest" + it_behaves_like "crop suggest", "harvest", "crop" scenario "Creating a new harvest", :js => true do fill_autocomplete "crop", :with => "m" diff --git a/spec/features/planting_a_crop_spec.rb b/spec/features/planting_a_crop_spec.rb index 095ef9c13..ad87a35ca 100644 --- a/spec/features/planting_a_crop_spec.rb +++ b/spec/features/planting_a_crop_spec.rb @@ -1,15 +1,15 @@ require 'spec_helper' feature "Planting a crop", :js => true do - let(:member) { FactoryGirl.create(:member) } - let!(:maize) { FactoryGirl.create(:maize) } + let(:member) { FactoryGirl.create(:member) } + let!(:maize) { FactoryGirl.create(:maize) } background do login_as(member) visit '/plantings/new' end - it_behaves_like "crop suggest", "planting" + it_behaves_like "crop suggest", "planting", "crop" scenario "Creating a new planting", :js => true do fill_autocomplete "crop", :with => "m" diff --git a/spec/features/shared_examples/crop_suggest_spec.rb b/spec/features/shared_examples/crop_suggest_spec.rb index cf4146920..a0edd5322 100644 --- a/spec/features/shared_examples/crop_suggest_spec.rb +++ b/spec/features/shared_examples/crop_suggest_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' shared_examples "crop suggest" do |resource| let!(:popcorn) { FactoryGirl.create(:popcorn) } let!(:pear) { FactoryGirl.create(:pear) } + let!(:tomato) { FactoryGirl.create(:tomato) } + let!(:roma) { FactoryGirl.create(:roma) } scenario "Typing in the crop name displays suggestions" do within "form#new_#{resource}" do @@ -33,4 +35,22 @@ shared_examples "crop suggest" do |resource| expect(find_field("crop").value).to eq("p") end + scenario "Searching for a crop casts a wide net on results" do + within "form#new_#{resource}" do + fill_autocomplete "crop", :with => "to" + end + + expect(page).to have_content("tomato") + expect(page).to have_content("roma tomato") + end + + scenario "Submitting a crop that doesn't exist in the database produces a meaningful error" do + within "form#new_#{resource}" do + fill_autocomplete "crop", :with => "Ryan Gosling" + click_button "Save" + end + + expect(page).to have_content("That's not in our database.") + end + end \ No newline at end of file