@@ -38,7 +38,7 @@ def test_strict_loading_n_plus_one_only_mode
38
38
developer = Developer . first
39
39
ship = Ship . first
40
40
ShipPart . create! ( name : "Stern" , ship : ship )
41
- firm = Firm . create! ( " name" => "NASA" )
41
+ firm = Firm . create! ( name : "NASA" )
42
42
project = Project . create! ( name : "Apollo" , firm : firm )
43
43
44
44
ship . update_column ( :developer_id , developer . id )
@@ -73,6 +73,51 @@ def test_strict_loading_n_plus_one_only_mode
73
73
end
74
74
end
75
75
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
+
76
121
def test_strict_loading
77
122
Developer . all . each { |d | assert_not d . strict_loading? }
78
123
Developer . strict_loading . each { |d | assert d . strict_loading? }
0 commit comments