]> git.openstreetmap.org Git - rails.git/commitdiff
Rename update element consistency check
authorAnton Khorev <tony29@yandex.ru>
Sat, 30 Mar 2024 07:57:06 +0000 (10:57 +0300)
committerAnton Khorev <tony29@yandex.ru>
Sat, 30 Mar 2024 07:57:39 +0000 (10:57 +0300)
app/models/concerns/consistency_validations.rb
app/models/node.rb
app/models/relation.rb
app/models/way.rb
test/models/node_test.rb
test/models/relation_test.rb
test/models/way_test.rb

index 8b97e2b70592f4c42f1e67fb14379679bf28ad5f..65226d87a50f134878e5a56b7c6cf47dd1c902c1 100644 (file)
@@ -7,7 +7,7 @@ module ConsistencyValidations
   # code in 6 places for all the updates and deletes. Some of these tests are
   # needed for creates, but are currently not run :-(
   # This will throw an exception if there is an inconsistency
-  def check_consistency(old, new, user)
+  def check_update_element_consistency(old, new, user)
     if new.id != old.id || new.id.nil? || old.id.nil?
       raise OSM::APIPreconditionFailedError, "New and old IDs don't match on #{new.class}. #{new.id} != #{old.id}."
     elsif new.version != old.version
index 385bc732a6051a32e88ddbbfd050568cc22e16c9..825336d16e684ac25fb15c5f4f3294cd652d281d 100644 (file)
@@ -145,7 +145,7 @@ class Node < ApplicationRecord
     # shouldn't be possible to get race conditions.
     Node.transaction do
       lock!
-      check_consistency(self, new_node, user)
+      check_update_element_consistency(self, new_node, user)
       ways = Way.joins(:way_nodes).where(:visible => true, :current_way_nodes => { :node_id => id }).order(:id)
       raise OSM::APIPreconditionFailedError, "Node #{id} is still used by ways #{ways.collect(&:id).join(',')}." unless ways.empty?
 
@@ -166,7 +166,7 @@ class Node < ApplicationRecord
   def update_from(new_node, user)
     Node.transaction do
       lock!
-      check_consistency(self, new_node, user)
+      check_update_element_consistency(self, new_node, user)
 
       # update changeset first
       self.changeset_id = new_node.changeset_id
index c87f70dad48fbb3ff6b4ba92188d1d82640ba680..f09647320004f99dc1734964a3e265ffb97b272e 100644 (file)
@@ -166,7 +166,7 @@ class Relation < ApplicationRecord
     # shouldn't be possible to get race conditions.
     Relation.transaction do
       lock!
-      check_consistency(self, new_relation, user)
+      check_update_element_consistency(self, new_relation, user)
       # This will check to see if this relation is used by another relation
       rel = RelationMember.joins(:relation).find_by("visible = ? AND member_type = 'Relation' and member_id = ? ", true, id)
       raise OSM::APIPreconditionFailedError, "The relation #{new_relation.id} is used in relation #{rel.relation.id}." unless rel.nil?
@@ -182,7 +182,7 @@ class Relation < ApplicationRecord
   def update_from(new_relation, user)
     Relation.transaction do
       lock!
-      check_consistency(self, new_relation, user)
+      check_update_element_consistency(self, new_relation, user)
       raise OSM::APIPreconditionFailedError, "Cannot update relation #{id}: data or member data is invalid." unless new_relation.preconditions_ok?(members)
 
       self.changeset_id = new_relation.changeset_id
index 2a989f9f3b6d6068647d41c7c2fa47aa5a01a52b..203d3b7036f4c78d4b844b8219f14acfd73e59e6 100644 (file)
@@ -142,7 +142,7 @@ class Way < ApplicationRecord
   def update_from(new_way, user)
     Way.transaction do
       lock!
-      check_consistency(self, new_way, user)
+      check_update_element_consistency(self, new_way, user)
       raise OSM::APIPreconditionFailedError, "Cannot update way #{id}: data is invalid." unless new_way.preconditions_ok?(nds)
 
       self.changeset_id = new_way.changeset_id
@@ -193,7 +193,7 @@ class Way < ApplicationRecord
     # shouldn't be possible to get race conditions.
     Way.transaction do
       lock!
-      check_consistency(self, new_way, user)
+      check_update_element_consistency(self, new_way, user)
       rels = Relation.joins(:relation_members).where(:visible => true, :current_relation_members => { :member_type => "Way", :member_id => id }).order(:id)
       raise OSM::APIPreconditionFailedError, "Way #{id} is still used by relations #{rels.collect(&:id).join(',')}." unless rels.empty?
 
index 664bfb2607a4a3aede197141ca73423ea191bfcc..94cb5ec8143612803a643912ac7445455651890a 100644 (file)
@@ -435,4 +435,13 @@ class NodeTest < ActiveSupport::TestCase
       node.update_from(new_node, user)
     end
   end
+
+  test "raises id precondition exception when deleting" do
+    user = create(:user)
+    node = Node.new(:id => 23, :visible => true)
+    new_node = Node.new(:id => 42, :visible => false)
+    assert_raises OSM::APIPreconditionFailedError do
+      node.delete_with_history!(new_node, user)
+    end
+  end
 end
index 5d7d0d46757a43a5bcd9073c4d5b4c2256cc223c..405dd353d3a94367280c1cea77a4b579aabce376 100644 (file)
@@ -323,4 +323,13 @@ class RelationTest < ActiveSupport::TestCase
       relation.update_from(new_relation, user)
     end
   end
+
+  test "raises id precondition exception when deleting" do
+    user = create(:user)
+    relation = Relation.new(:id => 23, :visible => true)
+    new_relation = Relation.new(:id => 42, :visible => false)
+    assert_raises OSM::APIPreconditionFailedError do
+      relation.delete_with_history!(new_relation, user)
+    end
+  end
 end
index 8d662b657229428ba3ea78f08464f0151ada43d5..36debfac082e6eba757431bbbce95dfb8764b4da 100644 (file)
@@ -290,4 +290,13 @@ class WayTest < ActiveSupport::TestCase
       way.update_from(new_way, user)
     end
   end
+
+  test "raises id precondition exception when deleting" do
+    user = create(:user)
+    way = Way.new(:id => 23, :visible => true)
+    new_way = Way.new(:id => 42, :visible => false)
+    assert_raises OSM::APIPreconditionFailedError do
+      way.delete_with_history!(new_way, user)
+    end
+  end
 end