Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The tiny app skeleton generator should provide test files if the test component is specified #1709

Merged
merged 2 commits into from Jul 1, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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