require 'test_helper' require 'active_record/schema_dumper' class SchemaDumperTest < ActiveSupport::TestCase def setup teardown end def teardown ['V_PEOPLE', 'V_PROFILE'].each do |view| if ActiveRecord::Base.connection.adapter_name == 'OracleEnhanced' ActiveRecord::Base.connection.execute(" DECLARE CURSOR C1 is SELECT view_name FROM user_views where view_name = '#{view}'; BEGIN FOR I IN C1 LOOP EXECUTE IMMEDIATE 'DROP VIEW '||I.view_name||''; END LOOP; END; "); else ActiveRecord::Base.connection.execute("drop view if exists #{view}") end end end def test_view create_people_view stream = StringIO.new dumper = ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream) stream.rewind file_name = File.dirname(__FILE__) + "/schema.#{$connection}.expected.rb" puts "FileName : #{file_name}" assert_equal File.open(File.dirname(__FILE__) + "/schema.#{$connection}.expected.rb", 'r').readlines, stream.readlines end def test_dump_and_load create_people_view assert_dump_and_load_succeed end def test_union Person.create(:first_name => 'Joe', :last_name => 'User', :ssn => '123456789') Person2.create(:first_name => 'Jane', :last_name => 'Doe', :ssn => '222334444') select_stmt = <<-HERE select first_name, last_name, ssn from people UNION select first_name, last_name, ssn from people2 HERE ActiveRecord::Base.connection.create_view(:v_profile, select_stmt, :force => true) do |v| v.column :first_name v.column :last_name v.column :ssn end assert_dump_and_load_succeed end def test_view_creation_order ActiveRecord::SchemaDumper.view_creation_order << :v_people create_people_view assert_dump_and_load_succeed ActiveRecord::SchemaDumper.view_creation_order.pop end def test_symbol_ignore ActiveRecord::SchemaDumper.ignore_views << :v_people create_people_view assert_dump_and_load_succeed ActiveRecord::SchemaDumper.ignore_views.pop end def test_regex_ignore ActiveRecord::SchemaDumper.ignore_views << Regexp.new(/v_people/) create_people_view assert_dump_and_load_succeed ActiveRecord::SchemaDumper.ignore_views.pop end # TODO : StandardError expected but nothing was raised. #def test_non_allowed_object_raises_error # create_people_view # ActiveRecord::SchemaDumper.ignore_views << 0 # begin # schema_file = File.dirname(__FILE__) + "/schema.#{$connection}.out.rb" # File.open(schema_file, "w") do |file| # assert_raise(StandardError) do # ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file) # end # end # ensure # ActiveRecord::SchemaDumper.ignore_views.pop # end #end # DOTO c'est quio mock #def test_logging_error # ActiveRecord::SchemaDumper.ignore_views << 0 # old_logger = ActiveRecord::Base.logger # # begin # mock_logger = flexmock('logger', :error => nil) # mock_logger.should_receive(:error) # ActiveRecord::Base.logger = mock_logger # schema_file = File.dirname(__FILE__) + "/schema.#{$connection}.out.rb" # File.open(schema_file, "w") do |file| # ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file) # end # ensure # ActiveRecord::SchemaDumper.ignore_views.pop # ActiveRecord::Base.logger = old_logger # end #end def assert_dump_and_load_succeed schema_file = File.dirname(__FILE__) + "/schema.#{$connection}.out.rb" assert_nothing_raised do File.open(schema_file, "w") do |file| ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file) end end assert_nothing_raised do load(schema_file) end puts "end assert" end end