From b362026db078d85205d7adb17cad00e4d187ef4c Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Fri, 4 Jul 2025 18:11:36 +0300 Subject: [PATCH] Validate changeset num_*_changes --- app/models/changeset.rb | 11 ++++++++--- test/models/changeset_test.rb | 30 ++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/app/models/changeset.rb b/app/models/changeset.rb index ecce8c4d2..b143c5c61 100644 --- a/app/models/changeset.rb +++ b/app/models/changeset.rb @@ -55,9 +55,14 @@ class Changeset < ApplicationRecord validates :id, :uniqueness => true, :presence => { :on => :update }, :numericality => { :on => :update, :only_integer => true } - validates :num_changes, :presence => true, - :numericality => { :only_integer => true, - :greater_than_or_equal_to => 0 } + [:num_changes, + :num_created_nodes, :num_modified_nodes, :num_deleted_nodes, + :num_created_ways, :num_modified_ways, :num_deleted_ways, + :num_created_relations, :num_modified_relations, :num_deleted_relations].each do |counter_attribute| + validates counter_attribute, :presence => true, + :numericality => { :only_integer => true, + :greater_than_or_equal_to => 0 } + end validates :created_at, :closed_at, :presence => true validates :min_lat, :max_lat, :min_lon, :max_lat, :allow_nil => true, :numericality => { :only_integer => true } diff --git a/test/models/changeset_test.rb b/test/models/changeset_test.rb index 3be9a52e6..465b9ae4f 100644 --- a/test/models/changeset_test.rb +++ b/test/models/changeset_test.rb @@ -1,6 +1,36 @@ require "test_helper" class ChangesetTest < ActiveSupport::TestCase + def test_num_changes_valid + changeset = create(:changeset) + assert_predicate changeset, :valid? + changeset.num_changes = nil + assert_not_predicate changeset, :valid? + changeset.num_changes = -1 + assert_not_predicate changeset, :valid? + changeset.num_changes = 0 + assert_predicate changeset, :valid? + changeset.num_changes = 1 + assert_predicate changeset, :valid? + end + + def test_num_type_changes_valid + [:num_created_nodes, :num_modified_nodes, :num_deleted_nodes, + :num_created_ways, :num_modified_ways, :num_deleted_ways, + :num_created_relations, :num_modified_relations, :num_deleted_relations].each do |counter_attribute| + changeset = create(:changeset) + assert_predicate changeset, :valid? + changeset[counter_attribute] = nil + assert_not_predicate changeset, :valid? + changeset[counter_attribute] = -1 + assert_not_predicate changeset, :valid? + changeset[counter_attribute] = 0 + assert_predicate changeset, :valid? + changeset[counter_attribute] = 1 + assert_predicate changeset, :valid? + end + end + def test_from_xml_no_text no_text = "" message_create = assert_raise(OSM::APIBadXMLError) do -- 2.39.5