aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activejob/test/cases/test_helper_test.rb18
-rw-r--r--activerecord/lib/active_record/railties/databases.rake1
-rw-r--r--guides/source/testing.md19
-rw-r--r--railties/CHANGELOG.md6
-rw-r--r--railties/lib/rails/engine.rb2
-rw-r--r--railties/test/generators/model_generator_test.rb13
-rw-r--r--railties/test/railties/engine_test.rb30
7 files changed, 66 insertions, 23 deletions
diff --git a/activejob/test/cases/test_helper_test.rb b/activejob/test/cases/test_helper_test.rb
index d6607cb6b6..32471cfacc 100644
--- a/activejob/test/cases/test_helper_test.rb
+++ b/activejob/test/cases/test_helper_test.rb
@@ -1710,28 +1710,28 @@ class PerformedJobsTest < ActiveJob::TestCase
def test_assert_performed_with_time
now = Time.now
- args = [{ argument1: { now: now } }]
+ args = [{ argument1: { now: now }, argument2: now }]
- assert_enqueued_with(job: MultipleKwargsJob, args: args) do
- MultipleKwargsJob.perform_later(argument1: { now: now })
+ assert_performed_with(job: MultipleKwargsJob, args: args) do
+ MultipleKwargsJob.perform_later(argument1: { now: now }, argument2: now)
end
end
def test_assert_performed_with_date_time
now = DateTime.now
- args = [{ argument1: { now: now } }]
+ args = [{ argument1: { now: now }, argument2: now }]
- assert_enqueued_with(job: MultipleKwargsJob, args: args) do
- MultipleKwargsJob.perform_later(argument1: { now: now })
+ assert_performed_with(job: MultipleKwargsJob, args: args) do
+ MultipleKwargsJob.perform_later(argument1: { now: now }, argument2: now)
end
end
def test_assert_performed_with_time_with_zone
now = Time.now.in_time_zone("Tokyo")
- args = [{ argument1: { now: now } }]
+ args = [{ argument1: { now: now }, argument2: now }]
- assert_enqueued_with(job: MultipleKwargsJob, args: args) do
- MultipleKwargsJob.perform_later(argument1: { now: now })
+ assert_performed_with(job: MultipleKwargsJob, args: args) do
+ MultipleKwargsJob.perform_later(argument1: { now: now }, argument2: now)
end
end
diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake
index 450054bc85..e0bc5180c0 100644
--- a/activerecord/lib/active_record/railties/databases.rake
+++ b/activerecord/lib/active_record/railties/databases.rake
@@ -143,7 +143,6 @@ db_namespace = namespace :db do
namespace :up do
ActiveRecord::Tasks::DatabaseTasks.for_each do |spec_name|
- desc "up for #{spec_name}"
task spec_name => :load_config do
raise "VERSION is required" if !ENV["VERSION"] || ENV["VERSION"].empty?
diff --git a/guides/source/testing.md b/guides/source/testing.md
index 1fad02812b..26448958ea 100644
--- a/guides/source/testing.md
+++ b/guides/source/testing.md
@@ -1733,6 +1733,25 @@ class ProductTest < ActiveSupport::TestCase
end
```
+### Asserting Time Arguments in Jobs
+
+When serializing job arguments, `Time`, `DateTime`, and `ActiveSupport::TimeWithZone` lose microsecond precision. This means comparing deserialized time with actual time doesn't always work. To compensate for the loss of precision, `assert_enqueued_with` and `assert_performed_with` will remove microseconds from time objects in argument assertions.
+
+```ruby
+require 'test_helper'
+
+class ProductTest < ActiveSupport::TestCase
+ include ActiveJob::TestHelper
+
+ test 'that product is reserved at a given time' do
+ now = Time.now
+ assert_performed_with(job: ReservationJob, args: [product, now]) do
+ product.reserve(now)
+ end
+ end
+end
+```
+
Testing Action Cable
--------------------
diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md
index 78a94f7c28..e5f9e37c33 100644
--- a/railties/CHANGELOG.md
+++ b/railties/CHANGELOG.md
@@ -1,3 +1,9 @@
+* Allow loading seeds without ActiveJob.
+
+ Fixes #35782
+
+ *Jeremy Weathers*
+
* `null: false` is set in the migrations by default for column pointed by
`belongs_to` / `references` association generated by model generator.
diff --git a/railties/lib/rails/engine.rb b/railties/lib/rails/engine.rb
index eb2f0e8fca..06b4019fc7 100644
--- a/railties/lib/rails/engine.rb
+++ b/railties/lib/rails/engine.rb
@@ -552,7 +552,7 @@ module Rails
seed_file = paths["db/seeds.rb"].existent.first
return unless seed_file
- if config.active_job.queue_adapter == :async
+ if config.try(:active_job)&.queue_adapter == :async
with_inline_jobs { load(seed_file) }
else
load(seed_file)
diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb
index df765432bc..d6abaf7a6f 100644
--- a/railties/test/generators/model_generator_test.rb
+++ b/railties/test/generators/model_generator_test.rb
@@ -422,18 +422,7 @@ class ModelGeneratorTest < Rails::Generators::TestCase
end
end
- def test_required_polymorphic_belongs_to_generates_correct_model
- run_generator ["account", "supplier:references{polymorphic}"]
-
- expected_file = <<~FILE
- class Account < ApplicationRecord
- belongs_to :supplier, polymorphic: true
- end
- FILE
- assert_file "app/models/account.rb", expected_file
- end
-
- def test_required_and_polymorphic_are_order_independent
+ def test_polymorphic_belongs_to_generates_correct_model
run_generator ["account", "supplier:references{polymorphic}"]
expected_file = <<~FILE
diff --git a/railties/test/railties/engine_test.rb b/railties/test/railties/engine_test.rb
index fe5c62c07d..8ce68dbcfa 100644
--- a/railties/test/railties/engine_test.rb
+++ b/railties/test/railties/engine_test.rb
@@ -904,6 +904,32 @@ YAML
assert_instance_of ActiveJob::QueueAdapters::DelayedJobAdapter, ActiveJob::Base.queue_adapter
end
+ test "seed data can be loaded when ActiveJob is not present" do
+ @plugin.write "db/seeds.rb", <<-RUBY
+ Bukkits::Engine.config.bukkits_seeds_loaded = true
+ RUBY
+
+ app_file "db/seeds.rb", <<-RUBY
+ Rails.application.config.app_seeds_loaded = true
+ RUBY
+
+ boot_rails
+
+ # In a real app, config.active_job would be undefined when
+ # NOT requiring rails/all AND NOT requiring active_job/railtie
+ # that doesn't work as expected in this test environment, so:
+ undefine_config_option(:active_job)
+ assert_raise(NoMethodError) { Rails.application.config.active_job }
+
+ assert_raise(NoMethodError) { Rails.application.config.app_seeds_loaded }
+ assert_raise(NoMethodError) { Bukkits::Engine.config.bukkits_seeds_loaded }
+
+ Rails.application.load_seed
+ assert Rails.application.config.app_seeds_loaded
+ Bukkits::Engine.load_seed
+ assert Bukkits::Engine.config.bukkits_seeds_loaded
+ end
+
test "skips nonexistent seed data" do
FileUtils.rm "#{app_path}/db/seeds.rb"
boot_rails
@@ -1523,6 +1549,10 @@ YAML
Rails.application
end
+ def undefine_config_option(name)
+ Rails.application.config.class.class_variable_get(:@@options).delete(name)
+ end
+
# Restrict frameworks to load in order to avoid engine frameworks affect tests.
def restrict_frameworks
remove_from_config("require 'rails/all'")