aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/test')
-rw-r--r--activerecord/test/cases/insert_all_test.rb16
-rw-r--r--activerecord/test/cases/migration/foreign_key_test.rb12
2 files changed, 26 insertions, 2 deletions
diff --git a/activerecord/test/cases/insert_all_test.rb b/activerecord/test/cases/insert_all_test.rb
index e0d79d2fab..63245719c0 100644
--- a/activerecord/test/cases/insert_all_test.rb
+++ b/activerecord/test/cases/insert_all_test.rb
@@ -7,7 +7,7 @@ class ReadonlyNameBook < Book
attr_readonly :name
end
-class PersistenceTest < ActiveRecord::TestCase
+class InsertAllTest < ActiveRecord::TestCase
fixtures :books
def test_insert
@@ -34,7 +34,7 @@ class PersistenceTest < ActiveRecord::TestCase
end
def test_insert_all_should_handle_empty_arrays
- assert_no_difference "Book.count" do
+ assert_raise ArgumentError do
Book.insert_all! []
end
end
@@ -56,30 +56,35 @@ class PersistenceTest < ActiveRecord::TestCase
def test_insert_all_returns_primary_key_if_returning_is_supported
skip unless supports_insert_returning?
+
result = Book.insert_all! [{ name: "Rework", author_id: 1 }]
assert_equal %w[ id ], result.columns
end
def test_insert_all_returns_nothing_if_returning_is_empty
skip unless supports_insert_returning?
+
result = Book.insert_all! [{ name: "Rework", author_id: 1 }], returning: []
assert_equal [], result.columns
end
def test_insert_all_returns_nothing_if_returning_is_false
skip unless supports_insert_returning?
+
result = Book.insert_all! [{ name: "Rework", author_id: 1 }], returning: false
assert_equal [], result.columns
end
def test_insert_all_returns_requested_fields
skip unless supports_insert_returning?
+
result = Book.insert_all! [{ name: "Rework", author_id: 1 }], returning: [:id, :name]
assert_equal %w[ Rework ], result.pluck("name")
end
def test_insert_all_can_skip_duplicate_records
skip unless supports_insert_on_duplicate_skip?
+
assert_no_difference "Book.count" do
Book.insert_all [{ id: 1, name: "Agile Web Development with Rails" }]
end
@@ -87,6 +92,7 @@ class PersistenceTest < ActiveRecord::TestCase
def test_insert_all_will_raise_if_duplicates_are_skipped_only_for_a_certain_conflict_target
skip unless supports_insert_on_duplicate_skip? && supports_insert_conflict_target?
+
assert_raise ActiveRecord::RecordNotUnique do
Book.insert_all [{ id: 1, name: "Agile Web Development with Rails" }],
unique_by: { columns: %i{author_id name} }
@@ -95,6 +101,7 @@ class PersistenceTest < ActiveRecord::TestCase
def test_upsert_all_updates_existing_records
skip unless supports_insert_on_duplicate_update?
+
new_name = "Agile Web Development with Rails, 4th Edition"
Book.upsert_all [{ id: 1, name: new_name }]
assert_equal new_name, Book.find(1).name
@@ -102,6 +109,7 @@ class PersistenceTest < ActiveRecord::TestCase
def test_upsert_all_does_not_update_readonly_attributes
skip unless supports_insert_on_duplicate_update?
+
new_name = "Agile Web Development with Rails, 4th Edition"
ReadonlyNameBook.upsert_all [{ id: 1, name: new_name }]
assert_not_equal new_name, Book.find(1).name
@@ -109,9 +117,11 @@ class PersistenceTest < ActiveRecord::TestCase
def test_upsert_all_does_not_update_primary_keys
skip unless supports_insert_on_duplicate_update? && supports_insert_conflict_target?
+
Book.upsert_all [{ id: 101, name: "Perelandra", author_id: 7 }]
Book.upsert_all [{ id: 103, name: "Perelandra", author_id: 7, isbn: "1974522598" }],
unique_by: { columns: %i{author_id name} }
+
book = Book.find_by(name: "Perelandra")
assert_equal 101, book.id, "Should not have updated the ID"
assert_equal "1974522598", book.isbn, "Should have updated the isbn"
@@ -119,9 +129,11 @@ class PersistenceTest < ActiveRecord::TestCase
def test_upsert_all_does_not_perform_an_upsert_if_a_partial_index_doesnt_apply
skip unless supports_insert_on_duplicate_update? && supports_insert_conflict_target? && supports_partial_index?
+
Book.upsert_all [{ name: "Out of the Silent Planet", author_id: 7, isbn: "1974522598", published_on: Date.new(1938, 4, 1) }]
Book.upsert_all [{ name: "Perelandra", author_id: 7, isbn: "1974522598" }],
unique_by: { columns: %w[ isbn ], where: "published_on IS NOT NULL" }
+
assert_equal ["Out of the Silent Planet", "Perelandra"], Book.where(isbn: "1974522598").order(:name).pluck(:name)
end
end
diff --git a/activerecord/test/cases/migration/foreign_key_test.rb b/activerecord/test/cases/migration/foreign_key_test.rb
index 6547ebb5d1..da82f62406 100644
--- a/activerecord/test/cases/migration/foreign_key_test.rb
+++ b/activerecord/test/cases/migration/foreign_key_test.rb
@@ -385,6 +385,18 @@ if ActiveRecord::Base.connection.supports_foreign_keys?
assert_equal "Table 'astronauts' has no foreign key for rockets", e.message
end
+ def test_remove_foreign_key_by_the_select_one_on_the_same_table
+ @connection.add_foreign_key :astronauts, :rockets
+ @connection.add_reference :astronauts, :myrocket, foreign_key: { to_table: :rockets }
+
+ assert_equal 2, @connection.foreign_keys("astronauts").size
+
+ @connection.remove_foreign_key :astronauts, :rockets, column: "myrocket_id"
+
+ assert_equal [["astronauts", "rockets", "rocket_id"]],
+ @connection.foreign_keys("astronauts").map { |fk| [fk.from_table, fk.to_table, fk.column] }
+ end
+
if ActiveRecord::Base.connection.supports_validate_constraints?
def test_add_invalid_foreign_key
@connection.add_foreign_key :astronauts, :rockets, column: "rocket_id", validate: false