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.
81 lines
2.6 KiB
Ruby
81 lines
2.6 KiB
Ruby
require "rails_helper"
|
|
|
|
describe Debates::VotesController do
|
|
describe "POST create" do
|
|
it "does not authorize unauthenticated users" do
|
|
debate = create(:debate)
|
|
|
|
post :create, xhr: true, params: { debate_id: debate.id, value: "yes" }
|
|
|
|
expect(response).to be_unauthorized
|
|
end
|
|
|
|
it "redirects unauthenticated users without JavaScript to the sign in page" do
|
|
debate = create(:debate)
|
|
|
|
post :create, params: { debate_id: debate.id, value: "yes" }
|
|
|
|
expect(response).to redirect_to new_user_session_path
|
|
end
|
|
|
|
it "redirects authenticated users without JavaScript to the same page" do
|
|
debate = create(:debate)
|
|
request.env["HTTP_REFERER"] = debate_path(debate)
|
|
sign_in create(:user)
|
|
|
|
expect do
|
|
post :create, params: { debate_id: debate.id, value: "yes" }
|
|
end.to change { debate.reload.votes_for.size }.by(1)
|
|
|
|
expect(response).to redirect_to debate_path(debate)
|
|
expect(flash[:notice]).to eq "Vote created successfully"
|
|
end
|
|
|
|
describe "Vote with too many anonymous votes" do
|
|
it "allows vote if user is allowed" do
|
|
Setting["max_ratio_anon_votes_on_debates"] = 100
|
|
debate = create(:debate)
|
|
sign_in create(:user)
|
|
|
|
expect do
|
|
post :create, xhr: true, params: { debate_id: debate.id, value: "yes" }
|
|
end.to change { debate.reload.votes_for.size }.by(1)
|
|
end
|
|
|
|
it "does not allow voting if user is not allowed" do
|
|
Setting["max_ratio_anon_votes_on_debates"] = 0
|
|
debate = create(:debate, cached_votes_total: 1000)
|
|
sign_in create(:user)
|
|
|
|
expect do
|
|
post :create, xhr: true, params: { debate_id: debate.id, value: "yes" }
|
|
end.not_to change { debate.reload.votes_for.size }
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "DELETE destroy" do
|
|
let(:user) { create(:user) }
|
|
let(:debate) { create(:debate) }
|
|
let!(:vote) { create(:vote, votable: debate, voter: user) }
|
|
before { sign_in user }
|
|
|
|
it "allows undoing a vote if user is allowed" do
|
|
expect do
|
|
delete :destroy, xhr: true, params: { debate_id: debate.id, id: vote }
|
|
end.to change { debate.reload.votes_for.size }.by(-1)
|
|
end
|
|
|
|
it "redirects authenticated users without JavaScript to the same page" do
|
|
request.env["HTTP_REFERER"] = debates_path
|
|
|
|
expect do
|
|
delete :destroy, params: { debate_id: debate.id, id: vote }
|
|
end.to change { debate.reload.votes_for.size }.by(-1)
|
|
|
|
expect(response).to redirect_to debates_path
|
|
expect(flash[:notice]).to eq "Vote deleted successfully"
|
|
end
|
|
end
|
|
end
|