Files
nairobi/spec/controllers/legislation/proposals/votes_controller_spec.rb
Javi Martín 7070b0915b Allow liking/unliking when JavaScript is disabled
Even if pretty much nobody uses a browser with JavaScript disabled when
navigating our sites, there might be times where JavaScript isn't loaded
for reasons like a slow internet connections not getting the JavaScript
files or a technical issue.

So we're making it possible to still use the like/unlike buttons in
these cases.
2023-10-18 18:08:59 +02:00

81 lines
2.6 KiB
Ruby

require "rails_helper"
describe Legislation::Proposals::VotesController do
let(:legislation_process) { create(:legislation_process) }
let(:proposal) { create(:legislation_proposal, process: legislation_process) }
describe "POST create" do
let(:vote_params) do
{ process_id: legislation_process.id, legislation_proposal_id: proposal.id, value: "yes" }
end
it "does not authorize unauthenticated users" do
post :create, xhr: true, params: vote_params
expect(response).to be_unauthorized
end
it "redirects unauthenticated users without JavaScript to the sign in page" do
post :create, params: vote_params
expect(response).to redirect_to new_user_session_path
end
it "allows vote if user is level_two_or_three_verified" do
sign_in create(:user, :level_two)
expect do
post :create, xhr: true, params: vote_params
end.to change { proposal.reload.votes_for.size }.by(1)
end
it "does not allow voting if user is not level_two_or_three_verified" do
sign_in create(:user)
expect do
post :create, xhr: true, params: vote_params
end.not_to change { proposal.reload.votes_for.size }
end
it "redirects authenticated users without JavaScript to the same page" do
request.env["HTTP_REFERER"] = legislation_process_proposal_path(legislation_process, proposal)
sign_in create(:user, :level_two)
expect do
post :create, params: vote_params
end.to change { proposal.reload.votes_for.size }.by(1)
expect(response).to redirect_to legislation_process_proposal_path(legislation_process, proposal)
expect(flash[:notice]).to eq "Vote created successfully"
end
end
describe "DELETE destroy" do
let(:user) { create(:user, :level_two) }
let!(:vote) { create(:vote, votable: proposal, voter: user) }
let(:vote_params) do
{ process_id: legislation_process.id, legislation_proposal_id: proposal.id, id: vote }
end
it "allows undoing a vote" do
sign_in user
expect do
delete :destroy, xhr: true, params: vote_params
end.to change { proposal.reload.votes_for.size }.by(-1)
end
it "redirects authenticated users without JavaScript to the same page" do
request.env["HTTP_REFERER"] = legislation_process_proposals_path(legislation_process)
sign_in user
expect do
delete :destroy, params: vote_params
end.to change { proposal.reload.votes_for.size }.by(-1)
expect(response).to redirect_to legislation_process_proposals_path(legislation_process)
expect(flash[:notice]).to eq "Vote deleted successfully"
end
end
end