Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use one system call whenever possible, group rake and Dir.chdir calls #5356

Merged
merged 1 commit into from
Mar 9, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
13 changes: 4 additions & 9 deletions railties/test/application/initializers/frameworks_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -196,9 +196,8 @@ def from_bar_helper

test "use schema cache dump" do
Dir.chdir(app_path) do
`rails generate model post title:string`
`bundle exec rake db:migrate`
`bundle exec rake db:schema:cache:dump`
`rails generate model post title:string;
bundle exec rake db:migrate db:schema:cache:dump`
end
require "#{app_path}/config/environment"
ActiveRecord::Base.connection.drop_table("posts") # force drop posts table for test.
Expand All @@ -207,17 +206,13 @@ def from_bar_helper

test "expire schema cache dump" do
Dir.chdir(app_path) do
`rails generate model post title:string`
`bundle exec rake db:migrate`
`bundle exec rake db:schema:cache:dump`

`bundle exec rake db:rollback`
`rails generate model post title:string;
bundle exec rake db:migrate db:schema:cache:dump db:rollback`
end
silence_warnings {
require "#{app_path}/config/environment"
assert !ActiveRecord::Base.connection.schema_cache.tables["posts"]
}
end

end
end
163 changes: 82 additions & 81 deletions railties/test/application/rake/migrations_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,44 +16,45 @@ def teardown
test 'running migrations with given scope' do
Dir.chdir(app_path) do
`rails generate model user username:string password:string`
end
app_file "db/migrate/01_a_migration.bukkits.rb", <<-MIGRATION
class AMigration < ActiveRecord::Migration
end
MIGRATION

output = Dir.chdir(app_path) { `rake db:migrate SCOPE=bukkits` }
assert_no_match(/create_table\(:users\)/, output)
assert_no_match(/CreateUsers/, output)
assert_no_match(/add_column\(:users, :email, :string\)/, output)
app_file "db/migrate/01_a_migration.bukkits.rb", <<-MIGRATION
class AMigration < ActiveRecord::Migration
end
MIGRATION

output = `rake db:migrate SCOPE=bukkits`
assert_no_match(/create_table\(:users\)/, output)
assert_no_match(/CreateUsers/, output)
assert_no_match(/add_column\(:users, :email, :string\)/, output)

assert_match(/AMigration: migrated/, output)
assert_match(/AMigration: migrated/, output)

output = Dir.chdir(app_path) { `rake db:migrate SCOPE=bukkits VERSION=0` }
assert_no_match(/drop_table\(:users\)/, output)
assert_no_match(/CreateUsers/, output)
assert_no_match(/remove_column\(:users, :email\)/, output)
output = `rake db:migrate SCOPE=bukkits VERSION=0`
assert_no_match(/drop_table\(:users\)/, output)
assert_no_match(/CreateUsers/, output)
assert_no_match(/remove_column\(:users, :email\)/, output)

assert_match(/AMigration: reverted/, output)
assert_match(/AMigration: reverted/, output)
end
end

test 'model and migration generator with change syntax' do
Dir.chdir(app_path) do
`rails generate model user username:string password:string`
`rails generate migration add_email_to_users email:string`
`rails generate model user username:string password:string;
rails generate migration add_email_to_users email:string`

output = `rake db:migrate`
assert_match(/create_table\(:users\)/, output)
assert_match(/CreateUsers: migrated/, output)
assert_match(/add_column\(:users, :email, :string\)/, output)
assert_match(/AddEmailToUsers: migrated/, output)

output = `rake db:rollback STEP=2`
assert_match(/drop_table\("users"\)/, output)
assert_match(/CreateUsers: reverted/, output)
assert_match(/remove_column\("users", :email\)/, output)
assert_match(/AddEmailToUsers: reverted/, output)
end

output = Dir.chdir(app_path){ `rake db:migrate` }
assert_match(/create_table\(:users\)/, output)
assert_match(/CreateUsers: migrated/, output)
assert_match(/add_column\(:users, :email, :string\)/, output)
assert_match(/AddEmailToUsers: migrated/, output)

output = Dir.chdir(app_path){ `rake db:rollback STEP=2` }
assert_match(/drop_table\("users"\)/, output)
assert_match(/CreateUsers: reverted/, output)
assert_match(/remove_column\("users", :email\)/, output)
assert_match(/AddEmailToUsers: reverted/, output)
end

