Conflicts:
	spec/views/crops/show.html.haml_spec.rb
This commit is contained in:
Skud
2013-07-23 19:35:31 +10:00
36 changed files with 654 additions and 39 deletions

View File

@@ -0,0 +1,11 @@
require 'spec_helper'
describe SeedsController do
describe "GET index" do
it "picks up owner from params" do
owner = FactoryGirl.create(:member)
get :index, {:owner_id => owner.id}
assigns(:owner).should eq(owner)
end
end
end

16
spec/factories/seeds.rb Normal file
View File

@@ -0,0 +1,16 @@
# Read about factories at https://github.com/thoughtbot/factory_girl
FactoryGirl.define do
factory :seed do
owner
crop
description "MyText"
quantity 1
plant_before "2013-07-15"
factory :tradable_seed do
tradable true
tradable_to "locally"
end
end
end

28
spec/models/seed_spec.rb Normal file
View File

@@ -0,0 +1,28 @@
require 'spec_helper'
describe Seed do
before(:each) do
@seed = FactoryGirl.build(:seed)
end
it 'should save a basic seed' do
@seed.save.should be_true
end
context 'tradable' do
it 'all three valid tradable_to values should work' do
['locally', 'nationally', 'internationally', nil, ''].each do |t|
@seed = FactoryGirl.build(:seed, :tradable_to => t)
@seed.should be_valid
end
end
it 'should refuse invalid tradable_to values' do
@seed = FactoryGirl.build(:seed, :tradable_to => 'not valid')
@seed.should_not be_valid
@seed.errors[:tradable_to].should include("You may only trade seed locally, nationally, or internationally")
end
end
end

View File

@@ -0,0 +1,11 @@
require 'spec_helper'
describe "Seeds" do
describe "GET /seeds" do
it "works! (now write some real specs)" do
# Run the generator again with the --webrat flag if you want to use webrat methods/matchers
get seeds_path
response.status.should be(200)
end
end
end

View File

@@ -0,0 +1,35 @@
require "spec_helper"
describe SeedsController do
describe "routing" do
it "routes to #index" do
get("/seeds").should route_to("seeds#index")
end
it "routes to #new" do
get("/seeds/new").should route_to("seeds#new")
end
it "routes to #show" do
get("/seeds/1").should route_to("seeds#show", :id => "1")
end
it "routes to #edit" do
get("/seeds/1/edit").should route_to("seeds#edit", :id => "1")
end
it "routes to #create" do
post("/seeds").should route_to("seeds#create")
end
it "routes to #update" do
put("/seeds/1").should route_to("seeds#update", :id => "1")
end
it "routes to #destroy" do
delete("/seeds/1").should route_to("seeds#destroy", :id => "1")
end
end
end

View File

@@ -28,7 +28,6 @@ describe "crops/show" do
it "links to the right crop in the planting link" do
render
assert_select("a[href=#{new_planting_path}?crop_id=#{@crop.id}]")
end
context "has plantings" do
before(:each) do
@@ -116,6 +115,29 @@ describe "crops/show" do
end
it 'tells you to sign in/sign up' do
render
rendered.should contain 'Sign in or sign up to plant'
rendered.should contain 'Sign in or sign up to add seed'
end
context 'logged in' do
before(:each) do
@member = FactoryGirl.create(:member)
sign_in @member
controller.stub(:current_user) { @member }
render
end
it "shows a plant this button" do
rendered.should contain "Plant this"
end
it "links to the right crop in the planting link" do
assert_select("a[href=#{new_planting_path}?crop_id=#{@crop.id}]")
end
end
context "logged in and crop wrangler" do
before(:each) do

View File

@@ -43,6 +43,7 @@ describe 'home/index.html.haml', :type => "view" do
:garden => @member.gardens.first
)
assign(:plantings, [@planting])
@seed = FactoryGirl.create(:seed, :owner => @member)
@forum = FactoryGirl.create(:forum, :owner => @member)
@post = FactoryGirl.create(:post, :author => @member)
assign(:posts, [@post])
@@ -62,6 +63,11 @@ describe 'home/index.html.haml', :type => "view" do
assert_select "a[href=#{url_for(@member.gardens.first)}]", "Garden"
end
it 'shows seeds' do
rendered.should contain "Your seed stash"
rendered.should contain "1 variety"
end
it 'shows account type' do
rendered.should contain "Free account"
end

View File

@@ -5,7 +5,8 @@ describe "plantings/show" do
@garden = FactoryGirl.create(:garden, :owner => @member)
@crop = FactoryGirl.create(:tomato)
@planting = assign(:planting,
FactoryGirl.create(:planting, :garden => @garden, :crop => @crop)
FactoryGirl.create(:planting, :garden => @garden, :crop => @crop,
:planted_from => 'cutting')
)
end
@@ -45,7 +46,7 @@ describe "plantings/show" do
it "shows planted_from" do
render
rendered.should contain 'Planted from:'
rendered.should contain 'seed'
rendered.should contain 'cutting'
end
it "doesn't show planted_from if blank" do
@@ -53,7 +54,7 @@ describe "plantings/show" do
@p.save
render
rendered.should_not contain 'Planted from:'
rendered.should_not contain 'seed'
rendered.should_not contain 'cutting'
end
end

