Skip to content

Commit

Permalink
Merge pull request #1709 from padrino/test-files-for-tiny-app
Browse files Browse the repository at this point in the history
The tiny app skeleton generator should provide test files if the test component is specified
  • Loading branch information
ujifgc committed Jul 1, 2014
2 parents fd9b8a6 + 409a6e8 commit ab3e5c3
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 3 deletions.
8 changes: 6 additions & 2 deletions padrino-gen/lib/padrino-gen/generators/actions.rb
Expand Up @@ -3,6 +3,10 @@ module Generators
# Raised when an application does not have a resolved root path.
class AppRootNotFound < RuntimeError; end
##
# Default helper name for use in tiny app skeleton generator.
#
DEFAULT_HELPER_NAME = "Helper".freeze
##
# Common actions needed to support project and component generation.
#
module Actions
Expand Down Expand Up @@ -37,7 +41,7 @@ def execute_component_setup(component, choice)
# The type of the component module.
#
# @example
# generator_module_for('rr', :mock)
# apply_component_for('rr', :mock)
#
def apply_component_for(choice, component)
# I need to override Thor#apply because for unknow reason :verbose => false break tasks.
Expand Down Expand Up @@ -464,7 +468,7 @@ def app_skeleton(app, tiny=false)
directory('app/', destination_root(app))
if tiny
template 'templates/controller.rb.tt', destination_root(app, 'controllers.rb')
@helper_name = 'Helper'
@helper_name = DEFAULT_HELPER_NAME
template 'templates/helper.rb.tt', destination_root(app, 'helpers.rb')
@short_name = 'notifier'
template 'templates/mailer.rb.tt', destination_root(app, 'mailers.rb')
Expand Down
26 changes: 25 additions & 1 deletion padrino-gen/lib/padrino-gen/generators/project.rb
Expand Up @@ -87,6 +87,30 @@ def setup_components
store_component_choice(:migration_format, options[:migration_format])
end

##
# Generates test files for tiny app skeleton.
#
def setup_test_files
if options[:tiny] && @_components[:test] != :none
test_component = @_components[:test]
test_component = "rspec" if test_component == "cucumber"
uppercase_test_component = test_component.upcase
controller_template_name = "#{uppercase_test_component}_CONTROLLER_TEST"
helper_template_name = "#{uppercase_test_component}_HELPER_TEST"
return unless defined?(controller_template_name)

controller_content = instance_eval(controller_template_name).gsub(/!NAME!/, "")
helper_content = instance_eval(helper_template_name).gsub(/!NAME!/, "#{@project_name}::#{@app_name}::#{DEFAULT_HELPER_NAME}")

proc{|*args| args.map{|str| str.gsub!(/!PATH!/, recognize_path)} }.call(controller_content, helper_content)

directory_name = [:rspec, :steak].include?(test_component.to_sym) ? "spec" : "test"
base_path = File.join(directory_name, "app")
create_file destination_root("#{base_path}/controllers/controllers_#{directory_name}.rb"), controller_content, :skip => true
create_file destination_root("#{base_path}/helpers/helpers_#{directory_name}.rb"), helper_content, :skip => true
end
end

##
# Bundle all required components using bundler and Gemfile.
#
Expand All @@ -106,7 +130,7 @@ def finish_message
say '=' * 65, :green
say "$ cd #{options[:root]}/#{name}"
say "$ bundle" unless options[:bundle]
say "="*65, :green
say "=" * 65, :green
say
end

Expand Down
66 changes: 66 additions & 0 deletions padrino-gen/test/test_project_generator.rb
Expand Up @@ -661,4 +661,70 @@ def teardown
assert_dir_exists("#{@apptmp}/sample_project/app/stylesheets")
end
end

describe "tiny app skeleton generator for test component" do
it "should properly generate for rspec" do
capture_io { generate(:project,'sample_project', '--tiny', "--root=#{@apptmp}", "--test=rspec") }
assert_dir_exists("#{@apptmp}/sample_project/spec/")
assert_file_exists("#{@apptmp}/sample_project/spec/app/controllers/controllers_spec.rb")
assert_file_exists("#{@apptmp}/sample_project/spec/app/helpers/helpers_spec.rb")
assert_match_in_file(/RSpec\.describe "Controller" do/, "#{@apptmp}/sample_project/spec/app/controllers/controllers_spec.rb")
assert_match_in_file(/RSpec.describe "SampleProject::App::Helper" do/, "#{@apptmp}/sample_project/spec/app/helpers/helpers_spec.rb")
end

