Fix numericality validation to use correct integer only constraint

Fixes #2355
This commit is contained in:
Tom Hughes 2019-08-22 10:36:03 +01:00
parent de973d08ca
commit 135ec35a91
12 changed files with 38 additions and 38 deletions

View file

@ -569,7 +569,7 @@ module Api
new_relation.members = typedmembers new_relation.members = typedmembers
new_relation.tags = tags new_relation.tags = tags
new_relation.visible = visible new_relation.visible = visible
new_relation.changeset_id = changeset_id new_relation.changeset_id = changeset_id.to_i
new_relation.version = version new_relation.version = version
if relid <= 0 if relid <= 0
@ -653,7 +653,7 @@ module Api
id = renumberednodes[id] if renumberednodes[id] id = renumberednodes[id] if renumberednodes[id]
node = Node.new node = Node.new
node.changeset_id = changeset_id node.changeset_id = changeset_id.to_i
node.lat = lat node.lat = lat
node.lon = lon node.lon = lon
node.tags = a[4] node.tags = a[4]
@ -687,7 +687,7 @@ module Api
new_way = Way.new new_way = Way.new
new_way.tags = attributes new_way.tags = attributes
new_way.nds = pointlist new_way.nds = pointlist
new_way.changeset_id = changeset_id new_way.changeset_id = changeset_id.to_i
new_way.version = wayversion new_way.version = wayversion
if originalway <= 0 if originalway <= 0
new_way.create_with_history(user) new_way.create_with_history(user)
@ -705,7 +705,7 @@ module Api
deletednodes.each do |id, v| deletednodes.each do |id, v|
node = Node.find(id.to_i) node = Node.find(id.to_i)
new_node = Node.new new_node = Node.new
new_node.changeset_id = changeset_id new_node.changeset_id = changeset_id.to_i
new_node.version = v.to_i new_node.version = v.to_i
new_node.id = id.to_i new_node.id = id.to_i
begin begin
@ -758,7 +758,7 @@ module Api
# We always need a new node, based on the data that has been sent to us # We always need a new node, based on the data that has been sent to us
new_node = Node.new new_node = Node.new
new_node.changeset_id = changeset_id new_node.changeset_id = changeset_id.to_i
new_node.version = version new_node.version = version
new_node.lat = lat new_node.lat = lat
new_node.lon = lon new_node.lon = lon
@ -834,7 +834,7 @@ module Api
old_way = Way.find(way_id) old_way = Way.find(way_id)
delete_way = Way.new delete_way = Way.new
delete_way.version = way_version delete_way.version = way_version
delete_way.changeset_id = changeset_id delete_way.changeset_id = changeset_id.to_i
delete_way.id = way_id delete_way.id = way_id
old_way.delete_with_history!(delete_way, user) old_way.delete_with_history!(delete_way, user)
@ -843,7 +843,7 @@ module Api
deletednodes.each do |id, v| deletednodes.each do |id, v|
node = Node.find(id.to_i) node = Node.find(id.to_i)
new_node = Node.new new_node = Node.new
new_node.changeset_id = changeset_id new_node.changeset_id = changeset_id.to_i
new_node.version = v.to_i new_node.version = v.to_i
new_node.id = id.to_i new_node.id = id.to_i
begin begin

View file

@ -93,10 +93,10 @@ module Api
lat << cs.max_lat unless cs.max_lat.nil? lat << cs.max_lat unless cs.max_lat.nil?
# collapse the arrays to minimum and maximum # collapse the arrays to minimum and maximum
cs.min_lon = lon.min cs.min_lon = lon.min.round
cs.min_lat = lat.min cs.min_lat = lat.min.round
cs.max_lon = lon.max cs.max_lon = lon.max.round
cs.max_lat = lat.max cs.max_lat = lat.max.round
# save the larger bounding box and return the changeset, which # save the larger bounding box and return the changeset, which
# will include the bigger bounding box. # will include the bigger bounding box.

View file

