1 # frozen_string_literal: true
 
   4   module ElementsTestHelper
 
  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
 
  19           assert_equal 0, changeset.num_changes
 
  20           assert_predicate changeset, :num_type_changes_in_sync?
 
  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)
 
  29       yield bearer_authorization_header(user), changeset
 
  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]
 
  39     def create_changeset_for_request(options, user)
 
  40       options = [:changeset, *options] unless options[0] == :changeset
 
  42       if options in [*positional, { **keywords }]
 
  43         keywords = { :user => user }.merge(keywords)
 
  44         create(*positional, **keywords)
 
  46         create(*options, :user => user)
 
  50     def with_unchanging(*, &)
 
  52       element_version = element.version
 
  53       element_visible = element.visible
 
  58       assert_equal element_version, element.version, "element version changed"
 
  59       assert_equal element_visible, element.visible, "element visibility changed"
 
  63     # update the changeset_id of a node element
 
  64     def update_changeset(xml, changeset_id)
 
  65       xml_attr_rewrite(xml, "changeset", changeset_id)