diff --git a/Gemfile b/Gemfile index b4ff013a0..302669d18 100644 --- a/Gemfile +++ b/Gemfile @@ -124,4 +124,5 @@ group :development, :test do gem 'webrat' # provides HTML matchers for view tests gem 'factory_girl_rails', '~> 4.0' # for creating test data gem 'coveralls', require: false # coverage analysis + gem 'capybara' # integration tests end diff --git a/Gemfile.lock b/Gemfile.lock index e2bd35b31..6095c5556 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -73,6 +73,12 @@ GEM railties (>= 3.0) builder (3.0.4) cancan (1.6.10) + capybara (2.3.0) + mime-types (>= 1.16) + nokogiri (>= 1.3.3) + rack (>= 1.0.0) + rack-test (>= 0.5.4) + xpath (~> 2.0) chunky_png (1.3.1) coderay (1.1.0) coffee-rails (3.2.2) @@ -277,6 +283,8 @@ GEM rack (>= 1.0) rack-test (>= 0.5.3) will_paginate (3.0.5) + xpath (2.0.0) + nokogiri (~> 1.3) PLATFORMS ruby @@ -290,6 +298,7 @@ DEPENDENCIES bootstrap-datepicker-rails bundler (>= 1.1.5) cancan + capybara coffee-rails (~> 3.2.1) compass-rails (~> 1.0.3) coveralls diff --git a/app/assets/javascripts/account_types.js.coffee b/app/assets/javascripts/account_types.js.coffee deleted file mode 100644 index 761567942..000000000 --- a/app/assets/javascripts/account_types.js.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/controllers/crops_controller.rb b/app/controllers/crops_controller.rb index ae38b2817..7cd37f576 100644 --- a/app/controllers/crops_controller.rb +++ b/app/controllers/crops_controller.rb @@ -31,10 +31,17 @@ class CropsController < ApplicationController end end + def wrangler_index + @crop_wranglers = Role.crop_wranglers + respond_to do |format| + format.html + end + end + # GET /crops/wrangle def wrangle @crops = Crop.recent.paginate(:page => params[:page]) - + @crop_wranglers = Role.crop_wranglers respond_to do |format| format.html end diff --git a/app/models/role.rb b/app/models/role.rb index f05ea0e3a..c959f3bd3 100644 --- a/app/models/role.rb +++ b/app/models/role.rb @@ -3,4 +3,8 @@ class Role < ActiveRecord::Base friendly_id :name, use: :slugged attr_accessible :description, :name, :members, :slug has_and_belongs_to_many :members + + def self.crop_wranglers + Role.where(slug: 'crop-wrangler').try(:first).try(:members) + end end diff --git a/app/views/crops/wrangle.html.haml b/app/views/crops/wrangle.html.haml index 3fb3ae381..b26f29fc9 100644 --- a/app/views/crops/wrangle.html.haml +++ b/app/views/crops/wrangle.html.haml @@ -8,6 +8,13 @@ %li= link_to "Full crop hierarchy", crops_hierarchy_path %li= link_to "Add Crop", new_crop_path +%div.crop_wranglers + %h2 Crop Wranglers: + %ul + - @crop_wranglers.each do |crop_wrangler| + %li.crop_wrangler + = link_to crop_wrangler.login_name, crop_wrangler + %h2 Recently added crops %div.pagination diff --git a/spec/controllers/crops_controller_spec.rb b/spec/controllers/crops_controller_spec.rb index dc2eee23d..997aa71a9 100644 --- a/spec/controllers/crops_controller_spec.rb +++ b/spec/controllers/crops_controller_spec.rb @@ -16,6 +16,7 @@ describe CropsController do get :wrangle response.should be_success response.should render_template("crops/wrangle") + expect(assigns[:crop_wranglers]).to eq(Role.crop_wranglers) end end diff --git a/spec/factories/member.rb b/spec/factories/member.rb index b3d2782a7..bb4523a33 100644 --- a/spec/factories/member.rb +++ b/spec/factories/member.rb @@ -60,6 +60,7 @@ FactoryGirl.define do factory :crop_wrangling_member do roles { [ FactoryGirl.create(:crop_wrangler) ] } + sequence(:login_name) {|n| "wrangler#{n}"} end factory :invalid_member_shortname do diff --git a/spec/factories/roles.rb b/spec/factories/roles.rb index ace5b57b1..e169cf86e 100644 --- a/spec/factories/roles.rb +++ b/spec/factories/roles.rb @@ -10,7 +10,7 @@ FactoryGirl.define do end factory :crop_wrangler do - name "crop wrangler" + name "Crop Wrangler" description "they wrangle crops" end end diff --git a/spec/features/crop_wranglers_spec.rb b/spec/features/crop_wranglers_spec.rb new file mode 100644 index 000000000..bf5957d0b --- /dev/null +++ b/spec/features/crop_wranglers_spec.rb @@ -0,0 +1,30 @@ +require 'spec_helper' + +feature "crop wranglers" do + context "signed in user" do + let(:crop_wrangler_role) { FactoryGirl.create :crop_wrangler } + let!(:crop_wranglers) { FactoryGirl.create_list(:crop_wrangling_member, 3, roles: [crop_wrangler_role]) } + let(:user){crop_wranglers.first} + before :each do + visit root_path + click_link 'Sign in' + fill_in 'Login', with: user.login_name + fill_in 'Password', with: user.password + click_button 'Sign in' + page.should have_content user.login_name + end + + scenario "crop wranglers are listed on the crop wrangler page" do + click_link 'Crop Wrangling' + + within '.crop_wranglers' do + expect(page).to have_content 'Crop Wranglers:' + crop_wranglers.each_with_index do |crop_wrangler, index| + link = find(".crop_wrangler:nth-child(#{index + 1}) a") + expect(link.text).to eq(crop_wrangler.login_name) + expect(link['href']).to eq(member_path(crop_wrangler)) + end + end + end + end +end diff --git a/spec/models/role_spec.rb b/spec/models/role_spec.rb index 8250e064d..68001c358 100644 --- a/spec/models/role_spec.rb +++ b/spec/models/role_spec.rb @@ -1,17 +1,27 @@ require 'spec_helper' describe Role do - before(:each) do - @member = FactoryGirl.create(:member) - @role = FactoryGirl.create(:role) - @role.members << @member + let(:member) { FactoryGirl.create(:member) } + + subject do + role = FactoryGirl.create(:role, name: 'Crop Wrangler') + role.members << member + role end it 'has members' do - @role.members.first.should eq @member + subject.members.first.should eq member end it 'has a slug' do - @role.slug.should eq 'moderator' + subject.slug.should eq 'crop-wrangler' + end + + describe '.crop_wranglers' do + let(:crop_wrangler_role) { FactoryGirl.create :crop_wrangler } + let!(:crop_wranglers) { FactoryGirl.create_list(:crop_wrangling_member, 3, roles: [crop_wrangler_role]) } + it 'return the crop wranglers that are members of that role' do + expect(Role.crop_wranglers).to eq(crop_wranglers) + end end end diff --git a/spec/views/crops/wrangle.html.haml_spec.rb b/spec/views/crops/wrangle.html.haml_spec.rb index e12c23d10..a4adde063 100644 --- a/spec/views/crops/wrangle.html.haml_spec.rb +++ b/spec/views/crops/wrangle.html.haml_spec.rb @@ -13,6 +13,7 @@ describe "crops/wrangle" do pager.replace([ @tomato, @maize ]) end assign(:crops, crops) + assign(:crop_wranglers, Role.crop_wranglers) end it 'contains handy links for wranglers' do