Files
grecia/spec/system/management/proposals_spec.rb
Javi Martín 2732c08f3d Simplify calls to have_current_path
In general, we shold check the contents of the page instead of the
current path, since the contents of the page are what users experience.

In one test, the only reason we check the current path additionally to
the contents of the page is to make sure we're still in the management
section.

Checking just that we avoid querying the database after starting the
browser.
2021-04-16 14:33:26 +02:00

252 lines
8.4 KiB
Ruby

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 "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_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")
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_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" do
login_managed_user(user)
login_as_manager
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" 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_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_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_css("a[href='javascript:window.print();']", text: "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_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(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_link "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