FIX: `min` setting should be greater than 0 for multiple type polls.

This commit is contained in:
Guo Xiang Tan 2016-06-07 10:48:06 +08:00
parent cc66bff730
commit 2f14a81fa4
No known key found for this signature in database
GPG Key ID: 19C321C8952B0F72
2 changed files with 36 additions and 3 deletions

View File

@ -92,10 +92,11 @@ module DiscoursePoll
def valid_multiple_choice_settings?(poll) def valid_multiple_choice_settings?(poll)
if poll["type"] == "multiple" if poll["type"] == "multiple"
num_of_options = poll["options"].size
min = (poll["min"].presence || 1).to_i min = (poll["min"].presence || 1).to_i
max = (poll["max"].presence || poll["options"].size).to_i max = (poll["max"].presence || num_of_options).to_i
if min > max || max <= 0 || max > poll["options"].size || min >= poll["options"].size if min > max || min <= 0 || max <= 0 || max > num_of_options || min >= num_of_options
if poll["name"] == ::DiscoursePoll::DEFAULT_POLL_NAME if poll["name"] == ::DiscoursePoll::DEFAULT_POLL_NAME
@post.errors.add(:base, I18n.t("poll.default_poll_with_multiple_choices_has_invalid_parameters")) @post.errors.add(:base, I18n.t("poll.default_poll_with_multiple_choices_has_invalid_parameters"))
else else

View File

@ -193,7 +193,37 @@ describe ::DiscoursePoll::PollsValidator do
) )
end end
it "should ensure that min settings is smaller than the number of options" do it "should ensure that min settings is not negative" do
raw = <<-RAW.strip_heredoc
[poll type=multiple min=-1]
* 1
* 2
[/poll]
RAW
expect(post.update_attributes(raw: raw)).to eq(false)
expect(post.errors[:base]).to include(
I18n.t("poll.default_poll_with_multiple_choices_has_invalid_parameters")
)
end
it "should ensure that min settings it not equal to zero" do
raw = <<-RAW.strip_heredoc
[poll type=multiple min=0]
* 1
* 2
[/poll]
RAW
expect(post.update_attributes(raw: raw)).to eq(false)
expect(post.errors[:base]).to include(
I18n.t("poll.default_poll_with_multiple_choices_has_invalid_parameters")
)
end
it "should ensure that min settings is not equal to the number of options" do
raw = <<-RAW.strip_heredoc raw = <<-RAW.strip_heredoc
[poll type=multiple min=2] [poll type=multiple min=2]
* 1 * 1
@ -206,7 +236,9 @@ describe ::DiscoursePoll::PollsValidator do
expect(post.errors[:base]).to include( expect(post.errors[:base]).to include(
I18n.t("poll.default_poll_with_multiple_choices_has_invalid_parameters") I18n.t("poll.default_poll_with_multiple_choices_has_invalid_parameters")
) )
end
it "should ensure that min settings is not greater than the number of options" do
raw = <<-RAW.strip_heredoc raw = <<-RAW.strip_heredoc
[poll type=multiple min=3] [poll type=multiple min=3]
* 1 * 1