Skip to content

Commit a0097cd

Browse files
committed
Add test case for class level strict_loading_mode
1 parent 4fe1220 commit a0097cd

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

activerecord/lib/active_record/core.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ def self.configurations
140140
mattr_accessor :action_on_strict_loading_violation, instance_accessor: false, default: :raise
141141

142142
class_attribute :strict_loading_by_default, instance_accessor: false, default: false
143-
class_attribute :strict_loading_mode, instance_accessor: true, default: []
143+
class_attribute :strict_loading_mode, instance_accessor: true, default: :all
144144

145145
mattr_accessor :writing_role, instance_accessor: false, default: :writing
146146

activerecord/test/cases/strict_loading_test.rb

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def test_strict_loading_n_plus_one_only_mode
3838
developer = Developer.first
3939
ship = Ship.first
4040
ShipPart.create!(name: "Stern", ship: ship)
41-
firm = Firm.create!("name" => "NASA")
41+
firm = Firm.create!(name: "NASA")
4242
project = Project.create!(name: "Apollo", firm: firm)
4343

4444
ship.update_column(:developer_id, developer.id)
@@ -73,6 +73,51 @@ def test_strict_loading_n_plus_one_only_mode
7373
end
7474
end
7575

76+
def test_strict_loading_n_plus_one_only_mode_by_default
77+
with_strict_loading_by_default(Developer) do
78+
previous_strict_loading_mode = Developer.strict_loading_mode
79+
Developer.strict_loading_mode = :n_plus_one_only
80+
81+
developer = Developer.first
82+
ship = Ship.first
83+
ShipPart.create!(name: "Stern", ship: ship)
84+
firm = Firm.create!(name: "NASA")
85+
project = Project.create!(name: "Apollo", firm: firm)
86+
87+
ship.update_column(:developer_id, developer.id)
88+
developer.projects << project
89+
developer.reload
90+
91+
assert_predicate developer, :strict_loading?
92+
93+
# Does not raise when loading a has_many association (:projects)
94+
assert_nothing_raised do
95+
developer.projects.to_a
96+
end
97+
98+
# strict_loading is enabled for has_many associations
99+
assert developer.projects.all?(&:strict_loading?)
100+
assert_raises ActiveRecord::StrictLoadingViolationError do
101+
developer.projects.last.firm
102+
end
103+
104+
# Does not raise when a belongs_to association (:ship) loads its
105+
# has_many association (:parts)
106+
assert_nothing_raised do
107+
developer.ship.parts.to_a
108+
end
109+
110+
# strict_loading is enabled for has_many through a belongs_to
111+
assert_not developer.ship.strict_loading?
112+
assert developer.ship.parts.all?(&:strict_loading?)
113+
assert_raises ActiveRecord::StrictLoadingViolationError do
114+
developer.ship.parts.first.trinkets.to_a
115+
end
116+
ensure
117+
Developer.strict_loading_mode = previous_strict_loading_mode
118+
end
119+
end
120+
76121
def test_strict_loading
77122
Developer.all.each { |d| assert_not d.strict_loading? }
78123
Developer.strict_loading.each { |d| assert d.strict_loading? }

0 commit comments

Comments
 (0)