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