Don't allow to modify questions for started polls
Adding, modifiying, and/or deleting questions for an already started poll is far away from being democratic and can lead to unwanted side effects like missing votes in the results or stats. So, from now on, only modifiying questions will be possible only if the poll has not started yet.
This commit is contained in:
committed by
Javi Martín
parent
d499a6944e
commit
8a26954bc5
105
spec/controllers/admin/poll/questions_controller_spec.rb
Normal file
105
spec/controllers/admin/poll/questions_controller_spec.rb
Normal file
@@ -0,0 +1,105 @@
|
||||
require "rails_helper"
|
||||
|
||||
describe Admin::Poll::QuestionsController, :admin do
|
||||
let(:current_poll) { create(:poll) }
|
||||
let(:future_poll) { create(:poll, :future) }
|
||||
|
||||
describe "POST create" do
|
||||
it "is not possible for an already started poll" do
|
||||
post :create, params: {
|
||||
poll_question: {
|
||||
translations_attributes: {
|
||||
"0" => {
|
||||
locale: "en",
|
||||
title: "Question from started poll"
|
||||
}
|
||||
},
|
||||
poll_id: current_poll
|
||||
}
|
||||
}
|
||||
|
||||
expect(flash[:alert]).to eq "You do not have permission to carry out the action 'create' on Question."
|
||||
expect(Poll::Question.count).to eq 0
|
||||
end
|
||||
|
||||
it "is possible for a not started poll" do
|
||||
post :create, params: {
|
||||
poll_question: {
|
||||
translations_attributes: {
|
||||
"0" => {
|
||||
locale: "en",
|
||||
title: "Question from future poll"
|
||||
}
|
||||
},
|
||||
poll_id: future_poll
|
||||
}
|
||||
}
|
||||
|
||||
expect(response).to redirect_to admin_question_path(Poll::Question.last)
|
||||
expect(Poll::Question.last.title).to eq "Question from future poll"
|
||||
expect(Poll::Question.count).to eq 1
|
||||
end
|
||||
end
|
||||
|
||||
describe "PATCH update" do
|
||||
it "is not possible for an already started poll" do
|
||||
current_question = create(:poll_question, poll: current_poll, title: "Sample title")
|
||||
|
||||
patch :update, params: {
|
||||
poll_question: {
|
||||
translations_attributes: {
|
||||
"0" => {
|
||||
locale: "en",
|
||||
title: "New title",
|
||||
id: current_question.translations.first.id
|
||||
}
|
||||
}
|
||||
},
|
||||
id: current_question
|
||||
}
|
||||
|
||||
expect(flash[:alert]).to eq "You do not have permission to carry out the action 'update' on Question."
|
||||
expect(current_question.reload.title).to eq "Sample title"
|
||||
end
|
||||
|
||||
it "is possible for a not started poll" do
|
||||
future_question = create(:poll_question, poll: future_poll)
|
||||
|
||||
patch :update, params: {
|
||||
poll_question: {
|
||||
translations_attributes: {
|
||||
"0" => {
|
||||
locale: "en",
|
||||
title: "New title",
|
||||
id: future_question.translations.first.id
|
||||
}
|
||||
}
|
||||
},
|
||||
id: future_question
|
||||
}
|
||||
|
||||
expect(response).to redirect_to admin_question_path(future_question)
|
||||
expect(flash[:notice]).to eq "Changes saved"
|
||||
expect(future_question.reload.title).to eq "New title"
|
||||
end
|
||||
end
|
||||
|
||||
describe "DELETE destroy" do
|
||||
it "is not possible for an already started poll" do
|
||||
current_question = create(:poll_question, poll: current_poll)
|
||||
delete :destroy, params: { id: current_question }
|
||||
|
||||
expect(flash[:alert]).to eq "You do not have permission to carry out the action 'destroy' on Question."
|
||||
expect(Poll::Question.count).to eq 1
|
||||
end
|
||||
|
||||
it "is possible for a not started poll" do
|
||||
future_question = create(:poll_question, poll: future_poll)
|
||||
delete :destroy, params: { id: future_question }
|
||||
|
||||
expect(response).to redirect_to admin_poll_path(future_poll)
|
||||
expect(flash[:notice]).to eq "Question deleted successfully"
|
||||
expect(Poll::Question.count).to eq 0
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user