Skip to content

Commit 81ec762

Browse files
authored
Rails 6.1: Fixes related to while_preventing_writes (#888)
* fix tests: stop calling while_preventing_writes on ActiveRecord::Base.connection_handler, call it on ActiveRecord::Base raise added here rails/rails#40489 * add missing coerced test Missing test was moved to another testcase here rails/rails@31461d8#diff-39aac151bf5772be2c6c4fec49bf5cdf5a21ca816fe181ef01466ecd941bef9b * coearce test that asserts no queries. We do some read queries
1 parent a76c02d commit 81ec762

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

test/cases/adapter_test_sqlserver.rb

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -469,12 +469,11 @@ class AdapterTestSQLServer < ActiveRecord::TestCase
469469
describe "block writes to a database" do
470470
def setup
471471
@conn = ActiveRecord::Base.connection
472-
@connection_handler = ActiveRecord::Base.connection_handler
473472
end
474473

475474
def test_errors_when_an_insert_query_is_called_while_preventing_writes
476475
assert_raises(ActiveRecord::ReadOnlyError) do
477-
@connection_handler.while_preventing_writes do
476+
ActiveRecord::Base.while_preventing_writes do
478477
@conn.insert("INSERT INTO [subscribers] ([nick]) VALUES ('aido')")
479478
end
480479
end
@@ -484,7 +483,7 @@ def test_errors_when_an_update_query_is_called_while_preventing_writes
484483
@conn.insert("INSERT INTO [subscribers] ([nick]) VALUES ('aido')")
485484

486485
assert_raises(ActiveRecord::ReadOnlyError) do
487-
@connection_handler.while_preventing_writes do
486+
ActiveRecord::Base.while_preventing_writes do
488487
@conn.update("UPDATE [subscribers] SET [subscribers].[name] = 'Aidan' WHERE [subscribers].[nick] = 'aido'")
489488
end
490489
end
@@ -494,7 +493,7 @@ def test_errors_when_a_delete_query_is_called_while_preventing_writes
494493
@conn.execute("INSERT INTO [subscribers] ([nick]) VALUES ('aido')")
495494

496495
assert_raises(ActiveRecord::ReadOnlyError) do
497-
@connection_handler.while_preventing_writes do
496+
ActiveRecord::Base.while_preventing_writes do
498497
@conn.execute("DELETE FROM [subscribers] WHERE [subscribers].[nick] = 'aido'")
499498
end
500499
end
@@ -503,7 +502,7 @@ def test_errors_when_a_delete_query_is_called_while_preventing_writes
503502
def test_doesnt_error_when_a_select_query_is_called_while_preventing_writes
504503
@conn.execute("INSERT INTO [subscribers] ([nick]) VALUES ('aido')")
505504

506-
@connection_handler.while_preventing_writes do
505+
ActiveRecord::Base.while_preventing_writes do
507506
assert_equal 1, @conn.execute("SELECT * FROM [subscribers] WHERE [subscribers].[nick] = 'aido'")
508507
end
509508
end

test/cases/coerced_tests.rb

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,33 @@ def test_value_limit_violations_are_translated_to_specific_exception_coerced
4444
end
4545
end
4646

47+
module ActiveRecord
48+
class AdapterPreventWritesTest < ActiveRecord::TestCase
49+
# Fix randomly failing test. The loading of the model's schema was affecting the test.
50+
coerce_tests! :test_errors_when_an_insert_query_is_called_while_preventing_writes
51+
def test_errors_when_an_insert_query_is_called_while_preventing_writes_coerced
52+
Subscriber.send(:load_schema!)
53+
original_test_errors_when_an_insert_query_is_called_while_preventing_writes
54+
end
55+
end
56+
end
57+
58+
module ActiveRecord
59+
class AdapterPreventWritesLegacyTest < ActiveRecord::TestCase
60+
# We do some read queries. Remove assert_no_queries
61+
coerce_tests! :test_errors_when_an_insert_query_prefixed_by_a_slash_star_comment_is_called_while_preventing_writes
62+
def test_errors_when_an_insert_query_prefixed_by_a_slash_star_comment_is_called_while_preventing_writes_coerced
63+
@connection_handler.while_preventing_writes do
64+
@connection.transaction do
65+
assert_raises(ActiveRecord::ReadOnlyError) do
66+
@connection.insert("/* some comment */ INSERT INTO subscribers(nick) VALUES ('138853948594')", nil, false)
67+
end
68+
end
69+
end
70+
end
71+
end
72+
end
73+
4774
module ActiveRecord
4875
class AdapterTestWithoutTransaction < ActiveRecord::TestCase
4976
# SQL Server does not allow truncation of tables that are referenced by foreign key
@@ -156,7 +183,7 @@ def test_update_date_time_attributes_with_default_timezone_local
156183
# SQL Server does not have query for release_savepoint
157184
coerce_tests! %r{an empty transaction does not raise if preventing writes}
158185
test "an empty transaction does not raise if preventing writes coerced" do
159-
ActiveRecord::Base.connection_handler.while_preventing_writes do
186+
ActiveRecord::Base.while_preventing_writes do
160187
assert_queries(1, ignore_none: true) do
161188
Bird.transaction do
162189
ActiveRecord::Base.connection.materialize_transactions

0 commit comments

Comments
 (0)