it "should properly generate for steak" do
capture_io { generate(:project,'sample_project', '--tiny', "--root=#{@apptmp}", "--test=steak") }
assert_dir_exists("#{@apptmp}/sample_project/spec/")
assert_file_exists("#{@apptmp}/sample_project/spec/app/controllers/controllers_spec.rb")
assert_file_exists("#{@apptmp}/sample_project/spec/app/helpers/helpers_spec.rb")
assert_match_in_file(/describe "Controller" do/, "#{@apptmp}/sample_project/spec/app/controllers/controllers_spec.rb")
assert_match_in_file(/describe "SampleProject::App::Helper" do/, "#{@apptmp}/sample_project/spec/app/helpers/helpers_spec.rb")
end

it "should properly generate for cucumber" do
capture_io { generate(:project,'sample_project', '--tiny', "--root=#{@apptmp}", "--test=cucumber") }
assert_dir_exists("#{@apptmp}/sample_project/spec/")
assert_file_exists("#{@apptmp}/sample_project/spec/app/controllers/controllers_spec.rb")
assert_file_exists("#{@apptmp}/sample_project/spec/app/helpers/helpers_spec.rb")
assert_match_in_file(/describe "Controller" do/, "#{@apptmp}/sample_project/spec/app/controllers/controllers_spec.rb")
assert_match_in_file(/describe "SampleProject::App::Helper" do/, "#{@apptmp}/sample_project/spec/app/helpers/helpers_spec.rb")
end

it "should properly generate for bacon" do
capture_io { generate(:project,'sample_project', '--tiny', "--root=#{@apptmp}", "--test=bacon") }
assert_dir_exists("#{@apptmp}/sample_project/test/")
assert_file_exists("#{@apptmp}/sample_project/test/app/controllers/controllers_test.rb")
assert_file_exists("#{@apptmp}/sample_project/test/app/helpers/helpers_test.rb")
assert_match_in_file(/describe "Controller" do/, "#{@apptmp}/sample_project/test/app/controllers/controllers_test.rb")
assert_match_in_file(/describe "SampleProject::App::Helper"/, "#{@apptmp}/sample_project/test/app/helpers/helpers_test.rb")
end

it "should properly generate for minitest" do
capture_io { generate(:project,'sample_project', '--tiny', "--root=#{@apptmp}", "--test=minitest") }
assert_dir_exists("#{@apptmp}/sample_project/test/")
assert_file_exists("#{@apptmp}/sample_project/test/app/controllers/controllers_test.rb")
assert_file_exists("#{@apptmp}/sample_project/test/app/helpers/helpers_test.rb")
assert_match_in_file(/describe "Controller" do/, "#{@apptmp}/sample_project/test/app/controllers/controllers_test.rb")
assert_match_in_file(/describe "SampleProject::App::Helper"/, "#{@apptmp}/sample_project/test/app/helpers/helpers_test.rb")
end

it "should properly generate for riot" do
capture_io { generate(:project,'sample_project', '--tiny', "--root=#{@apptmp}", "--test=riot") }
assert_dir_exists("#{@apptmp}/sample_project/test/")
assert_file_exists("#{@apptmp}/sample_project/test/app/controllers/controllers_test.rb")
assert_file_exists("#{@apptmp}/sample_project/test/app/helpers/helpers_test.rb")
assert_match_in_file(/context "Controller" do/, "#{@apptmp}/sample_project/test/app/controllers/controllers_test.rb")
assert_match_in_file(/describe "SampleProject::App::Helper"/, "#{@apptmp}/sample_project/test/app/helpers/helpers_test.rb")
end

it "should properly generate for shoulda" do
capture_io { generate(:project,'sample_project', '--tiny', "--root=#{@apptmp}", "--test=shoulda") }
assert_dir_exists("#{@apptmp}/sample_project/test/")
assert_file_exists("#{@apptmp}/sample_project/test/app/controllers/controllers_test.rb")
assert_file_exists("#{@apptmp}/sample_project/test/app/helpers/helpers_test.rb")
assert_match_in_file(/class ControllerTest < Test::Unit::TestCase/, "#{@apptmp}/sample_project/test/app/controllers/controllers_test.rb")
assert_match_in_file(/class SampleProject::App::HelperTest < Test::Unit::TestCase/, "#{@apptmp}/sample_project/test/app/helpers/helpers_test.rb")
end

end
end

0 comments on commit ab3e5c3

Please sign in to comment.