]> git.openstreetmap.org Git - rails.git/blob - test/controllers/api/elements_test_helper.rb
Merge pull request #5932 from tomhughes/frozen-strings
[rails.git] / test / controllers / api / elements_test_helper.rb
1 # frozen_string_literal: true
2
3 module Api
4   module ElementsTestHelper
5     private
6
7     def affected_models
8       []
9     end
10
11     def with_unchanging_request(*, &)
12       with_request(*) do |headers, changeset|
13         assert_no_difference(affected_models.map { |model| -> { model.count } }) do
14           yield headers, changeset
15         end
16
17         if changeset
18           changeset.reload
19           assert_equal 0, changeset.num_changes
20           assert_predicate changeset, :num_type_changes_in_sync?
21         end
22       end
23     end
24
25     def with_request(user_options = [], changeset_options = [], &)
26       user = create_user_for_request(user_options)
27       changeset = create_changeset_for_request(changeset_options, user)
28
29       yield bearer_authorization_header(user), changeset
30     end
31
32     def create_user_for_request(options)
33       factories = [:user, :importer_user, :moderator_user, :administrator_user, :super_user]
34       options = [:user, *options] unless factories.include? options[0]
35
36       create(*options)
37     end
38
39     def create_changeset_for_request(options, user)
40       options = [:changeset, *options] unless options[0] == :changeset
41
42       if options in [*positional, { **keywords }]
43         keywords = { :user => user }.merge(keywords)
44         create(*positional, **keywords)
45       else
46         create(*options, :user => user)
47       end
48     end
49
50     def with_unchanging(*, &)
51       element = create(*)
52       element_version = element.version
53       element_visible = element.visible
54
55       yield element
56
57       element.reload
58       assert_equal element_version, element.version, "element version changed"
59       assert_equal element_visible, element.visible, "element visibility changed"
60     end
61
62     ##
63     # update the changeset_id of a node element
64     def update_changeset(xml, changeset_id)
65       xml_attr_rewrite(xml, "changeset", changeset_id)
66     end
67   end
68 end