spec/system/management/proposals_spec.rb
require "rails_helper"
describe "Proposals" do
let(:user) { create(:user, :level_two) }
context "Create" do
scenario "Creating proposals on behalf of someone", :with_frozen_time do
login_managed_user(user)
login_as_manager
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_new_proposal_title with: "Help refugees"
fill_in "Proposal summary", with: "In summary, what we want is..."
fill_in_ckeditor "Proposal text", with: "This is very important because..."
fill_in "External video URL", with: "https://www.youtube.com/watch?v=yRYFKcMa_Ek"
check "I agree to the Privacy Policy and the Terms and conditions of use"
click_button "Create proposal"
expect(page).to have_content "Proposal created successfully."
expect(page).to have_current_path(/management/)
expect(page).to have_content "Help 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 "https://www.youtube.com/watch?v=yRYFKcMa_Ek"
expect(page).to have_content user.name
expect(page).to have_content I18n.l(Date.current)
end
scenario "Should not allow unverified users to create proposals" do
login_managed_user(create(:user))
login_as_manager
click_link "Create proposal"
expect(page).to have_content "User is not verified"
end
scenario "when user has not been selected we can't create a proposal" do
Setting["feature.user.skip_verification"] = "true"
login_as_manager
click_link "Create proposal"
expect(page).to have_content "To perform this action you must select a user"
expect(page).to have_current_path management_document_verifications_path
end
end
context "Show" do
scenario "When path matches the friendly url" do
proposal = create(:proposal)
right_path = management_proposal_path(proposal)
login_managed_user(user)
login_as_manager
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)
right_path = management_proposal_path(proposal)
old_path = "#{management_proposals_path}/#{proposal.id}-something-else"
login_managed_user(user)
login_as_manager
visit old_path
expect(page).not_to have_current_path(old_path)
expect(page).to have_current_path(right_path)
end
scenario "Successful proposal" do
proposal = create(:proposal, :successful, title: "Success!")
login_managed_user(user)
login_as_manager
visit management_proposal_path(proposal)
expect(page).to have_content("Success!")
end
end
scenario "Searching" do
proposal1 = create(:proposal, title: "Show me what you got")
proposal2 = create(:proposal, title: "Get Schwifty")
login_managed_user(user)
login_as_manager
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_link proposal1.title, href: management_proposal_path(proposal1)
end
end
scenario "Listing" do
proposal1 = create(:proposal, title: "Show me what you got")
proposal2 = create(:proposal, title: "Get Schwifty")
login_managed_user(user)
login_as_manager
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_link proposal1.title, href: management_proposal_path(proposal1)
expect(page).to have_content(proposal1.summary)
expect(page).to have_link proposal2.title, href: management_proposal_path(proposal2)
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" do
login_managed_user(user)
login_as_manager
click_link "Support proposals"
within(".proposals-list") do
click_button "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" do
login_managed_user(user)
login_as_manager
click_link "Support proposals"
within(".proposals-list") { click_link proposal.title }
expect(page).to have_content proposal.code
within("#proposal_#{proposal.id}_votes") { click_button "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_content "Following"
expect(page).to have_current_path(management_proposal_path(proposal))
end
scenario "Should not allow unverified users to vote proposals" do
login_managed_user(create(:user))
login_as_manager
click_link "Support proposals"
expect(page).to have_content "User is not verified"
end
scenario "when user has not been selected we can't support proposals" do
Setting["feature.user.skip_verification"] = "true"
login_as_manager
click_link "Support proposals"
expect(page).to have_content "To perform this action you must select a user"
expect(page).to have_current_path management_document_verifications_path
end
end
context "Printing" do
scenario "Printing proposals" do
6.times { create(:proposal) }
login_as_manager
click_link "Print proposals"
expect(page).to have_css(".proposal", count: 5)
expect(page).to have_link "Print", href: "javascript:window.print();"
end
scenario "Filtering proposals to be printed" 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)
login_as_manager
click_link "Print proposals"
expect(page).to have_link "highest rated", class: "is-active"
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
click_link "newest"
expect(page).to have_link "newest", class: "is-active"
expect(page).to have_current_path(/order=created_at/)
expect(page).to have_current_path(/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
scenario "when user has not been selected we can't support a proposal" do
create(:proposal)
Setting["feature.user.skip_verification"] = "true"
login_as_manager
click_link "Print proposals"
within ".proposals-list" do
click_button "Support"
end
expect(page).to have_content "To perform this action you must select a user"
expect(page).to have_current_path management_document_verifications_path
end
end
end