test 'migration status when schema migrations table is not present' do
Expand All @@ -63,94 +64,94 @@ class AMigration < ActiveRecord::Migration

test 'test migration status' do
Dir.chdir(app_path) do
`rails generate model user username:string password:string`
`rails generate migration add_email_to_users email:string`
end
`rails generate model user username:string password:string;
rails generate migration add_email_to_users email:string;
rake db:migrate`

Dir.chdir(app_path) { `rake db:migrate` }
output = Dir.chdir(app_path) { `rake db:migrate:status` }
output = `rake db:migrate:status`

assert_match(/up\s+\d{14}\s+Create users/, output)
assert_match(/up\s+\d{14}\s+Add email to users/, output)
assert_match(/up\s+\d{14}\s+Create users/, output)
assert_match(/up\s+\d{14}\s+Add email to users/, output)

Dir.chdir(app_path) { `rake db:rollback STEP=1` }
output = Dir.chdir(app_path) { `rake db:migrate:status` }
`rake db:rollback STEP=1`
output = `rake db:migrate:status`

assert_match(/up\s+\d{14}\s+Create users/, output)
assert_match(/down\s+\d{14}\s+Add email to users/, output)
assert_match(/up\s+\d{14}\s+Create users/, output)
assert_match(/down\s+\d{14}\s+Add email to users/, output)
end
end

test 'migration status without timestamps' do
add_to_config('config.active_record.timestamped_migrations = false')

Dir.chdir(app_path) do
`rails generate model user username:string password:string`
`rails generate migration add_email_to_users email:string`
end
`rails generate model user username:string password:string;
rails generate migration add_email_to_users email:string;
rake db:migrate`

Dir.chdir(app_path) { `rake db:migrate` }
output = Dir.chdir(app_path) { `rake db:migrate:status` }
output = `rake db:migrate:status`

assert_match(/up\s+\d{3,}\s+Create users/, output)
assert_match(/up\s+\d{3,}\s+Add email to users/, output)
assert_match(/up\s+\d{3,}\s+Create users/, output)
assert_match(/up\s+\d{3,}\s+Add email to users/, output)

Dir.chdir(app_path) { `rake db:rollback STEP=1` }
output = Dir.chdir(app_path) { `rake db:migrate:status` }
`rake db:rollback STEP=1`
output = `rake db:migrate:status`

assert_match(/up\s+\d{3,}\s+Create users/, output)
assert_match(/down\s+\d{3,}\s+Add email to users/, output)
assert_match(/up\s+\d{3,}\s+Create users/, output)
assert_match(/down\s+\d{3,}\s+Add email to users/, output)
end
end

test 'test migration status after rollback and redo' do
Dir.chdir(app_path) do
`rails generate model user username:string password:string`
`rails generate migration add_email_to_users email:string`
end
`rails generate model user username:string password:string;
rails generate migration add_email_to_users email:string;
rake db:migrate`

Dir.chdir(app_path) { `rake db:migrate` }
output = Dir.chdir(app_path) { `rake db:migrate:status` }
output = `rake db:migrate:status`

assert_match(/up\s+\d{14}\s+Create users/, output)
assert_match(/up\s+\d{14}\s+Add email to users/, output)
assert_match(/up\s+\d{14}\s+Create users/, output)
assert_match(/up\s+\d{14}\s+Add email to users/, output)

Dir.chdir(app_path) { `rake db:rollback STEP=2` }
output = Dir.chdir(app_path) { `rake db:migrate:status` }
`rake db:rollback STEP=2`
output = `rake db:migrate:status`

assert_match(/down\s+\d{14}\s+Create users/, output)
assert_match(/down\s+\d{14}\s+Add email to users/, output)
assert_match(/down\s+\d{14}\s+Create users/, output)
assert_match(/down\s+\d{14}\s+Add email to users/, output)

Dir.chdir(app_path) { `rake db:migrate:redo` }
output = Dir.chdir(app_path) { `rake db:migrate:status` }
`rake db:migrate:redo`
output = `rake db:migrate:status`

assert_match(/up\s+\d{14}\s+Create users/, output)
assert_match(/up\s+\d{14}\s+Add email to users/, output)
assert_match(/up\s+\d{14}\s+Create users/, output)
assert_match(/up\s+\d{14}\s+Add email to users/, output)
end
end

test 'migration status after rollback and redo without timestamps' do
add_to_config('config.active_record.timestamped_migrations = false')

