92aaecf94b
MSP-11124
157 lines
3.7 KiB
Ruby
157 lines
3.7 KiB
Ruby
shared_examples_for 'Msf::DBManager::Migration' do
|
|
it { should be_a Msf::DBManager::Migration }
|
|
|
|
|
|
context '#add_rails_engine_migration_paths' do
|
|
def add_rails_engine_migration_paths
|
|
db_manager.add_rails_engine_migration_paths
|
|
end
|
|
|
|
it 'should not add duplicate paths to ActiveRecord::Migrator.migrations_paths' do
|
|
add_rails_engine_migration_paths
|
|
|
|
expect {
|
|
add_rails_engine_migration_paths
|
|
}.to_not change {
|
|
ActiveRecord::Migrator.migrations_paths.length
|
|
}
|
|
|
|
ActiveRecord::Migrator.migrations_paths.uniq.should == ActiveRecord::Migrator.migrations_paths
|
|
end
|
|
end
|
|
|
|
context '#migrate' do
|
|
def migrate
|
|
db_manager.migrate
|
|
end
|
|
|
|
it 'should call ActiveRecord::Migrator.migrate' do
|
|
ActiveRecord::Migrator.should_receive(:migrate).with(
|
|
ActiveRecord::Migrator.migrations_paths
|
|
)
|
|
|
|
migrate
|
|
end
|
|
|
|
it 'should return migrations that were ran from ActiveRecord::Migrator.migrate' do
|
|
migrations = [double('Migration 1')]
|
|
ActiveRecord::Migrator.stub(:migrate => migrations)
|
|
|
|
migrate.should == migrations
|
|
end
|
|
|
|
it 'should reset the column information' do
|
|
db_manager.should_receive(:reset_column_information)
|
|
|
|
migrate
|
|
end
|
|
|
|
context 'with StandardError from ActiveRecord::Migration.migrate' do
|
|
let(:error) do
|
|
StandardError.new(message)
|
|
end
|
|
|
|
let(:message) do
|
|
"Error during migration"
|
|
end
|
|
|
|
before(:each) do
|
|
ActiveRecord::Migrator.stub(:migrate).and_raise(error)
|
|
end
|
|
|
|
it 'should set Msf::DBManager#error' do
|
|
migrate
|
|
|
|
db_manager.error.should == error
|
|
end
|
|
|
|
it 'should log error message at error level' do
|
|
db_manager.should_receive(:elog) do |error_message|
|
|
error_message.should include(error.to_s)
|
|
end
|
|
|
|
migrate
|
|
end
|
|
|
|
it 'should log error backtrace at debug level' do
|
|
db_manager.should_receive(:dlog) do |debug_message|
|
|
debug_message.should include('Call stack')
|
|
end
|
|
|
|
migrate
|
|
end
|
|
end
|
|
|
|
context 'with verbose' do
|
|
def migrate
|
|
db_manager.migrate(verbose)
|
|
end
|
|
|
|
context 'false' do
|
|
let(:verbose) do
|
|
false
|
|
end
|
|
|
|
it 'should set ActiveRecord::Migration.verbose to false' do
|
|
ActiveRecord::Migration.should_receive(:verbose=).with(verbose)
|
|
|
|
migrate
|
|
end
|
|
end
|
|
|
|
context 'true' do
|
|
let(:verbose) do
|
|
true
|
|
end
|
|
|
|
it 'should set ActiveRecord::Migration.verbose to true' do
|
|
ActiveRecord::Migration.should_receive(:verbose=).with(verbose)
|
|
|
|
migrate
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'without verbose' do
|
|
it 'should set ActiveRecord::Migration.verbose to false' do
|
|
ActiveRecord::Migration.should_receive(:verbose=).with(false)
|
|
|
|
db_manager.migrate
|
|
end
|
|
end
|
|
end
|
|
|
|
context '#migrated' do
|
|
it { should respond_to :migrated }
|
|
it { should respond_to :migrated= }
|
|
end
|
|
|
|
context '#reset_column_information' do
|
|
def reset_column_information
|
|
db_manager.send(:reset_column_information)
|
|
end
|
|
|
|
it 'should use ActiveRecord::Base.descendants to find both direct and indirect subclasses' do
|
|
ActiveRecord::Base.should_receive(:descendants).and_return([])
|
|
|
|
reset_column_information
|
|
end
|
|
|
|
it 'should reset column information on each descendant of ActiveRecord::Base' do
|
|
descendants = []
|
|
|
|
1.upto(2) do |i|
|
|
descendants << double("Descendant #{i}")
|
|
end
|
|
|
|
ActiveRecord::Base.stub(:descendants => descendants)
|
|
|
|
descendants.each do |descendant|
|
|
descendant.should_receive(:reset_column_information)
|
|
end
|
|
|
|
reset_column_information
|
|
end
|
|
end
|
|
end
|