Files
nairobi/spec/system/votes_spec.rb
Javi Martín 8c1b4d9ea7 Replace links to agree/disagree with buttons
As mentioned in commits 5311daadf and bb958daf0, using links combined
with JavaScript to generate POST requests to the server has a few
issues.
2022-02-21 18:47:37 +01:00

339 lines
9.1 KiB
Ruby

require "rails_helper"
describe "Votes" do
let!(:verified) { create(:user, verified_at: Time.current) }
let!(:unverified) { create(:user) }
describe "Debates" do
before { login_as(verified) }
scenario "Index shows user votes on debates" do
debate1 = create(:debate)
debate2 = create(:debate)
debate3 = create(:debate)
create(:vote, voter: verified, votable: debate1, vote_flag: true)
create(:vote, voter: verified, votable: debate3, vote_flag: false)
visit debates_path
within("#debates") do
within("#debate_#{debate1.id}_votes") do
within(".in-favor") do
expect(page).to have_css("button.voted")
expect(page).not_to have_css("button.no-voted")
end
within(".against") do
expect(page).to have_css("button.no-voted")
expect(page).not_to have_css("button.voted")
end
end
within("#debate_#{debate2.id}_votes") do
within(".in-favor") do
expect(page).not_to have_css("button.voted")
expect(page).not_to have_css("button.no-voted")
end
within(".against") do
expect(page).not_to have_css("button.no-voted")
expect(page).not_to have_css("button.voted")
end
end
within("#debate_#{debate3.id}_votes") do
within(".in-favor") do
expect(page).to have_css("button.no-voted")
expect(page).not_to have_css("button.voted")
end
within(".against") do
expect(page).to have_css("button.voted")
expect(page).not_to have_css("button.no-voted")
end
end
end
end
describe "Single debate" do
scenario "Show no votes" do
visit debate_path(create(:debate))
expect(page).to have_content "No votes"
within(".in-favor") do
expect(page).to have_content "0%"
expect(page).not_to have_css("button.voted")
expect(page).not_to have_css("button.no-voted")
end
within(".against") do
expect(page).to have_content "0%"
expect(page).not_to have_css("button.voted")
expect(page).not_to have_css("button.no-voted")
end
end
scenario "Update" do
visit debate_path(create(:debate))
click_button "I agree"
within(".in-favor") do
expect(page).to have_content "100%"
expect(page).to have_css("button.voted")
end
click_button "I disagree"
within(".in-favor") do
expect(page).to have_content "0%"
expect(page).to have_css("button.no-voted")
end
within(".against") do
expect(page).to have_content "100%"
expect(page).to have_css("button.voted")
end
expect(page).to have_content "1 vote"
end
scenario "Trying to vote multiple times" do
visit debate_path(create(:debate))
click_button "I agree"
expect(page).to have_content "1 vote"
click_button "I agree"
expect(page).not_to have_content "2 votes"
within(".in-favor") do
expect(page).to have_content "100%"
end
within(".against") do
expect(page).to have_content "0%"
end
end
scenario "Show" do
debate = create(:debate)
create(:vote, voter: verified, votable: debate, vote_flag: true)
create(:vote, voter: unverified, votable: debate, vote_flag: false)
visit debate_path(debate)
expect(page).to have_content "No votes"
within(".in-favor") do
expect(page).to have_content "50%"
expect(page).to have_css("button.voted")
end
within(".against") do
expect(page).to have_content "50%"
expect(page).to have_css("button.no-voted")
end
end
scenario "Create from debate show" do
visit debate_path(create(:debate))
click_button "I agree"
within(".in-favor") do
expect(page).to have_content "100%"
expect(page).to have_css("button.voted")
end
within(".against") do
expect(page).to have_content "0%"
expect(page).to have_css("button.no-voted")
end
expect(page).to have_content "1 vote"
end
scenario "Create in index" do
create(:debate)
visit debates_path
within("#debates") do
click_button "I agree"
within(".in-favor") do
expect(page).to have_content "100%"
expect(page).to have_css("button.voted")
end
within(".against") do
expect(page).to have_content "0%"
expect(page).to have_css("button.no-voted")
end
expect(page).to have_content "1 vote"
end
expect(page).to have_current_path(debates_path)
end
end
end
describe "Proposals" do
before { login_as(verified) }
describe "Single proposal" do
let!(:proposal) { create(:proposal) }
scenario "Show no votes" do
visit proposal_path(proposal)
expect(page).to have_content "No supports"
end
scenario "Trying to vote multiple times" do
visit proposal_path(proposal)
within(".supports") do
click_button "Support"
expect(page).to have_content "1 support"
expect(page).not_to have_button "Support"
end
end
scenario "Show" do
create(:vote, voter: verified, votable: proposal, vote_flag: true)
create(:vote, voter: unverified, votable: proposal, vote_flag: true)
visit proposal_path(proposal)
within(".supports") do
expect(page).to have_content "2 supports"
end
end
scenario "Create from proposal show" do
visit proposal_path(proposal)
within(".supports") 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
end
scenario "Create in listed proposal in index" do
visit proposals_path
within("#proposal_#{proposal.id}") 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(proposals_path)
end
scenario "Create in featured proposal in index" do
visit proposals_path
within("#proposal_#{proposal.id}") do
click_button "Support"
expect(page).to have_content "You have already supported this proposal. Share it!"
end
expect(page).to have_current_path(proposals_path)
end
end
end
scenario "Not logged user trying to vote debates" do
debate = create(:debate)
visit debates_path
within("#debate_#{debate.id}") do
find("div.votes").hover
expect_message_you_need_to_sign_in
end
end
scenario "Not logged user trying to vote proposals" do
proposal = create(:proposal)
visit proposals_path
within("#proposal_#{proposal.id}") do
find("div.supports").hover
expect_message_you_need_to_sign_in
end
visit proposal_path(proposal)
within("#proposal_#{proposal.id}") do
find("div.supports").hover
expect_message_you_need_to_sign_in
end
end
scenario "Not logged user trying to vote comments in debates" do
debate = create(:debate)
comment = create(:comment, commentable: debate)
visit comment_path(comment)
within("#comment_#{comment.id}") do
find("div.votes").hover
expect_message_you_need_to_sign_in_to_vote_comments
end
end
scenario "Not logged user trying to vote comments in proposals" do
proposal = create(:proposal)
comment = create(:comment, commentable: proposal)
visit comment_path(comment)
within("#comment_#{comment.id}_reply") do
find("div.votes").hover
expect_message_you_need_to_sign_in_to_vote_comments
end
end
scenario "Anonymous user trying to vote debates" do
user = create(:user)
debate = create(:debate)
Setting["max_ratio_anon_votes_on_debates"] = 50
debate.update!(cached_anonymous_votes_total: 520, cached_votes_total: 1000)
login_as(user)
visit debates_path
within("#debate_#{debate.id}") do
find("div.votes").hover
expect_message_to_many_anonymous_votes
end
visit debate_path(debate)
within("#debate_#{debate.id}") do
find("div.votes").hover
expect_message_to_many_anonymous_votes
end
end
scenario "Anonymous user trying to vote proposals" do
user = create(:user)
proposal = create(:proposal)
login_as(user)
visit proposals_path
within("#proposal_#{proposal.id}") do
find("div.supports").hover
expect_message_only_verified_can_vote_proposals
end
visit proposal_path(proposal)
within("#proposal_#{proposal.id}") do
find("div.supports").hover
expect_message_only_verified_can_vote_proposals
end
end
end