Advertisement
Guest User

Untitled

a guest
Jul 30th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. require 'rubygems'
  2. require 'active_record'
  3.  
  4. ActiveRecord::Base.establish_connection({
  5. :adapter => 'mysql',
  6. :database => 'spike',
  7. :username => 'root',
  8. :password => '',
  9. :encoding => 'utf8'
  10. })
  11.  
  12. ActiveRecord::Schema.define do
  13. create_table :children, :force => true do |t|
  14. t.column :parent_id, :integer
  15. end
  16. create_table :parents, :force => true do |t|
  17. t.column :name, :integer
  18. end
  19. execute %{alter table children add constraint
  20. fk_children_parents foreign key (parent_id)
  21. references parents(id)}
  22. end
  23.  
  24. class Child < ActiveRecord::Base
  25. belongs_to :parent
  26. end
  27. class Parent < ActiveRecord::Base
  28. end
  29.  
  30. class FKChecksTest < Test::Unit::TestCase
  31.  
  32. def setup
  33. @parent = Parent.create
  34. @child = Child.create(:parent_id => @parent.id)
  35. end
  36.  
  37. def with_fk_checks_off
  38. ActiveRecord::Base.connection.update('SET FOREIGN_KEY_CHECKS = 0')
  39. yield
  40. ActiveRecord::Base.connection.update('SET FOREIGN_KEY_CHECKS = 1')
  41. end
  42.  
  43. def test_expect_deleting_target_of_foreign_key_raises
  44. assert_raises(ActiveRecord::StatementInvalid) {@parent.destroy}
  45. assert !@parent.frozen?
  46. assert !@child.reload.parent.nil?
  47. end
  48.  
  49. def test_deleting_with_fk_checks_off
  50. with_fk_checks_off { @parent.destroy }
  51. assert @parent.frozen?
  52. assert @child.reload.parent.nil?
  53. end
  54.  
  55. def test_with_fk_checks_off_cleans_up
  56. parent2 = Parent.create
  57. child2 = Child.create(:parent_id => parent2.id)
  58. with_fk_checks_off { @parent.destroy }
  59. assert_raises(ActiveRecord::StatementInvalid) {parent2.destroy}
  60. end
  61. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement