]> source.dussan.org Git - redmine.git/commitdiff
Updates Rails to 7.1.2 (#36320).
authorMarius Balteanu <marius.balteanu@zitec.com>
Mon, 27 Nov 2023 20:58:55 +0000 (20:58 +0000)
committerMarius Balteanu <marius.balteanu@zitec.com>
Mon, 27 Nov 2023 20:58:55 +0000 (20:58 +0000)
Patch by Takashi Kato.

git-svn-id: https://svn.redmine.org/redmine/trunk@22488 e93f8b46-1217-0410-a6f0-8f06a7374b81

19 files changed:
Gemfile
app/controllers/attachments_controller.rb
app/helpers/application_helper.rb
app/models/attachment.rb
app/models/query.rb
app/models/role.rb
app/views/custom_fields/_visibility_by_project_selector.html.erb
config/application.rb
config/environments/test.rb
config/initializers/10-patches.rb
config/initializers/zeitwerk.rb
lib/redmine/plugin.rb
test/fixtures/issues.yml
test/fixtures/journals.yml
test/fixtures/messages.yml
test/fixtures/versions.yml
test/integration/layout_test.rb
test/unit/query_test.rb
test/unit/user_query_test.rb

diff --git a/Gemfile b/Gemfile
index dadfa186d55680fe94d36e6d27921c58334f99dd..908c32343fb422316479a97becb58c885619ed87 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -2,7 +2,7 @@ source 'https://rubygems.org'
 
 ruby '>= 2.7.0', '< 3.3.0'
 
-gem 'rails', '6.1.7.6'
+gem 'rails', '7.1.2'
 gem 'rouge', '~> 4.2.0'
 gem 'mini_mime', '~> 1.1.0'
 gem "actionpack-xml_parser"
@@ -87,6 +87,10 @@ else
   warn("Please configure your config/database.yml first")
 end
 
+group :development, :test do
+  gem 'debug'
+end
+
 group :development do
   gem 'listen', '~> 3.3'
   gem 'yard', require: false
index 414ecfde0c697bdd1c87d22a382ed18adefbde5a..bc64f01b99daa65cd58b022923f8af16a05e24d5 100644 (file)
@@ -100,7 +100,7 @@ class AttachmentsController < ApplicationController
   def upload
     # Make sure that API users get used to set this content type
     # as it won't trigger Rails' automatic parsing of the request body for parameters
-    unless request.content_type == 'application/octet-stream'
+    unless request.media_type == 'application/octet-stream'
       head 406
       return
     end
index 4c130e2fa3661e91d9d7b1edcfb44adfa51f58ed..c6fce6ef057b2f1ca65df474bc4108d8ee70076c 100644 (file)
@@ -259,7 +259,7 @@ module ApplicationHelper
     when Array
       formatted_objects = object.map {|o| format_object(o, html)}
       html ? safe_join(formatted_objects, ', ') : formatted_objects.join(', ')
-    when Time
+    when Time, ActiveSupport::TimeWithZone
       format_time(object)
     when Date
       format_date(object)
@@ -634,7 +634,7 @@ module ApplicationHelper
                  'span', nil,
                  :class => "name icon icon-#{principal.class.name.downcase}"
                )
-            ) + principal
+            ) + principal.to_s
         )
     end
     s.html_safe
index 86382054da2a10ef225e25dce483fcf560d82705..97dea32bde567143d7a00260d4fa82103fa69da1 100644 (file)
@@ -345,14 +345,14 @@ class Attachment < ActiveRecord::Base
   #   })
   #
   def self.update_attachments(attachments, params)
-    params = params.transform_keys {|key| key.to_i}
-
+    converted = {}
+    params.each {|key, val| converted[key.to_i] = val}
     saved = true
     transaction do
       attachments.each do |attachment|
-        if p = params[attachment.id]
-          attachment.filename = p[:filename] if p.key?(:filename)
-          attachment.description = p[:description] if p.key?(:description)
+        if file = converted[attachment.id]
+          attachment.filename = file[:filename] if file.key?(:filename)
+          attachment.description = file[:description] if file.key?(:description)
           saved &&= attachment.save
         end
       end
index 5630f95c72feac90f551919ae58ea5bd1deea4dd..3208dc53540463bcc5717198cb901ff175b14b97 100644 (file)
@@ -257,8 +257,8 @@ class Query < ActiveRecord::Base
   has_and_belongs_to_many :roles, :join_table => "#{table_name_prefix}queries_roles#{table_name_suffix}", :foreign_key => "query_id"
   serialize :filters
   serialize :column_names
