2009-06-20 13:43:25 +00:00
require 'abstract_unit'
2009-06-25 08:18:00 +00:00
require 'generators/generators_test_helper'
2010-03-23 12:40:19 +00:00
require 'rails/generators/rails/app/app_generator'
2010-10-20 22:55:08 +00:00
require 'generators/shared_generator_tests.rb'
2009-06-20 13:43:25 +00:00
2010-04-30 20:08:28 +00:00
DEFAULT_APP_FILES = %w(
. gitignore
Gemfile
Rakefile
config . ru
app / controllers
app / helpers
2010-06-11 10:06:00 +00:00
app / mailers
2010-04-30 20:08:28 +00:00
app / models
app / views / layouts
config / environments
config / initializers
config / locales
db
doc
lib
lib / tasks
log
public / images
public / javascripts
public / stylesheets
script / rails
test / fixtures
test / functional
test / integration
test / performance
test / unit
vendor
vendor / plugins
tmp / sessions
tmp / sockets
tmp / cache
tmp / pids
)
2010-01-18 23:07:11 +00:00
class AppGeneratorTest < Rails :: Generators :: TestCase
include GeneratorsTestHelper
2010-01-03 15:34:32 +00:00
arguments [ destination_root ]
2010-10-20 22:55:08 +00:00
include SharedGeneratorTests
2009-06-20 13:43:25 +00:00
2010-10-20 22:55:08 +00:00
def default_files
:: DEFAULT_APP_FILES
2010-07-30 02:38:45 +00:00
end
2010-04-05 22:12:28 +00:00
def test_application_controller_and_layout_files
run_generator
2010-04-09 16:49:46 +00:00
assert_file " app/views/layouts/application.html.erb " , / stylesheet_link_tag :all /
assert_no_file " public/stylesheets/application.css "
2010-04-05 22:12:28 +00:00
end
2010-01-03 12:01:18 +00:00
def test_invalid_application_name_raises_an_error
2010-01-07 20:09:32 +00:00
content = capture ( :stderr ) { run_generator [ File . join ( destination_root , " 43-things " ) ] }
2010-01-03 12:01:18 +00:00
assert_equal " Invalid application name 43-things. Please give a name which does not start with numbers. \n " , content
end
def test_invalid_application_name_is_fixed
2010-01-07 20:09:32 +00:00
run_generator [ File . join ( destination_root , " things-43 " ) ]
2010-01-07 19:59:26 +00:00
assert_file " things-43/config/environment.rb " , / Things43::Application \ .initialize! /
assert_file " things-43/config/application.rb " , / ^module Things43$ /
2010-01-03 12:01:18 +00:00
end
2011-01-29 03:22:32 +00:00
def test_application_new_exits_with_non_zero_code_on_invalid_application_name
# TODO: Suppress the output of this (it's because of a Thor::Error)
` rails new test `
2011-01-29 03:05:24 +00:00
assert_equal false , $? . success?
2011-01-29 03:23:12 +00:00
end
def test_application_new_exits_with_message_and_non_zero_code_when_generating_inside_existing_rails_directory
app_root = File . join ( destination_root , 'myfirstapp' )
run_generator [ app_root ]
output = nil
Dir . chdir ( app_root ) do
output = ` rails new mysecondapp `
end
assert_equal " Can't initialize a new Rails application within the directory of another, please change to a non-Rails directory first. \n Type 'rails' for help. \n " , output
assert_equal false , $? . success?
2011-01-29 03:05:24 +00:00
end
2010-07-28 12:55:57 +00:00
def test_application_name_is_detected_if_it_exists_and_app_folder_renamed
app_root = File . join ( destination_root , " myapp " )
app_moved_root = File . join ( destination_root , " myapp_moved " )
run_generator [ app_root ]
Rails . application . config . root = app_moved_root
Rails . application . class . stubs ( :name ) . returns ( " Myapp " )
2010-08-03 05:05:00 +00:00
Rails . application . stubs ( :is_a? ) . returns ( Rails :: Application )
2010-07-28 12:55:57 +00:00
FileUtils . mv ( app_root , app_moved_root )
generator = Rails :: Generators :: AppGenerator . new [ " rails " ] , { :with_dispatchers = > true } ,
2010-08-25 01:36:07 +00:00
:destination_root = > app_moved_root , :shell = > @shell
2010-07-28 12:55:57 +00:00
generator . send ( :app_const )
silence ( :stdout ) { generator . send ( :create_config_files ) }
assert_file " myapp_moved/config/environment.rb " , / Myapp::Application \ .initialize! /
2010-08-30 11:53:34 +00:00
assert_file " myapp_moved/config/initializers/session_store.rb " , / _myapp_session /
2010-07-28 12:55:57 +00:00
end
2010-11-11 19:07:47 +00:00
2010-08-25 01:36:07 +00:00
def test_rails_update_generates_correct_session_key
app_root = File . join ( destination_root , 'myapp' )
run_generator [ app_root ]
2010-11-11 19:07:47 +00:00
2010-08-25 01:36:07 +00:00
Rails . application . config . root = app_root
Rails . application . class . stubs ( :name ) . returns ( " Myapp " )
Rails . application . stubs ( :is_a? ) . returns ( Rails :: Application )
generator = Rails :: Generators :: AppGenerator . new [ " rails " ] , { :with_dispatchers = > true } , :destination_root = > app_root , :shell = > @shell
generator . send ( :app_const )
silence ( :stdout ) { generator . send ( :create_config_files ) }
assert_file " myapp/config/initializers/session_store.rb " , / _myapp_session /
end
2010-07-28 12:55:57 +00:00
2010-01-07 20:09:32 +00:00
def test_application_names_are_not_singularized
run_generator [ File . join ( destination_root , " hats " ) ]
assert_file " hats/config/environment.rb " , / Hats::Application \ .initialize! /
end
2009-06-20 14:58:15 +00:00
def test_config_database_is_added_by_default
run_generator
assert_file " config/database.yml " , / sqlite3 /
2011-01-16 21:29:08 +00:00
assert_file " Gemfile " , / ^gem \ s+["']sqlite3["']$ /
2010-02-04 12:53:37 +00:00
end
def test_config_another_database
run_generator ( [ destination_root , " -d " , " mysql " ] )
assert_file " config/database.yml " , / mysql /
2010-08-24 09:39:25 +00:00
assert_file " Gemfile " , / ^gem \ s+["']mysql2["']$ /
2009-06-20 14:58:15 +00:00
end
2010-10-09 15:36:54 +00:00
def test_generator_if_skip_active_record_is_given
2010-07-25 20:08:34 +00:00
run_generator [ destination_root , " --skip-active-record " ]
2009-06-20 14:58:15 +00:00
assert_no_file " config/database.yml "
2010-10-09 15:31:32 +00:00
assert_file " test/test_helper.rb " do | helper_content |
assert_no_match / fixtures :all / , helper_content
end
2010-10-09 15:11:22 +00:00
assert_file " test/performance/browsing_test.rb "
2009-06-20 14:58:15 +00:00
end
2010-07-25 20:08:34 +00:00
def test_active_record_is_removed_from_frameworks_if_skip_active_record_is_given
run_generator [ destination_root , " --skip-active-record " ]
2010-02-10 05:51:14 +00:00
assert_file " config/application.rb " , / # \ s+require \ s+["']active_record \/ railtie["'] /
2010-01-16 22:34:38 +00:00
end
2009-06-20 14:58:15 +00:00
2010-01-30 20:22:21 +00:00
def test_prototype_and_test_unit_are_added_by_default
2009-06-20 14:58:15 +00:00
run_generator
2010-07-16 14:53:37 +00:00
assert_file " config/application.rb " , / # \ s+config \ .action_view \ .javascript_expansions \ [:defaults \ ] \ s+= \ s+%w \ (jquery rails \ ) /
assert_file " public/javascripts/application.js "
2010-01-30 20:22:21 +00:00
assert_file " public/javascripts/prototype.js "
2010-07-16 14:53:37 +00:00
assert_file " public/javascripts/rails.js "
2010-12-15 11:56:29 +00:00
assert_file " public/javascripts/controls.js "
assert_file " public/javascripts/dragdrop.js "
2010-12-16 13:37:11 +00:00
assert_file " public/javascripts/effects.js "
2009-06-20 14:58:15 +00:00
assert_file " test "
end
2010-11-11 19:07:47 +00:00
2010-09-11 19:09:16 +00:00
def test_javascript_is_skipped_if_required
run_generator [ destination_root , " --skip-javascript " ]
2010-07-16 21:22:48 +00:00
assert_file " config/application.rb " , / ^ \ s+config \ .action_view \ .javascript_expansions \ [:defaults \ ] \ s+= \ s+%w \ ( \ ) /
2010-07-16 14:53:37 +00:00
assert_file " public/javascripts/application.js "
2010-01-30 20:22:21 +00:00
assert_no_file " public/javascripts/prototype.js "
2010-07-16 14:53:37 +00:00
assert_no_file " public/javascripts/rails.js "
2010-09-11 19:09:16 +00:00
end
2010-11-11 19:07:47 +00:00
2010-09-11 19:09:16 +00:00
def test_config_prototype_javascript_library
run_generator [ destination_root , " -j " , " prototype " ]
assert_file " config/application.rb " , / # \ s+config \ .action_view \ .javascript_expansions \ [:defaults \ ] \ s+= \ s+%w \ (jquery rails \ ) /
assert_file " public/javascripts/application.js "
assert_file " public/javascripts/prototype.js "
2010-12-16 13:37:11 +00:00
assert_file " public/javascripts/controls.js "
assert_file " public/javascripts/dragdrop.js "
assert_file " public/javascripts/effects.js "
2010-09-11 19:09:16 +00:00
assert_file " public/javascripts/rails.js " , / prototype /
end
2010-11-11 19:07:47 +00:00
2010-09-11 19:09:16 +00:00
def test_config_jquery_javascript_library
run_generator [ destination_root , " -j " , " jquery " ]
assert_file " config/application.rb " , / ^ \ s+config \ .action_view \ .javascript_expansions \ [:defaults \ ] \ s+= \ s+%w \ (jquery rails \ ) /
assert_file " public/javascripts/application.js "
assert_file " public/javascripts/jquery.js "
assert_file " public/javascripts/rails.js " , / jQuery /
2009-06-20 14:58:15 +00:00
end
2009-08-07 13:34:10 +00:00
def test_template_from_dir_pwd
2009-10-17 18:54:58 +00:00
FileUtils . cd ( Rails . root )
2010-01-03 15:34:32 +00:00
assert_match / It works from file! / , run_generator ( [ destination_root , " -m " , " lib/template.rb " ] )
2009-08-07 13:34:10 +00:00
end
2009-06-25 13:45:15 +00:00
def test_usage_read_from_file
File . expects ( :read ) . returns ( " USAGE FROM FILE " )
assert_equal " USAGE FROM FILE " , Rails :: Generators :: AppGenerator . desc
end
def test_default_usage
File . expects ( :exist? ) . returns ( false )
assert_match / Create rails files for app generator / , Rails :: Generators :: AppGenerator . desc
end
def test_default_namespace
2010-01-18 11:28:52 +00:00
assert_match " rails:app " , Rails :: Generators :: AppGenerator . namespace
2009-06-25 13:45:15 +00:00
end
2009-06-28 10:00:13 +00:00
def test_file_is_added_for_backwards_compatibility
action :file , 'lib/test_file.rb' , 'heres test data'
assert_file 'lib/test_file.rb' , 'heres test data'
end
2010-11-11 19:07:47 +00:00
def test_test_unit_is_removed_from_frameworks_if_skip_test_unit_is_given
run_generator [ destination_root , " --skip-test-unit " ]
assert_file " config/application.rb " do | file |
assert_match / config.generators.test_framework = false / , file
end
end
2010-04-30 20:08:28 +00:00
protected
2009-06-20 13:43:25 +00:00
2010-04-30 20:08:28 +00:00
def action ( * args , & block )
silence ( :stdout ) { generator . send ( * args , & block ) }
end
2009-06-28 10:00:13 +00:00
2010-10-06 09:53:00 +00:00
end
class CustomAppGeneratorTest < Rails :: Generators :: TestCase
include GeneratorsTestHelper
tests Rails :: Generators :: AppGenerator
arguments [ destination_root ]
2010-10-20 22:55:08 +00:00
include SharedCustomGeneratorTests
2010-10-06 09:53:00 +00:00
2010-10-20 22:55:08 +00:00
protected
def default_files
:: DEFAULT_APP_FILES
2010-10-06 09:53:00 +00:00
end
2010-10-20 22:55:08 +00:00
def builders_dir
" app_builders "
2010-10-06 09:53:00 +00:00
end
2010-10-20 22:55:08 +00:00
def builder_class
:AppBuilder
2010-10-06 09:53:00 +00:00
end
def action ( * args , & block )
silence ( :stdout ) { generator . send ( * args , & block ) }
end
end