View File

@@ -0,0 +1,23 @@
require 'spec_helper'
describe "seeds/edit" do
before(:each) do
@member = FactoryGirl.create(:member)
sign_in @member
controller.stub(:current_user) { @member }
@seed = FactoryGirl.create(:seed, :owner => @member)
end
it "renders the edit seed form" do
render
# Run the generator again with the --webrat flag if you want to use webrat matchers
assert_select "form", :action => seeds_path(@seed), :method => "post" do
assert_select "select#seed_crop_id", :name => "seed[crop_id]"
assert_select "textarea#seed_description", :name => "seed[description]"
assert_select "input#seed_quantity", :name => "seed[quantity]"
assert_select "input#seed_tradable", :name => "seed[tradable]"
assert_select "select#seed_tradable_to", :name => "seed[tradable_to]"
end
end
end

View File

@@ -0,0 +1,35 @@
require 'spec_helper'
describe "seeds/index" do
before(:each) do
@member = FactoryGirl.create(:member)
sign_in @member
controller.stub(:current_user) { @member }
@seed1 = FactoryGirl.create(:seed, :owner => @member)
assign(:seeds, [@seed1, @seed1])
end
it "renders a list of seeds" do
render
assert_select "tr>td", :text => @seed1.crop.system_name, :count => 2
assert_select "tr>td", :text => @seed1.owner.login_name, :count => 2
assert_select "tr>td", :text => @seed1.quantity.to_s, :count => 2
end
context "tradable" do
before(:each) do
@owner = FactoryGirl.create(:london_member)
@seed1 = FactoryGirl.create(:tradable_seed, :owner => @owner)
assign(:seeds, [@seed1, @seed1])
render
end
it "shows tradable seeds" do
assert_select "tr>td", :text => @seed1.tradable_to, :count => 2
end
it "shows location of seed owner" do
assert_select "tr>td", :text => @owner.location, :count => 2
end
end
end

View File

@@ -0,0 +1,49 @@
require 'spec_helper'
describe "seeds/new" do
before(:each) do
@member = FactoryGirl.create(:member)
sign_in @member
controller.stub(:current_user) { @member }
@seed1 = FactoryGirl.create(:seed, :owner => @member)
assign(:seed, @seed1)
end
it "renders new seed form" do
render
assert_select "form", :action => seeds_path, :method => "post" do
assert_select "select#seed_crop_id", :name => "seed[crop_id]"
assert_select "textarea#seed_description", :name => "seed[description]"
assert_select "input#seed_quantity", :name => "seed[quantity]"
assert_select "input#seed_tradable", :name => "seed[tradable]"
assert_select "select#seed_tradable_to", :name => "seed[tradable_to]"
end
end
it 'reminds you to set your location' do
render
rendered.should contain "Don't forget to set your location."
assert_select "a", :text => "set your location"
end
context 'member has location' do
before(:each) do
@member = FactoryGirl.create(:london_member)
sign_in @member
controller.stub(:current_user) { @member }
@seed1 = FactoryGirl.create(:seed, :owner => @member)
assign(:seed, @seed1)
end
it 'shows the location' do
render
rendered.should contain "from #{@member.location}."
end
it 'links to change location' do
render
assert_select "a", :text => "Change your location."
end
end
end

View File

@@ -0,0 +1,63 @@
require 'spec_helper'
describe "seeds/show" do
before(:each) do
controller.stub(:current_user) { nil }
@seed = FactoryGirl.create(:seed)
assign(:seed, @seed)
end
it "renders attributes in <p>" do
render
rendered.should contain @seed.crop.system_name
end
context "tradable" do
before(:each) do
@owner = FactoryGirl.create(:london_member)
assign(:seed, FactoryGirl.create(:tradable_seed,
:owner => @owner))
# note current_member is not the owner of this seed
@member = FactoryGirl.create(:member)
sign_in @member
controller.stub(:current_user) { @member }
end
it "shows tradable attributes" do
render
rendered.should contain "Tradable: Yes"
rendered.should contain "Will trade to: locally"
end
it "shows location of seed owner" do
render
rendered.should contain @owner.location
end
context 'with no location' do
before(:each) do
@owner = FactoryGirl.create(:member) # no location
sign_in @owner
controller.stub(:current_user) { @owner }
assign(:seed, FactoryGirl.create(:tradable_seed, :owner => @owner))
end
it 'says "from unspecified location"' do
render
rendered.should contain "(from unspecified location)"
end
it "links to profile to set location" do
render
assert_select "a[href=#{url_for(edit_member_registration_path)}]", :text => "Set Location"
end
end
it "shows button to send message" do
render
rendered.should contain "Request seeds"
end
end
end