@ -43,15 +43,15 @@ class Changeset < ActiveRecord::Base
has_and_belongs_to_many :subscribers, :class_name => "User", :join_table => "changesets_subscribers", :association_foreign_key => "subscriber_id" has_and_belongs_to_many :subscribers, :class_name => "User", :join_table => "changesets_subscribers", :association_foreign_key => "subscriber_id"
validates :id, :uniqueness => true, :presence => { :on => :update }, validates :id, :uniqueness => true, :presence => { :on => :update },
:numericality => { :on => :update, :integer_only => true } :numericality => { :on => :update, :only_integer => true }
validates :user_id, :presence => true, validates :user_id, :presence => true,
:numericality => { :integer_only => true } :numericality => { :only_integer => true }
validates :num_changes, :presence => true, validates :num_changes, :presence => true,
:numericality => { :integer_only => true, :numericality => { :only_integer => true,
:greater_than_or_equal_to => 0 } :greater_than_or_equal_to => 0 }
validates :created_at, :closed_at, :presence => true validates :created_at, :closed_at, :presence => true
validates :min_lat, :max_lat, :min_lon, :max_lat, :allow_nil => true, validates :min_lat, :max_lat, :min_lon, :max_lat, :allow_nil => true,
:numericality => { :integer_only => true } :numericality => { :only_integer => true }
before_save :update_closed_at before_save :update_closed_at
@ -131,7 +131,7 @@ class Changeset < ActiveRecord::Base
# update active record. rails 2.1's dirty handling should take care of # update active record. rails 2.1's dirty handling should take care of
# whether this object needs saving or not. # whether this object needs saving or not.
self.min_lon, self.min_lat, self.max_lon, self.max_lat = @bbox.to_a if bbox.complete? self.min_lon, self.min_lat, self.max_lon, self.max_lat = @bbox.to_a.collect(&:round) if bbox.complete?
end end
## ##

View file

@ -24,7 +24,7 @@ class ChangesetComment < ActiveRecord::Base
belongs_to :author, :class_name => "User" belongs_to :author, :class_name => "User"
validates :id, :uniqueness => true, :presence => { :on => :update }, validates :id, :uniqueness => true, :presence => { :on => :update },
:numericality => { :on => :update, :integer_only => true } :numericality => { :on => :update, :only_integer => true }
validates :changeset, :presence => true, :associated => true validates :changeset, :presence => true, :associated => true
validates :author, :presence => true, :associated => true validates :author, :presence => true, :associated => true
validates :visible, :inclusion => [true, false] validates :visible, :inclusion => [true, false]

View file

@ -47,15 +47,15 @@ class Node < ActiveRecord::Base
has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation
validates :id, :uniqueness => true, :presence => { :on => :update }, validates :id, :uniqueness => true, :presence => { :on => :update },
:numericality => { :on => :update, :integer_only => true } :numericality => { :on => :update, :only_integer => true }
validates :version, :presence => true, validates :version, :presence => true,
:numericality => { :integer_only => true } :numericality => { :only_integer => true }
validates :changeset_id, :presence => true, validates :changeset_id, :presence => true,
:numericality => { :integer_only => true } :numericality => { :only_integer => true }
validates :latitude, :presence => true, validates :latitude, :presence => true,
:numericality => { :integer_only => true } :numericality => { :only_integer => true }
validates :longitude, :presence => true, validates :longitude, :presence => true,
:numericality => { :integer_only => true } :numericality => { :only_integer => true }
validates :timestamp, :presence => true validates :timestamp, :presence => true
validates :changeset, :associated => true validates :changeset, :associated => true
validates :visible, :inclusion => [true, false] validates :visible, :inclusion => [true, false]

View file

@ -24,7 +24,7 @@ class Note < ActiveRecord::Base
has_many :comments, -> { left_joins(:author).where(:visible => true, :users => { :status => [nil, "active", "confirmed"] }).order(:created_at) }, :class_name => "NoteComment", :foreign_key => :note_id has_many :comments, -> { left_joins(:author).where(:visible => true, :users => { :status => [nil, "active", "confirmed"] }).order(:created_at) }, :class_name => "NoteComment", :foreign_key => :note_id
validates :id, :uniqueness => true, :presence => { :on => :update }, validates :id, :uniqueness => true, :presence => { :on => :update },
:numericality => { :on => :update, :integer_only => true } :numericality => { :on => :update, :only_integer => true }
validates :latitude, :longitude, :numericality => { :only_integer => true } validates :latitude, :longitude, :numericality => { :only_integer => true }
validates :closed_at, :presence => true, :if => proc { :status == "closed" } validates :closed_at, :presence => true, :if => proc { :status == "closed" }
validates :status, :inclusion => %w[open closed hidden] validates :status, :inclusion => %w[open closed hidden]

View file

@ -28,7 +28,7 @@ class NoteComment < ActiveRecord::Base
belongs_to :author, :class_name => "User", :foreign_key => :author_id belongs_to :author, :class_name => "User", :foreign_key => :author_id
validates :id, :uniqueness => true, :presence => { :on => :update }, validates :id, :uniqueness => true, :presence => { :on => :update },
:numericality => { :on => :update, :integer_only => true } :numericality => { :on => :update, :only_integer => true }
validates :note, :presence => true, :associated => true validates :note, :presence => true, :associated => true
validates :visible, :inclusion => [true, false] validates :visible, :inclusion => [true, false]
validates :author, :associated => true validates :author, :associated => true

View file

