@@ -235,15 +235,31 @@ def test_add_foreign_key_with_column
235
235
end
236
236
237
237
def test_add_foreign_key_with_if_not_exists_to_already_referenced_table
238
- @connection . add_foreign_key :astronauts , :rockets
239
- @connection . add_foreign_key :astronauts , :rockets , column : "favorite_rocket_id" , if_not_exists : true
238
+ @connection . add_foreign_key :astronauts , :rockets , column : "favorite_rocket_id"
239
+ @connection . add_foreign_key :astronauts , :rockets , if_not_exists : true
240
240
241
241
foreign_keys = @connection . foreign_keys ( "astronauts" )
242
242
assert_equal 2 , foreign_keys . size
243
243
assert foreign_keys . all? { |fk | fk . to_table == "rockets" }
244
244
assert_equal [ "favorite_rocket_id" , "rocket_id" ] , foreign_keys . map ( &:column ) . sort
245
245
end
246
246
247
+ def test_add_foreign_key_with_if_not_exists_considers_primary_key_option
248
+ @connection . add_column :rockets , :id_for_type_change , :bigint
249
+
250
+ # Is needed to be able to reference by foreign key
251
+ @connection . add_index :rockets , :id_for_type_change , unique : true
252
+
253
+ @connection . add_foreign_key :astronauts , :rockets
254
+ @connection . add_foreign_key ( :astronauts , :rockets , primary_key : :id_for_type_change ,
255
+ name : "custom_pk" , if_not_exists : true )
256
+
257
+ foreign_keys = @connection . foreign_keys ( "astronauts" )
258
+ assert_equal 2 , foreign_keys . size
259
+ assert foreign_keys . all? { |fk | fk . to_table == "rockets" }
260
+ assert_equal [ "id" , "id_for_type_change" ] , foreign_keys . map ( &:primary_key ) . sort
261
+ end
262
+
247
263
def test_add_foreign_key_with_non_standard_primary_key
248
264
@connection . create_table :space_shuttles , id : false , force : true do |t |
249
265
t . bigint :pk , primary_key : true
@@ -424,6 +440,15 @@ def test_remove_foreign_key_by_name
424
440
assert_equal [ ] , @connection . foreign_keys ( "astronauts" )
425
441
end
426
442
443
+ def test_remove_foreign_key_if_exists_and_custom_column
444
+ @connection . add_column :astronauts , :myrocket_id , :bigint
445
+ @connection . add_foreign_key :astronauts , :rockets
446
+ assert_equal 1 , @connection . foreign_keys ( "astronauts" ) . size
447
+
448
+ @connection . remove_foreign_key :astronauts , :rockets , column : :myrocket_id , if_exists : true
449
+ assert_equal 1 , @connection . foreign_keys ( "astronauts" ) . size
450
+ end
451
+
427
452
def test_remove_foreign_non_existing_foreign_key_raises
428
453
e = assert_raises ArgumentError do
429
454
@connection . remove_foreign_key :astronauts , :rockets
0 commit comments