Skip to content

Rails 6.1 fixes: Use renamed connection_config method and rewrite coerced tests using unsafe raw SQL #882

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 23 additions & 42 deletions test/cases/coerced_tests.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1233,111 +1233,92 @@ class UnsafeRawSqlTest < ActiveRecord::TestCase
# Use LEN() vs length() function.
coerce_tests! %r{order: always allows Arel}
test "order: always allows Arel" do
ids_depr = with_unsafe_raw_sql_deprecated { Post.order(Arel.sql("len(title)")).pluck(:title) }
ids_disabled = with_unsafe_raw_sql_disabled { Post.order(Arel.sql("len(title)")).pluck(:title) }
titles = Post.order(Arel.sql("len(title)")).pluck(:title)

assert_equal ids_depr, ids_disabled
assert_not_empty titles
end

# Use LEN() vs length() function.
coerce_tests! %r{pluck: always allows Arel}
test "pluck: always allows Arel" do
values_depr = with_unsafe_raw_sql_deprecated { Post.includes(:comments).pluck(:title, Arel.sql("len(title)")) }
values_disabled = with_unsafe_raw_sql_disabled { Post.includes(:comments).pluck(:title, Arel.sql("len(title)")) }
excepted_values = Post.includes(:comments).pluck(:title).map { |title| [title, title.size] }
values = Post.includes(:comments).pluck(:title, Arel.sql("len(title)"))

assert_equal values_depr, values_disabled
assert_equal excepted_values, values
end

# Use LEN() vs length() function.
coerce_tests! %r{order: allows valid Array arguments}
test "order: allows valid Array arguments" do
ids_expected = Post.order(Arel.sql("author_id, len(title)")).pluck(:id)

ids_depr = with_unsafe_raw_sql_deprecated { Post.order(["author_id", "len(title)"]).pluck(:id) }
ids_disabled = with_unsafe_raw_sql_disabled { Post.order(["author_id", "len(title)"]).pluck(:id) }
ids = Post.order(["author_id", "len(title)"]).pluck(:id)

assert_equal ids_expected, ids_depr
assert_equal ids_expected, ids_disabled
assert_equal ids_expected, ids
end

test "order: allows string column names that are quoted" do
ids_expected = Post.order(Arel.sql("id")).pluck(:id)

ids_depr = with_unsafe_raw_sql_deprecated { Post.order("[id]").pluck(:id) }
ids_disabled = with_unsafe_raw_sql_disabled { Post.order("[id]").pluck(:id) }
ids = Post.order("[id]").pluck(:id)

assert_equal ids_expected, ids_depr
assert_equal ids_expected, ids_disabled
assert_equal ids_expected, ids
end

test "order: allows string column names that are quoted with table" do
ids_expected = Post.order(Arel.sql("id")).pluck(:id)

ids_depr = with_unsafe_raw_sql_deprecated { Post.order("[posts].[id]").pluck(:id) }
ids_disabled = with_unsafe_raw_sql_disabled { Post.order("[posts].[id]").pluck(:id) }
ids = Post.order("[posts].[id]").pluck(:id)

assert_equal ids_expected, ids_depr
assert_equal ids_expected, ids_disabled
assert_equal ids_expected, ids
end

test "order: allows string column names that are quoted with table and user" do
ids_expected = Post.order(Arel.sql("id")).pluck(:id)

ids_depr = with_unsafe_raw_sql_deprecated { Post.order("[dbo].[posts].[id]").pluck(:id) }
ids_disabled = with_unsafe_raw_sql_disabled { Post.order("[dbo].[posts].[id]").pluck(:id) }
ids = Post.order("[dbo].[posts].[id]").pluck(:id)

assert_equal ids_expected, ids_depr
assert_equal ids_expected, ids_disabled
assert_equal ids_expected, ids
end

test "order: allows string column names that are quoted with table, user and database" do
ids_expected = Post.order(Arel.sql("id")).pluck(:id)

ids_depr = with_unsafe_raw_sql_deprecated { Post.order("[activerecord_unittest].[dbo].[posts].[id]").pluck(:id) }
ids_disabled = with_unsafe_raw_sql_disabled { Post.order("[activerecord_unittest].[dbo].[posts].[id]").pluck(:id) }
ids = Post.order("[activerecord_unittest].[dbo].[posts].[id]").pluck(:id)

assert_equal ids_expected, ids_depr
assert_equal ids_expected, ids_disabled
assert_equal ids_expected, ids
end

test "pluck: allows string column name that are quoted" do
titles_expected = Post.pluck(Arel.sql("title"))

titles_depr = with_unsafe_raw_sql_deprecated { Post.pluck("[title]") }
titles_disabled = with_unsafe_raw_sql_disabled { Post.pluck("[title]") }
titles = Post.pluck("[title]")

assert_equal titles_expected, titles_depr
assert_equal titles_expected, titles_disabled
assert_equal titles_expected, titles
end

test "pluck: allows string column name that are quoted with table" do
titles_expected = Post.pluck(Arel.sql("title"))

titles_depr = with_unsafe_raw_sql_deprecated { Post.pluck("[posts].[title]") }
titles_disabled = with_unsafe_raw_sql_disabled { Post.pluck("[posts].[title]") }
titles = Post.pluck("[posts].[title]")

assert_equal titles_expected, titles_depr
assert_equal titles_expected, titles_disabled
assert_equal titles_expected, titles
end

test "pluck: allows string column name that are quoted with table and user" do
titles_expected = Post.pluck(Arel.sql("title"))

titles_depr = with_unsafe_raw_sql_deprecated { Post.pluck("[dbo].[posts].[title]") }
titles_disabled = with_unsafe_raw_sql_disabled { Post.pluck("[dbo].[posts].[title]") }
titles = Post.pluck("[dbo].[posts].[title]")

assert_equal titles_expected, titles_depr
assert_equal titles_expected, titles_disabled
assert_equal titles_expected, titles
end

test "pluck: allows string column name that are quoted with table, user and database" do
titles_expected = Post.pluck(Arel.sql("title"))

titles_depr = with_unsafe_raw_sql_deprecated { Post.pluck("[activerecord_unittest].[dbo].[posts].[title]") }
titles_disabled = with_unsafe_raw_sql_disabled { Post.pluck("[activerecord_unittest].[dbo].[posts].[title]") }
titles = Post.pluck("[activerecord_unittest].[dbo].[posts].[title]")

assert_equal titles_expected, titles_depr
assert_equal titles_expected, titles_disabled
assert_equal titles_expected, titles
end
end

Expand Down
2 changes: 1 addition & 1 deletion test/cases/rake_test_sqlserver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class SQLServerRakeTest < ActiveRecord::TestCase

let(:db_tasks) { ActiveRecord::Tasks::DatabaseTasks }
let(:new_database) { "activerecord_unittest_tasks" }
let(:default_configuration) { ARTest.connection_config["arunit"] }
let(:default_configuration) { ARTest.test_configuration_hashes["arunit"] }
let(:configuration) { default_configuration.merge("database" => new_database) }

before { skip "on azure" if azure_skip }
Expand Down