From 9956a64e05f6b1a60c66fbcd70cdb1c601f52682 Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Thu, 10 Jul 2025 05:24:35 +0300 Subject: [PATCH] Add common api element testing methods --- test/controllers/api/elements_test_helper.rb | 54 +++++++++++++++++++ test/controllers/api/nodes_controller_test.rb | 5 ++ .../api/relations_controller_test.rb | 5 ++ test/controllers/api/ways_controller_test.rb | 5 ++ 4 files changed, 69 insertions(+) diff --git a/test/controllers/api/elements_test_helper.rb b/test/controllers/api/elements_test_helper.rb index d36337396..e6170961a 100644 --- a/test/controllers/api/elements_test_helper.rb +++ b/test/controllers/api/elements_test_helper.rb @@ -2,6 +2,60 @@ module Api module ElementsTestHelper private + def affected_models + [] + end + + def with_unchanging_request(*, &) + with_request(*) do |headers, changeset| + assert_no_difference(affected_models.map { |model| -> { model.count } }) do + yield headers, changeset + end + + if changeset + changeset.reload + assert_equal 0, changeset.num_changes + end + end + end + + def with_request(user_options = [], changeset_options = [], &) + user = create_user_for_request(user_options) + changeset = create_changeset_for_request(changeset_options, user) + + yield bearer_authorization_header(user), changeset + end + + def create_user_for_request(options) + factories = [:user, :importer_user, :moderator_user, :administrator_user, :super_user] + options = [:user, *options] unless factories.include? options[0] + + create(*options) + end + + def create_changeset_for_request(options, user) + options = [:changeset, *options] unless options[0] == :changeset + + if options in [*positional, { **keywords }] + keywords = { :user => user }.merge(keywords) + create(*positional, **keywords) + else + create(*options, :user => user) + end + end + + def with_unchanging(*, &) + element = create(*) + element_version = element.version + element_visible = element.visible + + yield element + + element.reload + assert_equal element_version, element.version, "element version changed" + assert_equal element_visible, element.visible, "element visibility changed" + end + ## # update the changeset_id of a node element def update_changeset(xml, changeset_id) diff --git a/test/controllers/api/nodes_controller_test.rb b/test/controllers/api/nodes_controller_test.rb index f300c171a..ad6f2e7f0 100644 --- a/test/controllers/api/nodes_controller_test.rb +++ b/test/controllers/api/nodes_controller_test.rb @@ -643,6 +643,11 @@ module Api private + def affected_models + [Node, NodeTag, + OldNode, OldNodeTag] + end + ## # update an attribute in the node element def xml_attr_rewrite(xml, name, value) diff --git a/test/controllers/api/relations_controller_test.rb b/test/controllers/api/relations_controller_test.rb index fc35d0ffd..174ed1b1f 100644 --- a/test/controllers/api/relations_controller_test.rb +++ b/test/controllers/api/relations_controller_test.rb @@ -759,6 +759,11 @@ module Api private + def affected_models + [Relation, RelationTag, RelationMember, + OldRelation, OldRelationTag, OldRelationMember] + end + ## # update an attribute in the node element def xml_attr_rewrite(xml, name, value) diff --git a/test/controllers/api/ways_controller_test.rb b/test/controllers/api/ways_controller_test.rb index c0ab18e24..183b0ee55 100644 --- a/test/controllers/api/ways_controller_test.rb +++ b/test/controllers/api/ways_controller_test.rb @@ -970,6 +970,11 @@ module Api private + def affected_models + [Way, WayNode, WayTag, + OldWay, OldWayNode, OldWayTag] + end + ## # update an attribute in the way element def xml_attr_rewrite(xml, name, value) -- 2.39.5