Skip to content

Commit 1da4461

Browse files
committed
Avoid hitting the database at factory definition time
Factory bot rails's railtie tries to find factory definitions during the rails initialization hooks at rails startup. Previously, the miq_region.rb factory was running MiqRegion.my_region_number early to avoid tests that might stub my_region_number later. This caused a failure in our bin/test_database_connectivity test as we were now connecting to the database during our initializers. To fix this, we can lazily evaluate the underlying method, region_number_from_sequence, called by my_region_number when we create the region. Here is the backtrace of the failure that was occurring in the test: ``` /home/runner/work/manageiq/manageiq/vendor/bundle/ruby/3.3.0/gems/activerecord-id_regions-0.5.0/lib/active_record/id_regions.rb:128:in `region_number_from_sequence' /home/runner/work/manageiq/manageiq/vendor/bundle/ruby/3.3.0/gems/activerecord-id_regions-0.5.0/lib/active_record/id_regions.rb:139:in `discover_my_region_number' /home/runner/work/manageiq/manageiq/vendor/bundle/ruby/3.3.0/gems/activerecord-id_regions-0.5.0/lib/active_record/id_regions.rb:18:in `my_region_number' /home/runner/work/manageiq/manageiq/spec/factories/miq_region.rb:2:in `block in <main>' /home/runner/work/manageiq/manageiq/vendor/bundle/ruby/3.3.0/gems/factory_bot-6.5.5/lib/factory_bot/syntax/default.rb:37:in `instance_eval' /home/runner/work/manageiq/manageiq/vendor/bundle/ruby/3.3.0/gems/factory_bot-6.5.5/lib/factory_bot/syntax/default.rb:37:in `run' /home/runner/work/manageiq/manageiq/vendor/bundle/ruby/3.3.0/gems/factory_bot-6.5.5/lib/factory_bot/syntax/default.rb:7:in `define' /home/runner/work/manageiq/manageiq/spec/factories/miq_region.rb:1:in `<main>' /home/runner/work/manageiq/manageiq/vendor/bundle/ruby/3.3.0/gems/factory_bot-6.5.5/lib/factory_bot/find_definitions.rb:20:in `load' /home/runner/work/manageiq/manageiq/vendor/bundle/ruby/3.3.0/gems/factory_bot-6.5.5/lib/factory_bot/find_definitions.rb:20:in `block (2 levels) in find_definitions' /home/runner/work/manageiq/manageiq/vendor/bundle/ruby/3.3.0/gems/factory_bot-6.5.5/lib/factory_bot/find_definitions.rb:19:in `each' /home/runner/work/manageiq/manageiq/vendor/bundle/ruby/3.3.0/gems/factory_bot-6.5.5/lib/factory_bot/find_definitions.rb:19:in `block in find_definitions' /home/runner/work/manageiq/manageiq/vendor/bundle/ruby/3.3.0/gems/factory_bot-6.5.5/lib/factory_bot/find_definitions.rb:15:in `each' /home/runner/work/manageiq/manageiq/vendor/bundle/ruby/3.3.0/gems/factory_bot-6.5.5/lib/factory_bot/find_definitions.rb:15:in `find_definitions' /home/runner/work/manageiq/manageiq/vendor/bundle/ruby/3.3.0/gems/factory_bot_rails-6.5.1/lib/factory_bot_rails/railtie.rb:42:in `block in <class:Railtie>' /home/runner/work/manageiq/manageiq/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.2/lib/active_support/lazy_load_hooks.rb:94:in `block in execute_hook' ```
1 parent 01dbb53 commit 1da4461

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

spec/factories/miq_region.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
FactoryBot.define do
2-
region_remote = MiqRegion.my_region_number
3-
42
factory :miq_region do
5-
sequence(:region) { |region| region == region_remote ? region + 1 : region }
3+
sequence(:region) do |region|
4+
region == ApplicationRecord.region_number_from_sequence ? region + 1 : region
5+
end
66
end
77
end

0 commit comments

Comments
 (0)