diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 62cc813..d9d96bb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,8 +10,23 @@ jobs: build: runs-on: ubuntu-latest strategy: + fail-fast: false matrix: - ruby: ["3.0", "3.1", "3.2", "3.3"] + ruby: + - "3.0" + - "3.1" + - "3.2" + - "3.3" + gemfile: + - Gemfile + - gemfiles/Gemfile-rails-main + - gemfiles/Gemfile-rails-7-0 + - gemfiles/Gemfile-rails-6-1 + exclude: + - gemfile: gemfiles/Gemfile-rails-main + ruby: "3.0" + env: + BUNDLE_GEMFILE: ${{ matrix.gemfile }} steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 diff --git a/.gitignore b/.gitignore index 24cc8bb..6151702 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ Gemfile.lock .yardoc doc coverage +gemfiles/*.lock diff --git a/db/migrate/20171104221735_create_passwordless_sessions.rb b/db/migrate/20171104221735_create_passwordless_sessions.rb index acfede0..32734fb 100644 --- a/db/migrate/20171104221735_create_passwordless_sessions.rb +++ b/db/migrate/20171104221735_create_passwordless_sessions.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class CreatePasswordlessSessions < ActiveRecord::Migration[5.1] +class CreatePasswordlessSessions < ActiveRecord::Migration[6.0] def change create_table(:passwordless_sessions) do |t| t.belongs_to( diff --git a/gemfiles/Gemfile-rails-6-1 b/gemfiles/Gemfile-rails-6-1 new file mode 100644 index 0000000..697b927 --- /dev/null +++ b/gemfiles/Gemfile-rails-6-1 @@ -0,0 +1,18 @@ +source "https://rubygems.org" + +gemspec(path: "..") + +gem "rails", "~> 6.1.0" +gem "puma" +gem "sqlite3", "~> 1.4" +gem "yard" + +group :test do + gem "capybara", require: false + gem "codecov", require: false + gem "minitest" + gem "rails-controller-testing" +end + +# vim: ft=ruby + diff --git a/gemfiles/Gemfile-rails-7-0 b/gemfiles/Gemfile-rails-7-0 new file mode 100644 index 0000000..0ac1d5a --- /dev/null +++ b/gemfiles/Gemfile-rails-7-0 @@ -0,0 +1,17 @@ +source "https://rubygems.org" + +gemspec(path: "..") + +gem "rails", "~> 7.0.0" +gem "puma" +gem "sqlite3", "~> 1.4" +gem "yard" + +group :test do + gem "capybara", require: false + gem "codecov", require: false + gem "minitest" + gem "rails-controller-testing" +end + +# vim: ft=ruby diff --git a/gemfiles/Gemfile-rails-main b/gemfiles/Gemfile-rails-main new file mode 100644 index 0000000..31d7c59 --- /dev/null +++ b/gemfiles/Gemfile-rails-main @@ -0,0 +1,18 @@ +source "https://rubygems.org" + +gemspec(path: "..") + +gem "rails", github: "rails/rails", branch: "main" +gem "puma" +gem "sqlite3", "~> 1.4" +gem "yard" + +group :test do + gem "capybara", require: false + gem "codecov", require: false + gem "minitest" + gem "rails-controller-testing" +end + +# vim: ft=ruby + diff --git a/test/dummy/app/controllers/admin/sessions_controller.rb b/test/dummy/app/controllers/admin/sessions_controller.rb index ef03360..6c5b9fb 100644 --- a/test/dummy/app/controllers/admin/sessions_controller.rb +++ b/test/dummy/app/controllers/admin/sessions_controller.rb @@ -1,5 +1,2 @@ - -class Admin - class SessionsController < Passwordless::SessionsController - end +class Admin::SessionsController < Passwordless::SessionsController end diff --git a/test/dummy/config/application.rb b/test/dummy/config/application.rb index 1850537..dc07aa9 100644 --- a/test/dummy/config/application.rb +++ b/test/dummy/config/application.rb @@ -24,10 +24,19 @@ module Dummy class Application < Rails::Application - config.load_defaults 7.0 + config.load_defaults Rails::VERSION::STRING.to_f config.action_mailer.default_url_options = {host: "localhost", port: "3000"} routes.default_url_options[:host] = "localhost:3000" - config.i18n.available_locales = %i[en test] + + case Rails::VERSION::MAJOR + when 6 + I18n.available_locales = %i[en test] + when 7..Float::INFINITY + config.i18n.available_locales = %i[en test] + + # Silence deprecation warning + config.active_support.cache_format_version = 7.0 + end end end diff --git a/test/dummy/db/migrate/20230621085550_create_users_and_admins.rb b/test/dummy/db/migrate/20230621085550_create_users_and_admins.rb index d1ee766..519d981 100644 --- a/test/dummy/db/migrate/20230621085550_create_users_and_admins.rb +++ b/test/dummy/db/migrate/20230621085550_create_users_and_admins.rb @@ -1,4 +1,4 @@ -class CreateUsersAndAdmins < ActiveRecord::Migration[7.0] +class CreateUsersAndAdmins < ActiveRecord::Migration[6.0] def change create_table(:admins) do |t| t.string(:email) diff --git a/test/test_helper.rb b/test/test_helper.rb index fd9a9f1..336a81b 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -23,14 +23,6 @@ # to be shown. Minitest.backtrace_filter = Minitest::BacktraceFilter.new -# Load fixtures from the engine -if ActiveSupport::TestCase.respond_to?(:fixture_paths=) - ActiveSupport::TestCase.fixture_paths = [File.expand_path("../fixtures", __FILE__)] - ActionDispatch::IntegrationTest.fixture_paths = ActiveSupport::TestCase.fixture_paths - ActiveSupport::TestCase.file_fixture_path = ActiveSupport::TestCase.fixture_paths.first + "/files" - ActiveSupport::TestCase.fixtures(:all) -end - def Minitest.filter_backtrace(bt) bt.select { |line| line !~ %r{/gems/} } end @@ -64,14 +56,42 @@ def with_config(options) # This can be used when you change the`parent_mailer` config option and need # it load a different parent class. def reload_mailer! + return unless defined?(Passwordless::Mailer) Passwordless.send(:remove_const, :Mailer) - load File.expand_path("../../app/mailers/passwordless/mailer.rb", __FILE__) + load(File.expand_path("../../app/mailers/passwordless/mailer.rb", __FILE__)) end def reload_controller! + return unless defined?(Passwordless::SessionsController) Passwordless.send(:remove_const, :SessionsController) - load File.expand_path("../../app/controllers/passwordless/sessions_controller.rb", __FILE__) + load(File.expand_path("../../app/controllers/passwordless/sessions_controller.rb", __FILE__)) end end include(WithConfig) + +module FixturePaths + def self.included(base) + base.class_eval do + fixture_path_ = File.expand_path("./fixtures", __dir__) + + if respond_to?(:fixture_paths=) + self.fixture_paths = [fixture_path_] + elsif respond_to?(:fixture_path=) + self.fixture_path = fixture_path_ + else + self.file_fixture_path = "#{fixture_path_}/files" + end + + fixtures(:all) + end + end +end + +class ActionDispatch::IntegrationTest + include FixturePaths +end + +class ActiveSupport::TestCase + include FixturePaths +end