rails/railties/test/application/bin_setup_test.rb
yuuji.yaginuma 99620d1534 use correct Gemfile in bin/setup test
Currently, `bin/setup` test uses Gemfile of Rails. But this Gemfile is not a
file to be used in Rails application.
Add a Gemfile to Rails application that is created for test, it has been
modified to use the Gemfile.
2016-09-11 11:03:01 +09:00

75 lines
2.0 KiB
Ruby

require "isolation/abstract_unit"
module ApplicationTests
class BinSetupTest < ActiveSupport::TestCase
include ActiveSupport::Testing::Isolation
def setup
build_app
create_gemfile
update_boot_file_to_use_bundler
@old_gemfile_env = ENV["BUNDLE_GEMFILE"]
ENV["BUNDLE_GEMFILE"] = app_path + "/Gemfile"
end
def teardown
teardown_app
ENV["BUNDLE_GEMFILE"] = @old_gemfile_env
end
def test_bin_setup
Dir.chdir(app_path) do
app_file "db/schema.rb", <<-RUBY
ActiveRecord::Schema.define(version: 20140423102712) do
create_table(:articles) {}
end
RUBY
list_tables = lambda { `bin/rails runner 'p ActiveRecord::Base.connection.tables'`.strip }
File.write("log/test.log", "zomg!")
assert_equal "[]", list_tables.call
assert_equal 5, File.size("log/test.log")
assert_not File.exist?("tmp/restart.txt")
`bin/setup 2>&1`
assert_equal 0, File.size("log/test.log")
assert_equal '["articles", "schema_migrations", "ar_internal_metadata"]', list_tables.call
assert File.exist?("tmp/restart.txt")
end
end
def test_bin_setup_output
Dir.chdir(app_path) do
app_file "db/schema.rb", ""
output = `bin/setup 2>&1`
assert_equal(<<-OUTPUT, output)
== Installing dependencies ==
The Gemfile's dependencies are satisfied
== Preparing database ==
Created database 'db/development.sqlite3'
Created database 'db/test.sqlite3'
== Removing old logs and tempfiles ==
== Restarting application server ==
OUTPUT
end
end
private
def create_gemfile
app_file("Gemfile", "source 'https://rubygems.org'")
app_file("Gemfile", "gem 'rails', path: '#{RAILS_FRAMEWORK_ROOT}'", "a")
app_file("Gemfile", "gem 'sqlite3'", "a")
end
def update_boot_file_to_use_bundler
app_file("config/boot.rb", "require 'bundler/setup'")
end
end
end