-  serialize :sort_criteria, Array
-  serialize :options, Hash
+  serialize :sort_criteria, type: Array
+  serialize :options, type: Hash
 
   validates_presence_of :name
   validates_length_of :name, :maximum => 255
@@ -1631,7 +1631,7 @@ class Query < ActiveRecord::Base
       else
         from = from - 1 # second
       end
-      if self.class.default_timezone == :utc
+      if ActiveRecord.default_timezone == :utc
         from = from.utc
       end
       s << ("#{table}.#{field} > '%s'" % [quoted_time(from, is_custom_filter)])
@@ -1640,7 +1640,7 @@ class Query < ActiveRecord::Base
       if to.is_a?(Date)
         to = date_for_user_time_zone(to.year, to.month, to.day).end_of_day
       end
-      if self.class.default_timezone == :utc
+      if ActiveRecord.default_timezone == :utc
         to = to.utc
       end
       s << ("#{table}.#{field} <= '%s'" % [quoted_time(to, is_custom_filter)])
index 078419c607c0e71cec9c9fe2f02d6d6ec312c8b9..1665d798255d638c41ba1e0dbab577f4a3f7e3f5 100644 (file)
@@ -76,7 +76,7 @@ class Role < ActiveRecord::Base
   has_many :members, :through => :member_roles
   acts_as_positioned :scope => :builtin
 
-  serialize :permissions, ::Role::PermissionsAttributeCoder
+  serialize :permissions, coder: ::Role::PermissionsAttributeCoder
   store :settings, :accessors => [:permissions_all_trackers, :permissions_tracker_ids]
 
   validates_presence_of :name
index d92e5cdabb80a546cd3044891243154d0d76aae5..25fd4978b7567c3bbe011b4ef13a9eaca412ce0f 100644 (file)
@@ -4,7 +4,7 @@
   <div id="custom_field_project_ids">
     <% project_ids = @custom_field.project_ids.to_a %>
     <%= render_project_nested_lists(Project.all) do |p|
-      content_tag('label', check_box_tag('custom_field[project_ids][]', p.id, project_ids.include?(p.id), :id => nil) + ' ' + p)
+      content_tag('label', check_box_tag('custom_field[project_ids][]', p.id, project_ids.include?(p.id), :id => nil) + ' ' + p.to_s)
     end %>
     <%= hidden_field_tag('custom_field[project_ids][]', '', :id => nil) %>
   </div>
index 5e93df122d58199e9910d415b7603565c2aecd66..48e855c9b1f2064d6b3db155b83ddda149c9aeb2 100644 (file)
@@ -23,13 +23,16 @@ module RedmineApp
     # Application configuration should go into files in config/initializers
     # -- all .rb files in that directory are automatically loaded.
 
-    # Custom directories with classes and modules you want to be autoloadable.
-    config.autoloader = :zeitwerk
+    # Adds `lib` to `config.autoload_paths` and `config.eager_load_paths`.
+    config.autoload_lib(ignore: %w(tasks generators plugins))
 
     # Only load the plugins named here, in the order given (default is alphabetical).
     # :all can be used as a placeholder for all plugins not explicitly named.
     # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
 
