From 0232ee5505028ccea6fda47aef5044c8dbd9f847 Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Fri, 8 Aug 2025 18:03:56 +0300 Subject: [PATCH] Add changeset counters that check db when out of sync --- app/models/changeset.rb | 4 ++++ test/models/changeset_test.rb | 29 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/app/models/changeset.rb b/app/models/changeset.rb index fa1bd7e9f..d276538dc 100644 --- a/app/models/changeset.rb +++ b/app/models/changeset.rb @@ -248,4 +248,8 @@ class Changeset < ApplicationRecord def num_type_changes_in_sync? num_changes == num_created_elements + num_modified_elements + num_deleted_elements end + + def actual_num_changed_nodes = num_type_changes_in_sync? ? num_changed_nodes : old_nodes.count + def actual_num_changed_ways = num_type_changes_in_sync? ? num_changed_ways : old_ways.count + def actual_num_changed_relations = num_type_changes_in_sync? ? num_changed_relations : old_relations.count end diff --git a/test/models/changeset_test.rb b/test/models/changeset_test.rb index fa2617463..0373a1d2c 100644 --- a/test/models/changeset_test.rb +++ b/test/models/changeset_test.rb @@ -310,6 +310,35 @@ class ChangesetTest < ActiveSupport::TestCase assert_predicate changeset, :num_type_changes_in_sync? end + def test_actual_num_changed_elements_in_sync + changeset = create(:changeset, :num_changes => 5 + 4 + 3, + :num_created_nodes => 5, + :num_created_ways => 4, + :num_created_relations => 3) + create_list(:old_node, 5, :changeset => changeset) + create_list(:old_way, 4, :changeset => changeset) + create_list(:old_relation, 3, :changeset => changeset) + + assert_predicate changeset, :num_type_changes_in_sync? + + assert_equal 5, changeset.actual_num_changed_nodes + assert_equal 4, changeset.actual_num_changed_ways + assert_equal 3, changeset.actual_num_changed_relations + end + + def test_actual_num_changed_elements_out_of_sync + changeset = create(:changeset, :num_changes => 5 + 4 + 3) + create_list(:old_node, 5, :changeset => changeset) + create_list(:old_way, 4, :changeset => changeset) + create_list(:old_relation, 3, :changeset => changeset) + + assert_not_predicate changeset, :num_type_changes_in_sync? + + assert_equal 5, changeset.actual_num_changed_nodes + assert_equal 4, changeset.actual_num_changed_ways + assert_equal 3, changeset.actual_num_changed_relations + end + def test_from_xml_no_text no_text = "" message_create = assert_raise(OSM::APIBadXMLError) do -- 2.39.5