FIX: `min` setting should be greater than 0 for multiple type polls.
This commit is contained in:
parent
cc66bff730
commit
2f14a81fa4
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue