Skip to content

Commit

Permalink
Merge pull request rails#30595 from bogdanvlviv/use-railties-rails-co…
Browse files Browse the repository at this point in the history
…mmand

Improve railties' tests
  • Loading branch information
matthewd committed Oct 9, 2017
2 parents 1b36e2c + 2329207 commit ac1ee51
Show file tree
Hide file tree
Showing 6 changed files with 207 additions and 249 deletions.
52 changes: 24 additions & 28 deletions railties/test/application/dbconsole_test.rb
Expand Up @@ -19,21 +19,19 @@ def teardown
end

def test_use_value_defined_in_environment_file_in_database_yml
Dir.chdir(app_path) do
app_file "config/database.yml", <<-YAML
development:
database: <%= Rails.application.config.database %>
adapter: sqlite3
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
YAML
app_file "config/database.yml", <<-YAML
development:
database: <%= Rails.application.config.database %>
adapter: sqlite3
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
YAML

app_file "config/environments/development.rb", <<-RUBY
Rails.application.configure do
config.database = "db/development.sqlite3"
end
RUBY
end
app_file "config/environments/development.rb", <<-RUBY
Rails.application.configure do
config.database = "db/development.sqlite3"
end
RUBY

master, slave = PTY.open
spawn_dbconsole(slave)
Expand All @@ -43,22 +41,20 @@ def test_use_value_defined_in_environment_file_in_database_yml
end

def test_respect_environment_option
Dir.chdir(app_path) do
app_file "config/database.yml", <<-YAML
default: &default
adapter: sqlite3
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
app_file "config/database.yml", <<-YAML
default: &default
adapter: sqlite3
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
development:
<<: *default
database: db/development.sqlite3
development:
<<: *default
database: db/development.sqlite3
production:
<<: *default
database: db/production.sqlite3
YAML
end
production:
<<: *default
database: db/production.sqlite3
YAML

master, slave = PTY.open
spawn_dbconsole(slave, "-e production")
Expand Down
4 changes: 2 additions & 2 deletions railties/test/application/loading_test.rb
Expand Up @@ -300,7 +300,7 @@ def change
end
MIGRATION

Dir.chdir(app_path) { `rake db:migrate` }
rails("db:migrate")
require "#{rails_root}/config/environment"

get "/title"
Expand All @@ -314,7 +314,7 @@ def change
end
MIGRATION

Dir.chdir(app_path) { `rake db:migrate` }
rails("db:migrate")

get "/body"
assert_equal "BODY", last_response.body
Expand Down
107 changes: 48 additions & 59 deletions railties/test/application/rake/dbs_test.rb
Expand Up @@ -83,10 +83,8 @@ def with_bad_permissions
end

test "db:drop failure because database does not exist" do
Dir.chdir(app_path) do
output = rails("db:drop:_unsafe", "--trace")
assert_match(/does not exist/, output)
end
output = rails("db:drop:_unsafe", "--trace")
assert_match(/does not exist/, output)
end

test "db:drop failure because bad permissions" do
Expand All @@ -100,13 +98,11 @@ def with_bad_permissions
end

def db_migrate_and_status(expected_database)
Dir.chdir(app_path) do
rails "generate", "model", "book", "title:string"
rails "db:migrate"
output = rails("db:migrate:status")
assert_match(%r{database:\s+\S*#{Regexp.escape(expected_database)}}, output)
assert_match(/up\s+\d{14}\s+Create books/, output)
end
rails "generate", "model", "book", "title:string"
rails "db:migrate"
output = rails("db:migrate:status")
assert_match(%r{database:\s+\S*#{Regexp.escape(expected_database)}}, output)
assert_match(/up\s+\d{14}\s+Create books/, output)
end

test "db:migrate and db:migrate:status without database_url" do
Expand Down Expand Up @@ -161,12 +157,11 @@ def db_fixtures_load(expected_database)

test "db:fixtures:load with namespaced fixture" do
require "#{app_path}/config/environment"
Dir.chdir(app_path) do
rails "generate", "model", "admin::book", "title:string"
rails "db:migrate", "db:fixtures:load"
require "#{app_path}/app/models/admin/book"
assert_equal 2, Admin::Book.count
end

rails "generate", "model", "admin::book", "title:string"
rails "db:migrate", "db:fixtures:load"
require "#{app_path}/app/models/admin/book"
assert_equal 2, Admin::Book.count
end

def db_structure_dump_and_load(expected_database)
Expand Down Expand Up @@ -205,56 +200,52 @@ def db_structure_dump_and_load(expected_database)
end

test "db:schema:load and db:structure:load do not purge the existing database" do
Dir.chdir(app_path) do
rails "runner", "ActiveRecord::Base.connection.create_table(:posts) {|t| t.string :title }"
rails "runner", "ActiveRecord::Base.connection.create_table(:posts) {|t| t.string :title }"

app_file "db/schema.rb", <<-RUBY
ActiveRecord::Schema.define(version: 20140423102712) do
create_table(:comments) {}
end
RUBY
app_file "db/schema.rb", <<-RUBY
ActiveRecord::Schema.define(version: 20140423102712) do
create_table(:comments) {}
end
RUBY

list_tables = lambda { rails("runner", "p ActiveRecord::Base.connection.tables").strip }
list_tables = lambda { rails("runner", "p ActiveRecord::Base.connection.tables").strip }

assert_equal '["posts"]', list_tables[]
rails "db:schema:load"
assert_equal '["posts", "comments", "schema_migrations", "ar_internal_metadata"]', list_tables[]
assert_equal '["posts"]', list_tables[]
rails "db:schema:load"
assert_equal '["posts", "comments", "schema_migrations", "ar_internal_metadata"]', list_tables[]

app_file "db/structure.sql", <<-SQL
CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255));
SQL
app_file "db/structure.sql", <<-SQL
CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255));
SQL

rails "db:structure:load"
assert_equal '["posts", "comments", "schema_migrations", "ar_internal_metadata", "users"]', list_tables[]
end
rails "db:structure:load"
assert_equal '["posts", "comments", "schema_migrations", "ar_internal_metadata", "users"]', list_tables[]
end

test "db:schema:load with inflections" do
Dir.chdir(app_path) do
app_file "config/initializers/inflection.rb", <<-RUBY
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'goose', 'geese'
end
RUBY
app_file "config/initializers/primary_key_table_name.rb", <<-RUBY
ActiveRecord::Base.primary_key_prefix_type = :table_name
RUBY
app_file "db/schema.rb", <<-RUBY
ActiveRecord::Schema.define(version: 20140423102712) do
create_table("goose".pluralize) do |t|
t.string :name
end
app_file "config/initializers/inflection.rb", <<-RUBY
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'goose', 'geese'
end
RUBY
app_file "config/initializers/primary_key_table_name.rb", <<-RUBY
ActiveRecord::Base.primary_key_prefix_type = :table_name
RUBY
app_file "db/schema.rb", <<-RUBY
ActiveRecord::Schema.define(version: 20140423102712) do
create_table("goose".pluralize) do |t|
t.string :name
end
RUBY
end
RUBY

rails "db:schema:load"
rails "db:schema:load"

tables = rails("runner", "p ActiveRecord::Base.connection.tables").strip
assert_match(/"geese"/, tables)
tables = rails("runner", "p ActiveRecord::Base.connection.tables").strip
assert_match(/"geese"/, tables)

columns = rails("runner", "p ActiveRecord::Base.connection.columns('geese').map(&:name)").strip
assert_equal columns, '["gooseid", "name"]'
end
columns = rails("runner", "p ActiveRecord::Base.connection.columns('geese').map(&:name)").strip
assert_equal columns, '["gooseid", "name"]'
end

test "db:schema:load fails if schema.rb doesn't exist yet" do
Expand Down Expand Up @@ -300,10 +291,8 @@ def db_test_load_structure
puts ActiveRecord::Base.connection_config[:database]
RUBY

Dir.chdir(app_path) do
database_path = rails("db:setup")
assert_equal "development.sqlite3", File.basename(database_path.strip)
end
database_path = rails("db:setup")
assert_equal "development.sqlite3", File.basename(database_path.strip)
ensure
ENV["RAILS_ENV"] = @old_rails_env
ENV["RACK_ENV"] = @old_rack_env
Expand Down

0 comments on commit ac1ee51

Please sign in to comment.