spec/features/management/proposals_spec.rb
require 'rails_helper'
feature 'Proposals' do
background do
login_as_manager
end
before do
Setting['feature.map'] = nil
end
after do
Setting['feature.map'] = nil
end
context "Create" do
scenario 'Creating proposals on behalf of someone' do
user = create(:user, :level_two)
login_managed_user(user)
click_link "Create proposal"
within(".account-info") do
expect(page).to have_content "Identified as"
expect(page).to have_content user.username.to_s
expect(page).to have_content user.email.to_s
expect(page).to have_content user.document_number.to_s
end
fill_in 'proposal_title', with: 'Help refugees'
fill_in 'proposal_question', with: '¿Would you like to give assistance to war refugees?'
fill_in 'proposal_summary', with: 'In summary, what we want is...'
fill_in 'proposal_description', with: 'This is very important because...'
fill_in 'proposal_external_url', with: 'http://rescue.org/refugees'
fill_in 'proposal_video_url', with: 'https://www.youtube.com/watch?v=yRYFKcMa_Ek'
check 'proposal_terms_of_service'
click_button 'Create proposal'
expect(page).to have_content 'Proposal created successfully.'
expect(page).to have_content 'Help refugees'
expect(page).to have_content '¿Would you like to give assistance to war refugees?'
expect(page).to have_content 'In summary, what we want is...'
expect(page).to have_content 'This is very important because...'
expect(page).to have_content 'http://rescue.org/refugees'
expect(page).to have_content 'https://www.youtube.com/watch?v=yRYFKcMa_Ek'
expect(page).to have_content user.name
expect(page).to have_content I18n.l(Proposal.last.created_at.to_date)
expect(page).to have_current_path(management_proposal_path(Proposal.last))
end
scenario "Should not allow unverified users to create proposals" do
user = create(:user)
login_managed_user(user)
click_link "Create proposal"
expect(page).to have_content "User is not verified"
end
end
context "Show" do
scenario 'When path matches the friendly url' do
proposal = create(:proposal)
user = create(:user, :level_two)
login_managed_user(user)
right_path = management_proposal_path(proposal)
visit right_path
expect(page).to have_current_path(right_path)
end
scenario 'When path does not match the friendly url' do
proposal = create(:proposal)
user = create(:user, :level_two)
login_managed_user(user)
right_path = management_proposal_path(proposal)
old_path = "#{management_proposals_path}/#{proposal.id}-something-else"
visit old_path
expect(page).not_to have_current_path(old_path)
expect(page).to have_current_path(right_path)
end
end
scenario "Searching" do
proposal1 = create(:proposal, title: "Show me what you got")
proposal2 = create(:proposal, title: "Get Schwifty")
user = create(:user, :level_two)
login_managed_user(user)
click_link "Support proposals"
fill_in "search", with: "what you got"
click_button "Search"
expect(page).to have_current_path(management_proposals_path, ignore_query: true)
within(".proposals-list") do
expect(page).to have_css('.proposal', count: 1)
expect(page).to have_content(proposal1.title)
expect(page).to have_content(proposal1.summary)
expect(page).not_to have_content(proposal2.title)
expect(page).to have_css("a[href='#{management_proposal_path(proposal1)}']", text: proposal1.title)
end
end
scenario "Listing" do
proposal1 = create(:proposal, title: "Show me what you got")
proposal2 = create(:proposal, title: "Get Schwifty")
user = create(:user, :level_two)
login_managed_user(user)
click_link "Support proposals"
expect(page).to have_current_path(management_proposals_path)
within(".account-info") do
expect(page).to have_content "Identified as"
expect(page).to have_content user.username.to_s
expect(page).to have_content user.email.to_s
expect(page).to have_content user.document_number.to_s
end
within(".proposals-list") do
expect(page).to have_css('.proposal', count: 2)
expect(page).to have_css("a[href='#{management_proposal_path(proposal1)}']", text: proposal1.title)
expect(page).to have_content(proposal1.summary)
expect(page).to have_css("a[href='#{management_proposal_path(proposal2)}']", text: proposal2.title)
expect(page).to have_content(proposal2.summary)
end
end
context "Voting" do
let!(:proposal) { create(:proposal) }
scenario 'Voting proposals on behalf of someone in index view', :js do
user = create(:user, :level_two)
login_managed_user(user)
click_link "Support proposals"
within(".proposals-list") do
click_link('Support')
expect(page).to have_content "1 support"
expect(page).to have_content "You have already supported this proposal. Share it!"
end
expect(page).to have_current_path(management_proposals_path)
end
scenario 'Voting proposals on behalf of someone in show view', :js do
user = create(:user, :level_two)
login_managed_user(user)
click_link "Support proposals"
within(".proposals-list") { click_link proposal.title }
expect(page).to have_content proposal.code
within("#proposal_#{proposal.id}_votes") { click_link('Support') }
expect(page).to have_content "1 support"
expect(page).to have_content "You have already supported this proposal. Share it!"
expect(page).to have_current_path(management_proposal_path(proposal))
end
scenario "Should not allow unverified users to vote proposals" do
user = create(:user)
login_managed_user(user)
click_link "Support proposals"
expect(page).to have_content "User is not verified"
end
end
context "Printing" do
scenario 'Printing proposals' do
6.times { create(:proposal) }
click_link "Print proposals"
expect(page).to have_css('.proposal', count: 5)
expect(page).to have_css("a[href='javascript:window.print();']", text: 'Print')
end
scenario "Filtering proposals to be printed", :js do
worst_proposal = create(:proposal, title: 'Worst proposal')
worst_proposal.update_column(:confidence_score, 2)
best_proposal = create(:proposal, title: 'Best proposal')
best_proposal.update_column(:confidence_score, 10)
medium_proposal = create(:proposal, title: 'Medium proposal')
medium_proposal.update_column(:confidence_score, 5)
user = create(:user, :level_two)
login_managed_user(user)
click_link "Print proposals"
expect(page).to have_selector('.js-order-selector[data-order="confidence_score"]')
within(".proposals-list") do
expect(best_proposal.title).to appear_before(medium_proposal.title)
expect(medium_proposal.title).to appear_before(worst_proposal.title)
end
select 'newest', from: 'order-selector'
expect(page).to have_selector('.js-order-selector[data-order="created_at"]')
expect(current_url).to include('order=created_at')
expect(current_url).to include('page=1')
within(".proposals-list") do
expect(medium_proposal.title).to appear_before(best_proposal.title)
expect(best_proposal.title).to appear_before(worst_proposal.title)
end
end
end
end