Dir.chdir(app_path) do
`rails generate model user username:string password:string`
`rails generate migration add_email_to_users email:string`
end
`rails generate model user username:string password:string;
rails generate migration add_email_to_users email:string;
rake db:migrate`

Dir.chdir(app_path) { `rake db:migrate` }
output = Dir.chdir(app_path) { `rake db:migrate:status` }
output = `rake db:migrate:status`

assert_match(/up\s+\d{3,}\s+Create users/, output)
assert_match(/up\s+\d{3,}\s+Add email to users/, output)
assert_match(/up\s+\d{3,}\s+Create users/, output)
assert_match(/up\s+\d{3,}\s+Add email to users/, output)

Dir.chdir(app_path) { `rake db:rollback STEP=2` }
output = Dir.chdir(app_path) { `rake db:migrate:status` }
`rake db:rollback STEP=2`
output = `rake db:migrate:status`

assert_match(/down\s+\d{3,}\s+Create users/, output)
assert_match(/down\s+\d{3,}\s+Add email to users/, output)
assert_match(/down\s+\d{3,}\s+Create users/, output)
assert_match(/down\s+\d{3,}\s+Add email to users/, output)

Dir.chdir(app_path) { `rake db:migrate:redo` }
output = Dir.chdir(app_path) { `rake db:migrate:status` }
`rake db:migrate:redo`
output = `rake db:migrate:status`

assert_match(/up\s+\d{3,}\s+Create users/, output)
assert_match(/up\s+\d{3,}\s+Add email to users/, output)
assert_match(/up\s+\d{3,}\s+Create users/, output)
assert_match(/up\s+\d{3,}\s+Add email to users/, output)
end
end
end
end
Expand Down
3 changes: 1 addition & 2 deletions railties/test/application/rake/notes_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
module ApplicationTests
module RakeTests
class RakeNotesTest < ActiveSupport::TestCase
def setup
def setup
build_app
require "rails/all"
end
Expand All @@ -13,7 +13,6 @@ def teardown
end

test 'notes' do

app_file "app/views/home/index.html.erb", "<% # TODO: note in erb %>"
app_file "app/views/home/index.html.haml", "-# TODO: note in haml"
app_file "app/views/home/index.html.slim", "/ TODO: note in slim"
Expand Down
25 changes: 11 additions & 14 deletions railties/test/application/rake_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,9 @@ def test_logger_is_flushed_when_exiting_production_rake_tasks

def test_loading_specific_fixtures
Dir.chdir(app_path) do
`rails generate model user username:string password:string`
`rails generate model product name:string`
`rake db:migrate`
`rails generate model user username:string password:string;
rails generate model product name:string;
rake db:migrate`
end

require "#{rails_root}/config/environment"
Expand All @@ -124,38 +124,35 @@ def test_loading_specific_fixtures

def test_scaffold_tests_pass_by_default
content = Dir.chdir(app_path) do
`rails generate scaffold user username:string password:string`
`bundle exec rake db:migrate db:test:clone test`
`rails generate scaffold user username:string password:string;
bundle exec rake db:migrate db:test:clone test`
end

assert_match(/\d+ tests, \d+ assertions, 0 failures, 0 errors/, content)
end

def test_rake_dump_structure_should_respect_db_structure_env_variable
Dir.chdir(app_path) do
`bundle exec rake db:migrate` # ensure we have a schema_migrations table to dump
`bundle exec rake db:structure:dump DB_STRUCTURE=db/my_structure.sql`
# ensure we have a schema_migrations table to dump
`bundle exec rake db:migrate db:structure:dump DB_STRUCTURE=db/my_structure.sql`
end
assert File.exists?(File.join(app_path, 'db', 'my_structure.sql'))
end

def test_rake_dump_schema_cache
Dir.chdir(app_path) do
`rails generate model post title:string`
`rails generate model product name:string`
`bundle exec rake db:migrate`
`bundle exec rake db:schema:cache:dump`
`rails generate model post title:string;
rails generate model product name:string;
bundle exec rake db:migrate db:schema:cache:dump`
end
assert File.exists?(File.join(app_path, 'db', 'schema_cache.dump'))
end

def test_rake_clear_schema_cache
Dir.chdir(app_path) do
`bundle exec rake db:schema:cache:dump`
`bundle exec rake db:schema:cache:clear`
`bundle exec rake db:schema:cache:dump db:schema:cache:clear`
end
assert !File.exists?(File.join(app_path, 'db', 'schema_cache.dump'))
end

end
end