+    config.active_support.remove_deprecated_time_with_zone_name = true
+    config.active_support.cache_format_version = 7.0
+
     config.active_record.store_full_sti_class = true
     config.active_record.default_timezone = :local
     config.active_record.yaml_column_permitted_classes = [
index 34056df7486a25fda3650ae3f3ca51de7ebe77f6..199f1bb2736c04004d7a6056a4f867ac7596bea5 100644 (file)
@@ -30,7 +30,7 @@ Rails.application.configure do
   config.cache_store = :null_store
 
   # Raise exceptions instead of rendering exception templates.
-  config.action_dispatch.show_exceptions = true
+  config.action_dispatch.show_exceptions = :all
 
   # Disable request forgery protection in test environment.
   config.action_controller.allow_forgery_protection = false
index 4bca5edf4eed9e329dd633d06126bf095c72459d..adac8658365bf815188f717e9dd560715fc13d21 100644 (file)
@@ -47,20 +47,6 @@ module ActionView
       end
     end
   end
-
-  class Resolver
-    def find_all(name, prefix=nil, partial=false, details={}, key=nil, locals=[])
-      locals = locals.map(&:to_s).sort!.freeze
-
-      cached(key, [name, prefix, partial], details, locals) do
-        if (details[:formats] & [:xml, :json]).any?
-          details = details.dup
-          details[:formats] = details[:formats].dup + [:api]
-        end
-        _find_all(name, prefix, partial, details, key, locals)
-      end
-    end
-  end
 end
 
 ActionView::Base.field_error_proc = Proc.new{ |html_tag, instance| html_tag || ''.html_safe }
@@ -69,17 +55,14 @@ ActionView::Base.field_error_proc = Proc.new{ |html_tag, instance| html_tag || '
 module ActionView
   module Helpers
     module Tags
-      class Base
-        private
-        alias :add_options_without_non_empty_blank_option :add_options
+      SelectRenderer.prepend(Module.new do
         def add_options(option_tags, options, value = nil)
-          if options[:include_blank] == true
-            options = options.dup
-            options[:include_blank] = '&nbsp;'.html_safe
+          if options.delete(:include_blank)
+            options[:prompt] = '&nbsp;'.html_safe
           end
-          add_options_without_non_empty_blank_option(option_tags, options, value)
+          super
         end
-      end
+      end)
     end
 
     module FormHelper
@@ -156,6 +139,29 @@ module ActionController
   end
 end
 
+module ActionView
+  LookupContext.prepend(Module.new do
+    def formats=(values)
+      if (Array(values) & [:xml, :json]).any?
+        values << :api
+      end
+      super values
+    end
+  end)
+
+  Rendering.prepend(Module.new do
+    def rendered_format
+      if lookup_context.formats.first == :api
+        return request.format
+      end
+
+      super
+    end
+  end)
+end
+
+Mime::SET << 'api'
+
 # Adds asset_id parameters to assets like Rails 3 to invalidate caches in browser
 module ActionView
   module Helpers
index ab86b28e2ba7fe79ea83a45e6f157194b98e9a41..c9f7286d676adb7998f4ffb84b8856eaa0520fa1 100644 (file)
@@ -1,9 +1,6 @@
 # frozen_string_literal: true
 
 lib = Rails.root.join('lib/redmine')
-Rails.autoloaders.main.push_dir lib, namespace: Redmine
-Rails.application.config.watchable_dirs[lib] = [:rb]
-
 IGNORE_LIST = [
   'wiki_formatting/textile/redcloth3.rb',
   'core_ext.rb',
index 79e310f3194a1220ed84ccb805932cb1b17f3551..85e20f383d2f41d5c63e465b629edfdad0b1baa3 100644 (file)
@@ -467,7 +467,7 @@ module Redmine
           else
             migrations
           end
-        Migrator.new(:up, selected_migrations, schema_migration, target_version).migrate
+        Migrator.new(:up, selected_migrations, schema_migration, internal_metadata, target_version).migrate
       end
 
       def down(target_version = nil)
@@ -477,15 +477,15 @@ module Redmine
           else
             migrations
           end
-        Migrator.new(:down, selected_migrations, schema_migration, target_version).migrate
+        Migrator.new(:down, selected_migrations, schema_migration, internal_metadata, target_version).migrate
       end
 
       def run(direction, target_version)
-        Migrator.new(direction, migrations, schema_migration, target_version).run
+        Migrator.new(direction, migrations, schema_migration, internal_metadata, target_version).run
       end
 
       def open
-        Migrator.new(:up, migrations, schema_migration)
+        Migrator.new(:up, migrations, schema_migration, internal_metadata)
       end
 
       def current_version
@@ -510,7 +510,7 @@ module Redmine
           # Delete migrations that don't match .. to_i will work because the number comes first
           @all_versions ||= {}
           @all_versions[plugin.id.to_s] ||= begin
-            sm_table = ::ActiveRecord::SchemaMigration.table_name
+            sm_table = ::ActiveRecord::Base.connection.schema_migration.table_name
             migration_versions  = ActiveRecord::Base.connection.select_values("SELECT version FROM #{sm_table}")
             versions_by_plugins = migration_versions.group_by {|version| version.match(/-(.*)$/).try(:[], 1)}
             @all_versions       = versions_by_plugins.transform_values! {|versions| versions.map!(&:to_i).sort!}
index 1c2c37fa5eff8558d663f1cad04d0d07ab072074..7092c176aef32e22cf4e0656e01c3b2787a08d89 100644 (file)
@@ -1,8 +1,8 @@
 ---
 issues_001:
-  created_on: <%= 3.days.ago.to_s(:db) %>
+  created_on: <%= 3.days.ago.to_fs(:db) %>
   project_id: 1
-  updated_on: <%= 1.day.ago.to_s(:db) %>
+  updated_on: <%= 1.day.ago.to_fs(:db) %>
   priority_id: 4
   subject: Cannot print recipes
   id: 1
@@ -13,8 +13,8 @@ issues_001:
   assigned_to_id:
   author_id: 2
   status_id: 1
-  start_date: <%= 1.day.ago.to_date.to_s(:db) %>
-  due_date: <%= 10.day.from_now.to_date.to_s(:db) %>
+  start_date: <%= 1.day.ago.to_date.to_fs(:db) %>
+  due_date: <%= 10.day.from_now.to_date.to_fs(:db) %>
   estimated_hours: 200.0
   root_id: 1
   lft: 1
@@ -34,7 +34,7 @@ issues_002:
   assigned_to_id: 3
   author_id: 2
   status_id: 2
-  start_date: <%= 2.day.ago.to_date.to_s(:db) %>
+  start_date: <%= 2.day.ago.to_date.to_fs(:db) %>
   due_date:
   estimated_hours: 0.5
   root_id: 2
@@ -56,16 +56,16 @@ issues_003:
   assigned_to_id: 3
   author_id: 2
   status_id: 1
-  start_date: <%= 15.day.ago.to_date.to_s(:db) %>
-  due_date: <%= 5.day.ago.to_date.to_s(:db) %>
+  start_date: <%= 15.day.ago.to_date.to_fs(:db) %>
+  due_date: <%= 5.day.ago.to_date.to_fs(:db) %>
   estimated_hours: 1.0
   root_id: 3
   lft: 1
   rgt: 2
 issues_004:
-  created_on: <%= 5.days.ago.to_s(:db) %>
+  created_on: <%= 5.days.ago.to_fs(:db) %>
   project_id: 2
-  updated_on: <%= 2.days.ago.to_s(:db) %>
+  updated_on: <%= 2.days.ago.to_fs(:db) %>
   priority_id: 4
   subject: Issue on project 2
   id: 4
@@ -80,9 +80,9 @@ issues_004:
   lft: 1
   rgt: 2
 issues_005:
-  created_on: <%= 5.days.ago.to_s(:db) %>
+  created_on: <%= 5.days.ago.to_fs(:db) %>
   project_id: 3
-  updated_on: <%= 2.days.ago.to_s(:db) %>
+  updated_on: <%= 2.days.ago.to_fs(:db) %>
   priority_id: 4
   subject: Subproject issue
   id: 5
@@ -98,9 +98,9 @@ issues_005:
   lft: 1
   rgt: 2
 issues_006:
-  created_on: <%= 1.minute.ago.to_s(:db) %>
+  created_on: <%= 1.minute.ago.to_fs(:db) %>
   project_id: 5
-  updated_on: <%= 1.minute.ago.to_s(:db) %>
+  updated_on: <%= 1.minute.ago.to_fs(:db) %>
   priority_id: 4
   subject: Issue of a private subproject
   id: 6
@@ -111,15 +111,15 @@ issues_006:
   assigned_to_id:
   author_id: 2
   status_id: 1
-  start_date: <%= Date.today.to_s(:db) %>
-  due_date: <%= 1.days.from_now.to_date.to_s(:db) %>
+  start_date: <%= Date.today.to_fs(:db) %>
+  due_date: <%= 1.days.from_now.to_date.to_fs(:db) %>
   root_id: 6
   lft: 1
   rgt: 2
 issues_007:
-  created_on: <%= 10.days.ago.to_s(:db) %>
+  created_on: <%= 10.days.ago.to_fs(:db) %>
   project_id: 1
-  updated_on: <%= 10.days.ago.to_s(:db) %>
+  updated_on: <%= 10.days.ago.to_fs(:db) %>
   priority_id: 5
   subject: Issue due today
   id: 7
@@ -130,16 +130,16 @@ issues_007:
   assigned_to_id:
   author_id: 2
   status_id: 1
-  start_date: <%= 10.days.ago.to_s(:db) %>
-  due_date: <%= Date.today.to_s(:db) %>
+  start_date: <%= 10.days.ago.to_fs(:db) %>
+  due_date: <%= Date.today.to_fs(:db) %>
   lock_version: 0
   root_id: 7
   lft: 1
   rgt: 2
 issues_008:
-  created_on: <%= 10.days.ago.to_s(:db) %>
+  created_on: <%= 10.days.ago.to_fs(:db) %>
   project_id: 1
-  updated_on: <%= 10.days.ago.to_s(:db) %>
+  updated_on: <%= 10.days.ago.to_fs(:db) %>
   priority_id: 5
   subject: Closed issue
   id: 8
@@ -156,11 +156,11 @@ issues_008:
   root_id: 8
   lft: 1
   rgt: 2
-  closed_on: <%= 3.days.ago.to_s(:db) %>
+  closed_on: <%= 3.days.ago.to_fs(:db) %>
 issues_009:
-  created_on: <%= 1.minute.ago.to_s(:db) %>
+  created_on: <%= 1.minute.ago.to_fs(:db) %>
   project_id: 5
-  updated_on: <%= 1.minute.ago.to_s(:db) %>
+  updated_on: <%= 1.minute.ago.to_fs(:db) %>
   priority_id: 5
   subject: Blocked Issue
   id: 9
@@ -171,15 +171,15 @@ issues_009:
   assigned_to_id:
   author_id: 2
   status_id: 1
-  start_date: <%= Date.today.to_s(:db) %>
-  due_date: <%= 1.days.from_now.to_date.to_s(:db) %>
+  start_date: <%= Date.today.to_fs(:db) %>
+  due_date: <%= 1.days.from_now.to_date.to_fs(:db) %>
   root_id: 9
   lft: 1
   rgt: 2
 issues_010:
-  created_on: <%= 1.minute.ago.to_s(:db) %>
+  created_on: <%= 1.minute.ago.to_fs(:db) %>
   project_id: 5
-  updated_on: <%= 1.minute.ago.to_s(:db) %>
+  updated_on: <%= 1.minute.ago.to_fs(:db) %>
   priority_id: 5
   subject: Issue Doing the Blocking
   id: 10
@@ -190,15 +190,15 @@ issues_010:
   assigned_to_id:
   author_id: 2
   status_id: 1
-  start_date: <%= Date.today.to_s(:db) %>
-  due_date: <%= 1.days.from_now.to_date.to_s(:db) %>
+  start_date: <%= Date.today.to_fs(:db) %>
+  due_date: <%= 1.days.from_now.to_date.to_fs(:db) %>
   root_id: 10
   lft: 1
   rgt: 2
 issues_011:
-  created_on: <%= 3.days.ago.to_s(:db) %>
+  created_on: <%= 3.days.ago.to_fs(:db) %>
   project_id: 1
-  updated_on: <%= 1.day.ago.to_s(:db) %>
+  updated_on: <%= 1.day.ago.to_fs(:db) %>
   priority_id: 5
   subject: Closed issue on a closed version
   id: 11
@@ -209,16 +209,16 @@ issues_011:
   assigned_to_id:
   author_id: 2
   status_id: 5
-  start_date: <%= 1.day.ago.to_date.to_s(:db) %>
+  start_date: <%= 1.day.ago.to_date.to_fs(:db) %>
   due_date:
   root_id: 11
   lft: 1
   rgt: 2
-  closed_on: <%= 1.day.ago.to_s(:db) %>
+  closed_on: <%= 1.day.ago.to_fs(:db) %>
 issues_012:
-  created_on: <%= 3.days.ago.to_s(:db) %>
+  created_on: <%= 3.days.ago.to_fs(:db) %>
   project_id: 1
-  updated_on: <%= 1.day.ago.to_s(:db) %>
+  updated_on: <%= 1.day.ago.to_fs(:db) %>
   priority_id: 5
   subject: Closed issue on a locked version
   id: 12
@@ -229,16 +229,16 @@ issues_012:
   assigned_to_id:
   author_id: 3
   status_id: 5
-  start_date: <%= 1.day.ago.to_date.to_s(:db) %>
+  start_date: <%= 1.day.ago.to_date.to_fs(:db) %>
   due_date:
   root_id: 12
   lft: 1
   rgt: 2
-  closed_on: <%= 1.day.ago.to_s(:db) %>
+  closed_on: <%= 1.day.ago.to_fs(:db) %>
 issues_013:
-  created_on: <%= 5.days.ago.to_s(:db) %>
+  created_on: <%= 5.days.ago.to_fs(:db) %>
   project_id: 3
-  updated_on: <%= 2.days.ago.to_s(:db) %>
+  updated_on: <%= 2.days.ago.to_fs(:db) %>
   priority_id: 4
   subject: Subproject issue two
   id: 13
@@ -254,9 +254,9 @@ issues_013:
   rgt: 2
 issues_014:
   id: 14
-  created_on: <%= 15.days.ago.to_s(:db) %>
+  created_on: <%= 15.days.ago.to_fs(:db) %>
   project_id: 3
-  updated_on: <%= 15.days.ago.to_s(:db) %>
+  updated_on: <%= 15.days.ago.to_fs(:db) %>
   priority_id: 5
   subject: Private issue on public project
   fixed_version_id:
index e6cbd95cfaa9d6ba7bbd84fde29b6f49fdf70d35..0950e01fd3e33cb5fb1e048118d82a41befd7d82 100644 (file)
@@ -1,7 +1,7 @@
 ---
 journals_001:
-  created_on: <%= 2.days.ago.to_date.to_s(:db) %>
-  updated_on: <%= 1.days.ago.to_date.to_s(:db) %>
+  created_on: <%= 2.days.ago.to_date.to_fs(:db) %>
+  updated_on: <%= 1.days.ago.to_date.to_fs(:db) %>
   notes: "Journal notes"
   id: 1
   journalized_type: Issue
@@ -9,24 +9,24 @@ journals_001:
   journalized_id: 1
   updated_by_id: 1
 journals_002:
-  created_on: <%= 1.days.ago.to_date.to_s(:db) %>
-  updated_on: <%= 1.days.ago.to_date.to_s(:db) %>
+  created_on: <%= 1.days.ago.to_date.to_fs(:db) %>
+  updated_on: <%= 1.days.ago.to_date.to_fs(:db) %>
   notes: "Some notes with Redmine links: #2, r2."
   id: 2
   journalized_type: Issue
   user_id: 2
   journalized_id: 1
 journals_003:
-  created_on: <%= 1.days.ago.to_date.to_s(:db) %>
-  updated_on: <%= 1.days.ago.to_date.to_s(:db) %>
+  created_on: <%= 1.days.ago.to_date.to_fs(:db) %>
+  updated_on: <%= 1.days.ago.to_date.to_fs(:db) %>
   notes: "A comment with inline image: !picture.jpg! and a reference to #1 and r2."
   id: 3
   journalized_type: Issue
   user_id: 2
   journalized_id: 2
 journals_004:
-  created_on: <%= 1.days.ago.to_date.to_s(:db) %>
-  updated_on: <%= 1.days.ago.to_date.to_s(:db) %>
+  created_on: <%= 1.days.ago.to_date.to_fs(:db) %>
+  updated_on: <%= 1.days.ago.to_date.to_fs(:db) %>
   notes: "A comment with a private version."
   id: 4
   journalized_type: Issue
@@ -34,8 +34,8 @@ journals_004:
   journalized_id: 6
 journals_005:
   id: 5
-  created_on: <%= 1.days.ago.to_date.to_s(:db) %>
-  updated_on: <%= 1.days.ago.to_date.to_s(:db) %>
+  created_on: <%= 1.days.ago.to_date.to_fs(:db) %>
+  updated_on: <%= 1.days.ago.to_date.to_fs(:db) %>
   notes: "A comment on a private issue."
   user_id: 2
   journalized_type: Issue
index b193599d52de049bbe2f548283fe46b5f486c16a..5b5fbed359646edde854ae88e7b1cc34f4f6a113 100644 (file)
@@ -45,8 +45,8 @@ messages_004:
   parent_id: 
   board_id: 1
 messages_005: 
-  created_on: <%= 3.days.ago.to_date.to_s(:db) %>
-  updated_on: <%= 3.days.ago.to_date.to_s(:db) %>
+  created_on: <%= 3.days.ago.to_date.to_fs(:db) %>
+  updated_on: <%= 3.days.ago.to_date.to_fs(:db) %>
   subject: 'RE: post 2'
   id: 5
   replies_count: 0
@@ -56,8 +56,8 @@ messages_005:
   parent_id: 4
   board_id: 1
 messages_006: 
-  created_on: <%= 2.days.ago.to_date.to_s(:db) %>
-  updated_on: <%= 2.days.ago.to_date.to_s(:db) %>
+  created_on: <%= 2.days.ago.to_date.to_fs(:db) %>
+  updated_on: <%= 2.days.ago.to_date.to_fs(:db) %>
   subject: 'RE: post 2'
   id: 6
   replies_count: 0
@@ -67,8 +67,8 @@ messages_006:
   parent_id: 4
   board_id: 1
 messages_007: 
-  created_on: <%= 2.days.ago.to_date.to_s(:db) %>
-  updated_on: <%= 2.days.ago.to_date.to_s(:db) %>
+  created_on: <%= 2.days.ago.to_date.to_fs(:db) %>
+  updated_on: <%= 2.days.ago.to_date.to_fs(:db) %>
   subject: 'Message on a private project'
   id: 7
   replies_count: 0
index 8312666e4f318c9c79e203885fbcd8ad2c0abdea..c0c73370290c4754d53a41617377f38ccce4ddd7 100644 (file)
@@ -16,7 +16,7 @@ versions_002:
   updated_on: 2006-07-19 21:00:33 +02:00
   id: 2
   description: Stable release
-  effective_date: <%= 20.day.from_now.to_date.to_s(:db) %>
+  effective_date: <%= 20.day.from_now.to_date.to_fs(:db) %>
   status: locked
   sharing: 'none'
   wiki_page_title: ECookBookV1
index 6918b11f92cd1aab5efc0d9a78f4dd7e747f72a3..662ca55ca7f898747e34e208273ac32e32d889c5 100644 (file)
@@ -48,8 +48,8 @@ class LayoutTest < Redmine::IntegrationTest
   def test_top_menu_and_search_not_visible_when_login_required
     with_settings :login_required => '1' do
       get '/'
-      assert_select "#top-menu > ul", 0
-      assert_select "#quick-search", 0
+
+      assert_equal response.status, 302
     end
   end
 
index 52195e5847fdf8b6090bbd936447343984d74e50..f6db2aeea49306ce91d677f7ede3883c25f9442f 100644 (file)
@@ -1549,13 +1549,13 @@ class QueryTest < ActiveSupport::TestCase
     query = IssueQuery.new(:name => '_')
     filter_name = "fixed_version.due_date"
     assert_include filter_name, query.available_filters.keys
-    query.filters = {filter_name => {:operator => '=', :values => [20.day.from_now.to_date.to_s(:db)]}}
+    query.filters = {filter_name => {:operator => '=', :values => [20.day.from_now.to_date.to_fs(:db)]}}
     issues = find_issues_with_query(query)
     assert_equal [2], issues.map(&:fixed_version_id).uniq.sort
     assert_equal [2, 12], issues.map(&:id).sort
 
     query = IssueQuery.new(:name => '_')
-    query.filters = {filter_name => {:operator => '>=', :values => [21.day.from_now.to_date.to_s(:db)]}}
+    query.filters = {filter_name => {:operator => '>=', :values => [21.day.from_now.to_date.to_fs(:db)]}}
     assert_equal 0, find_issues_with_query(query).size
   end
 
@@ -2962,7 +2962,7 @@ class QueryTest < ActiveSupport::TestCase
     User.current.pref.update_attribute :time_zone, 'Hawaii'
 
     # assume timestamps are stored as utc
-    ActiveRecord::Base.default_timezone = :utc
+    ActiveRecord.default_timezone = :utc
 
     from = Date.parse '2016-03-20'
     to = Date.parse '2016-03-22'
@@ -2973,7 +2973,7 @@ class QueryTest < ActiveSupport::TestCase
     t = Time.new(2016, 3, 23, 9, 59, 59, 0).end_of_hour
     assert_equal "table.field > '#{Query.connection.quoted_date f}' AND table.field <= '#{Query.connection.quoted_date t}'", c
   ensure
-    ActiveRecord::Base.default_timezone = :local # restore Redmine default
+    ActiveRecord.default_timezone = :local # restore Redmine default
   end
 
   def test_project_statement_with_closed_subprojects
index e5d8dd312ee355ab8775247191fc73038f269c40..76ad3bd369a8760d92aa2b015967ed7d892836e0 100644 (file)
@@ -209,7 +209,7 @@ class UserQueryTest < ActiveSupport::TestCase
     users = q.results_scope
 
     assert_equal 2, users.size
-    assert_equal [2, 1], users.ids
+    assert_equal [2, 1], users.pluck(:id)
   end
 
   def find_users_with_query(query)