From 7bbf7a290ab21d65382db7168289f401a0cc4c16 Mon Sep 17 00:00:00 2001 From: Olivier Bellone Date: Sat, 31 Aug 2024 18:53:52 -0700 Subject: [PATCH] Add support for Rails 7.1 and 7.2 --- .github/workflows/test_suite.yml | 2 +- Appraisals | 10 ++++++++++ Gemfile.lock | 2 +- gemfiles/rails_7.0.gemfile | 2 +- gemfiles/rails_7.1.gemfile | 27 ++++++++++++++++++++++++++ gemfiles/rails_7.2.gemfile | 27 ++++++++++++++++++++++++++ test/dummy/config/application.rb | 2 ++ test/dummy/config/environments/test.rb | 7 +++++-- test/orm/active_record.rb | 2 +- test/support/helpers.rb | 21 ++++++++++++++++++++ test/test_password_archivable.rb | 11 +++++------ 11 files changed, 101 insertions(+), 12 deletions(-) create mode 100644 gemfiles/rails_7.1.gemfile create mode 100644 gemfiles/rails_7.2.gemfile diff --git a/.github/workflows/test_suite.yml b/.github/workflows/test_suite.yml index d15bbe62..ed85e8c8 100644 --- a/.github/workflows/test_suite.yml +++ b/.github/workflows/test_suite.yml @@ -9,7 +9,7 @@ jobs: fail-fast: false matrix: orm: [active_record, mongoid] - rails: ["7.0"] + rails: ["7.0", "7.1", "7.2"] ruby: ["3.1", "3.2", "3.3", head] env: BUNDLE_GEMFILE: gemfiles/rails_${{ matrix.rails }}.gemfile diff --git a/Appraisals b/Appraisals index f1fe5664..ed43e9b0 100644 --- a/Appraisals +++ b/Appraisals @@ -4,3 +4,13 @@ appraise 'rails-7.0' do gem 'railties', '~> 7.0.1' # Rails 7.0.0 and Ruby 3.1 are incompatible. See https://github.com/rails/rails/issues/43998 and https://github.com/rails/rails/pull/43951 gem 'minitest-rails', '~> 7.0.0' end + +appraise 'rails-7.1' do + gem 'railties', '~> 7.1.0' + gem 'minitest-rails', '~> 7.1.0' +end + +appraise 'rails-7.2' do + gem 'railties', '~> 7.2.0' + gem 'minitest-rails', '~> 7.1.0' +end diff --git a/Gemfile.lock b/Gemfile.lock index c09b64e0..0d4b28fb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,7 +2,7 @@ PATH remote: . specs: devise-security (0.18.0) - devise (>= 4.3.0) + devise (>= 4.8.1) GEM remote: https://rubygems.org/ diff --git a/gemfiles/rails_7.0.gemfile b/gemfiles/rails_7.0.gemfile index 2c4c2f43..c820b4c8 100644 --- a/gemfiles/rails_7.0.gemfile +++ b/gemfiles/rails_7.0.gemfile @@ -3,7 +3,7 @@ source "https://rubygems.org" gem "minitest-rails", "~> 7.0.0" -gem "railties", "~> 7.0.0" +gem "railties", "~> 7.0.1" gem "bigdecimal", require: false gem "drb", require: false diff --git a/gemfiles/rails_7.1.gemfile b/gemfiles/rails_7.1.gemfile new file mode 100644 index 00000000..6c0529bc --- /dev/null +++ b/gemfiles/rails_7.1.gemfile @@ -0,0 +1,27 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "minitest-rails", "~> 7.1.0" +gem "railties", "~> 7.1.0" +gem "bigdecimal", require: false +gem "drb", require: false + +group :active_record do + gem "pg" + gem "sqlite3", "~> 1.4" +end + +group :mongoid do + gem "mongoid", "~> 9.0" + + group :test do + gem "database_cleaner-mongoid", "~> 2.0" + end +end + +group :test do + gem "rails-controller-testing" +end + +gemspec path: "../" diff --git a/gemfiles/rails_7.2.gemfile b/gemfiles/rails_7.2.gemfile new file mode 100644 index 00000000..77979dfa --- /dev/null +++ b/gemfiles/rails_7.2.gemfile @@ -0,0 +1,27 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "minitest-rails", "~> 7.1.0" +gem "railties", "~> 7.2.0" +gem "bigdecimal", require: false +gem "drb", require: false + +group :active_record do + gem "pg" + gem "sqlite3", "~> 1.4" +end + +group :mongoid do + gem "mongoid", github: "AlexKovynev/mongoid", branch: "Rails72Support" + + group :test do + gem "database_cleaner-mongoid", "~> 2.0" + end +end + +group :test do + gem "rails-controller-testing" +end + +gemspec path: "../" diff --git a/test/dummy/config/application.rb b/test/dummy/config/application.rb index 8478d5bb..04d323b3 100644 --- a/test/dummy/config/application.rb +++ b/test/dummy/config/application.rb @@ -14,6 +14,8 @@ module RailsApp class Application < Rails::Application + config.load_defaults 7.0 + config.encoding = 'utf-8' config.filter_parameters += [:password] diff --git a/test/dummy/config/environments/test.rb b/test/dummy/config/environments/test.rb index a20ab9bc..bda80b49 100644 --- a/test/dummy/config/environments/test.rb +++ b/test/dummy/config/environments/test.rb @@ -22,6 +22,9 @@ config.active_support.test_order = :sorted config.log_level = :debug - config.active_record.legacy_connection_handling = false end -ActiveSupport::Deprecation.debug = true +if Gem::Version.new(Rails.version) < Gem::Version.new('7.1') + ActiveSupport::Deprecation.debug = true +else + Rails.application.deprecators.debug = true +end diff --git a/test/orm/active_record.rb b/test/orm/active_record.rb index 6c35d4f0..e81270f9 100644 --- a/test/orm/active_record.rb +++ b/test/orm/active_record.rb @@ -5,7 +5,7 @@ ActiveRecord::Migration.verbose = false ActiveRecord::Base.logger = Logger.new(nil) -ActiveRecord::MigrationContext.new(File.expand_path('../dummy/db/migrate', __dir__), ActiveRecord::SchemaMigration).migrate +ActiveRecord::MigrationContext.new(File.expand_path('../dummy/db/migrate', __dir__)).migrate DatabaseCleaner[:active_record].strategy = :transaction ORMInvalidRecordException = ActiveRecord::RecordInvalid diff --git a/test/support/helpers.rb b/test/support/helpers.rb index fdff79aa..345a0bd2 100644 --- a/test/support/helpers.rb +++ b/test/support/helpers.rb @@ -14,5 +14,26 @@ def generate_unique_username def generate_unique_email "#{generate_unique_username}@example.com" end + + def with_deprecation_behavior(behavior) + rails_71_and_up = Gem::Version.new(Rails.version) >= Gem::Version.new('7.1') + if rails_71_and_up + old_behavior = Rails.application.deprecators[DEVISE_ORM].behavior + Rails.application.deprecators.behavior = behavior + else + old_behavior = ActiveSupport::Deprecation.behavior + ActiveSupport::Deprecation.behavior = behavior + end + + begin + yield + ensure + if rails_71_and_up + Rails.application.deprecators.behavior = old_behavior + else + ActiveSupport::Deprecation.behavior = old_behavior + end + end + end end end diff --git a/test/test_password_archivable.rb b/test/test_password_archivable.rb index 17f5a2ae..57d1163a 100644 --- a/test/test_password_archivable.rb +++ b/test/test_password_archivable.rb @@ -27,12 +27,11 @@ def set_password(user, password) end test 'indirectly saving associated user does not cause deprecation warning' do - old_behavior = ActiveSupport::Deprecation.behavior - ActiveSupport::Deprecation.behavior = :raise - user = User.new email: generate_unique_email, password: 'Password1', password_confirmation: 'Password1' - widget = Widget.new(user: user) - widget.save - ActiveSupport::Deprecation.behavior = old_behavior + with_deprecation_behavior(:raise) do + user = User.new email: generate_unique_email, password: 'Password1', password_confirmation: 'Password1' + widget = Widget.new(user: user) + assert_nothing_raised { widget.save } + end end test 'does not save an OldPassword if user password was originally nil' do