@ -38,9 +38,9 @@ class OldNode < ActiveRecord::Base
validates :changeset, :presence => true, :associated => true validates :changeset, :presence => true, :associated => true
validates :latitude, :presence => true, validates :latitude, :presence => true,
:numericality => { :integer_only => true } :numericality => { :only_integer => true }
validates :longitude, :presence => true, validates :longitude, :presence => true,
:numericality => { :integer_only => true } :numericality => { :only_integer => true }
validates :timestamp, :presence => true validates :timestamp, :presence => true
validates :visible, :inclusion => [true, false] validates :visible, :inclusion => [true, false]

View file

@ -37,11 +37,11 @@ class Relation < ActiveRecord::Base
has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation
validates :id, :uniqueness => true, :presence => { :on => :update }, validates :id, :uniqueness => true, :presence => { :on => :update },
:numericality => { :on => :update, :integer_only => true } :numericality => { :on => :update, :only_integer => true }
validates :version, :presence => true, validates :version, :presence => true,
:numericality => { :integer_only => true } :numericality => { :only_integer => true }
validates :changeset_id, :presence => true, validates :changeset_id, :presence => true,
:numericality => { :integer_only => true } :numericality => { :only_integer => true }
validates :timestamp, :presence => true validates :timestamp, :presence => true
validates :changeset, :associated => true validates :changeset, :associated => true
validates :visible, :inclusion => [true, false] validates :visible, :inclusion => [true, false]

View file

@ -39,11 +39,11 @@ class Way < ActiveRecord::Base
has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation
validates :id, :uniqueness => true, :presence => { :on => :update }, validates :id, :uniqueness => true, :presence => { :on => :update },
:numericality => { :on => :update, :integer_only => true } :numericality => { :on => :update, :only_integer => true }
validates :version, :presence => true, validates :version, :presence => true,
:numericality => { :integer_only => true } :numericality => { :only_integer => true }
validates :changeset_id, :presence => true, validates :changeset_id, :presence => true,
:numericality => { :integer_only => true } :numericality => { :only_integer => true }
validates :timestamp, :presence => true validates :timestamp, :presence => true
validates :changeset, :associated => true validates :changeset, :associated => true
validates :visible, :inclusion => [true, false] validates :visible, :inclusion => [true, false]

View file

@ -1561,8 +1561,8 @@ CHANGESET
user = create(:user) user = create(:user)
changeset = create(:changeset, :user => user) changeset = create(:changeset, :user => user)
closed_changeset = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 1, 1, 0, 0, 0), :closed_at => Time.utc(2008, 1, 2, 0, 0, 0)) closed_changeset = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 1, 1, 0, 0, 0), :closed_at => Time.utc(2008, 1, 2, 0, 0, 0))
changeset2 = create(:changeset, :min_lat => 5 * GeoRecord::SCALE, :min_lon => 5 * GeoRecord::SCALE, :max_lat => 15 * GeoRecord::SCALE, :max_lon => 15 * GeoRecord::SCALE) changeset2 = create(:changeset, :min_lat => (5 * GeoRecord::SCALE).round, :min_lon => (5 * GeoRecord::SCALE).round, :max_lat => (15 * GeoRecord::SCALE).round, :max_lon => (15 * GeoRecord::SCALE).round)
changeset3 = create(:changeset, :min_lat => 4.5 * GeoRecord::SCALE, :min_lon => 4.5 * GeoRecord::SCALE, :max_lat => 5 * GeoRecord::SCALE, :max_lon => 5 * GeoRecord::SCALE) changeset3 = create(:changeset, :min_lat => (4.5 * GeoRecord::SCALE).round, :min_lon => (4.5 * GeoRecord::SCALE).round, :max_lat => (5 * GeoRecord::SCALE).round, :max_lon => (5 * GeoRecord::SCALE).round)
get :query, :params => { :bbox => "-10,-10, 10, 10" } get :query, :params => { :bbox => "-10,-10, 10, 10" }
assert_response :success, "can't get changesets in bbox" assert_response :success, "can't get changesets in bbox"

View file

@ -80,8 +80,8 @@ class NodeTest < ActiveSupport::TestCase
def test_create def test_create
changeset = create(:changeset) changeset = create(:changeset)
node_template = Node.new( node_template = Node.new(
:latitude => 12.3456, :lat => 12.3456,
:longitude => 65.4321, :lon => 65.4321,
:changeset_id => changeset.id, :changeset_id => changeset.id,
:visible => 1, :visible => 1,
:version => 1 :version => 1
@ -116,8 +116,8 @@ class NodeTest < ActiveSupport::TestCase
assert_equal OldNode.where(:node_id => node_template.id).count, 1 assert_equal OldNode.where(:node_id => node_template.id).count, 1
assert_not_nil node assert_not_nil node
node_template.latitude = 12.3456 node_template.lat = 12.3456
node_template.longitude = 65.4321 node_template.lon = 65.4321
# node_template.tags = "updated=yes" # node_template.tags = "updated=yes"
assert node.update_from(node_template, node.changeset.user) assert node.update_from(node_template, node.changeset.user)