features/step_definitions/rails_steps.rb in katapult-0.2.0 vs features/step_definitions/rails_steps.rb in katapult-0.3.0
- old
+ new
@@ -1,46 +1,106 @@
require 'katapult/binary_util'
-module KatapultRailsHelper
+module RailsHelper
+ # Directory names
+ TEST_APP = 'katapult_test_app'
+ APP_WITH_BASICS = 'cached_test_app_with_basics'
+ PRISTINE_APP = 'cached_pristine_test_app'
+
def with_aruba_timeout(timeout, &block)
original_aruba_timeout = aruba.config.exit_timeout
aruba.config.exit_timeout = timeout.to_i
# print "(timeout: #{ timeout })"
block.call
ensure
aruba.config.exit_timeout = original_aruba_timeout
end
- def create_cached_app(name)
- job = 'Cached Rails app generation'
-
- puts "#{job} started (in #{Dir.pwd})"
+ def create_app(name)
Katapult::BinaryUtil.create_rails_app(name)
- puts "#{job} done."
+ puts 'Done generating rails app.'
end
+ def test_app_path
+ File.join expand_path('.'), TEST_APP
+ end
+
def ensure_bundled(path)
Dir.chdir(path) do
Bundler.with_clean_env do
system('bundle check > /dev/null 2>&1') or system('bundle install')
end
end
end
+ def recreate_databases(path)
+ Dir.chdir(path) do
+ # Katapult doesn't run test app tests in parallel
+ Katapult::BinaryUtil.run 'bundle exec rake db:drop db:create > /dev/null'
+ end
+ end
+
end
-World(KatapultRailsHelper)
+World(RailsHelper)
+# In these steps, cached Rails apps are created to speed up test runs.
+#
+# Note: The current Ruby process and Aruba have *different* opinions about the
+# current working directory:
+# - Ruby knows the "real" Dir.pwd
+# - Aruba is scoped to its test directory "tmp/aruba"
Given /^a pristine Rails application$/ do
- with_aruba_timeout(120) do
- Dir.chdir('tmp') do
- create_cached_app('cached_test_app') unless File.directory?('cached_test_app')
- ensure_bundled('cached_test_app')
+ unless @no_clobber
+ with_aruba_timeout(80) do
+ # Change Ruby cwd
+ Dir.chdir('tmp') do
+ if File.directory?(RailsHelper::PRISTINE_APP)
+ puts "Using a cached Rails app from tmp/#{RailsHelper::PRISTINE_APP}"
+ else
+ create_app(RailsHelper::PRISTINE_APP)
+ end
+
+ ensure_bundled(RailsHelper::PRISTINE_APP)
+ FileUtils.cp_r RailsHelper::PRISTINE_APP, test_app_path
+ end
end
+ end
- # copy cached app to aruba directory
- FileUtils.cp_r 'tmp/cached_test_app', File.join(expand_path('.'), 'katapult_test_app')
- cd 'katapult_test_app' # Aruba::Api method
+ cd RailsHelper::TEST_APP # Change Aruba cwd
+end
+
+Given 'a new Rails application with Katapult basics installed' do
+ unless @no_clobber
+ with_aruba_timeout(120) do
+ # Change Ruby cwd
+ Dir.chdir('tmp') do
+ if File.directory?(RailsHelper::APP_WITH_BASICS)
+ puts <<-NOTE
+ Using a cached Rails app with basics installed. Remember to
+ rm -rf tmp/#{RailsHelper::APP_WITH_BASICS}
+ when modifying the basics generator.
+ NOTE
+ else
+ create_app(RailsHelper::APP_WITH_BASICS)
+
+ Dir.chdir(RailsHelper::APP_WITH_BASICS) do
+ # :path will be correct when copied to the TEST_APP path
+ Katapult::BinaryUtil.run %(echo "gem 'katapult', path: '../../..'" >> Gemfile)
+ Katapult::BinaryUtil.run 'bin/rails generate katapult:basics --db-user katapult --db-password secret'
+ # Spring running in the cache dir is of no further use, but would
+ # break things when the cache dir is removed
+ Katapult::BinaryUtil.run 'spring stop'
+ end
+ end
+
+ ensure_bundled(RailsHelper::APP_WITH_BASICS)
+ recreate_databases(RailsHelper::APP_WITH_BASICS)
+ FileUtils.cp_r RailsHelper::APP_WITH_BASICS, test_app_path
+ end
+ end
end
+
+ cd RailsHelper::TEST_APP # Change Aruba cwd
end