diff options
author | Daniel Beauchamp <daniel.beauchamp@shopify.com> | 2014-01-12 23:17:39 -0800 |
---|---|---|
committer | Daniel Beauchamp <daniel.beauchamp@shopify.com> | 2014-01-12 23:17:39 -0800 |
commit | 9e8dfe7d4290f0150fdef10230cd0ca7a75c9755 (patch) | |
tree | ccd82c459d988ac2846db6178710b47113b377a4 /test/cli_test.rb | |
parent | 5b045724acd44e691552c0fb8f86b61aa2e0cd06 (diff) | |
parent | c49b9bc5d47fe02d26836dee5034fe28490f0ebd (diff) |
Merge pull request #296 from Shopify/updating_gems_and_refactoring
Updating gems and refactoring
Diffstat (limited to 'test/cli_test.rb')
-rw-r--r-- | test/cli_test.rb | 176 |
1 files changed, 158 insertions, 18 deletions
diff --git a/test/cli_test.rb b/test/cli_test.rb index 6c43e2c..567827e 100644 --- a/test/cli_test.rb +++ b/test/cli_test.rb @@ -1,28 +1,168 @@ require 'test_helper' -silent{ load 'bin/dashing' } -module Thor::Actions - def source_paths - [File.join(File.expand_path(File.dirname(__FILE__)), '../templates')] +class CLITest < Dashing::Test + def setup + @cli = Dashing::CLI.new + end + + def test_new_task_creates_project_directory + app_name = 'custom_dashboard' + @cli.stubs(:directory).with(:project, app_name).once + @cli.new(app_name) end -end -class CliTest < Dashing::Test + def test_generate_task_delegates_to_type + types = %w(widget dashboard job) - def test_project_directory_created - temp do |dir| - cli = Dashing::CLI.new - silent{ cli.new 'Dashboard' } - assert Dir.exist?(File.join(dir,'dashboard')), 'Dashing directory was not created.' + types.each do |type| + @cli.stubs(:public_send).with("generate_#{type}".to_sym, 'name').once + @cli.generate(type, 'name') end end - def test_hyphenate - assert_equal 'power', Dashing::CLI.hyphenate('Power') - assert_equal 'power', Dashing::CLI.hyphenate('POWER') - assert_equal 'power-rangers', Dashing::CLI.hyphenate('PowerRangers') - assert_equal 'power-ranger', Dashing::CLI.hyphenate('Power_ranger') - assert_equal 'super-power-rangers', Dashing::CLI.hyphenate('SuperPowerRangers') + def test_generate_task_warns_when_generator_is_not_defined + output, _ = capture_io do + @cli.generate('wtf', 'name') + end + + assert_includes output, 'Invalid generator' + end + + def test_generate_widget_creates_a_new_widget + @cli.stubs(:directory).with(:widget, 'widgets').once + @cli.generate_widget('WidgetName') + assert_equal 'widget_name', @cli.name + end + + def test_generate_dashboard_creates_a_new_dashboard + @cli.stubs(:directory).with(:dashboard, 'dashboards').once + @cli.generate_dashboard('DashBoardName') + assert_equal 'dash_board_name', @cli.name + end + + def test_generate_job_creates_a_new_job + @cli.stubs(:directory).with(:job, 'jobs').once + @cli.generate_job('MyCustomJob') + assert_equal 'my_custom_job', @cli.name + end + + def test_install_task_requests_gist_from_downloader + return_value = { 'files' => [] } + Dashing::Downloader.stubs(:get_gist).with(123).returns(return_value).once + + capture_io { @cli.install(123) } + end + + def test_install_task_calls_create_file_for_each_valid_file_in_gist + json_response = <<-JSON + { + "files": { + "ruby_job.rb": { "content": "some job content" }, + "num.html": { "content": "some html content" }, + "num.scss": { "content": "some sass content" }, + "num.coffee": { "content": "some coffee content" } + } + } + JSON + + Dir.stubs(:pwd).returns('') + + Dashing::Downloader.stubs(:get_gist).returns(JSON.parse(json_response)) + @cli.stubs(:create_file).with('/jobs/ruby_job.rb', 'some job content').once + @cli.stubs(:create_file).with('/widgets/num/num.html', 'some html content').once + @cli.stubs(:create_file).with('/widgets/num/num.scss', 'some sass content').once + @cli.stubs(:create_file).with('/widgets/num/num.coffee', 'some coffee content').once + + capture_io { @cli.install(123) } + end + + def test_install_task_ignores_invalid_files + json_response = <<-JSON + { + "files": { + "ruby_job.js": { "content": "some job content" }, + "num.css": { "content": "some sass content" } + } + } + JSON + + Dashing::Downloader.stubs(:get_gist).returns(JSON.parse(json_response)) + @cli.stubs(:create_file).never + + capture_io { @cli.install(123) } + end + + def test_install_task_warns_when_gist_not_found + error = OpenURI::HTTPError.new('error', mock()) + Dashing::Downloader.stubs(:get_gist).raises(error) + + output, _ = capture_io { @cli.install(123) } + + assert_includes output, 'Could not find gist at ' + end + + def test_start_task_starts_thin_with_default_port + command = 'bundle exec thin -R config.ru start -p 3030 ' + @cli.stubs(:run_command).with(command).once + @cli.start end -end
\ No newline at end of file + def test_start_task_starts_thin_with_specified_port + command = 'bundle exec thin -R config.ru start -p 2020' + @cli.stubs(:run_command).with(command).once + @cli.start('-p', '2020') + end + + def test_start_task_supports_job_path_option + commands = [ + 'export JOB_PATH=other_spot; ', + 'bundle exec thin -R config.ru start -p 3030 ' + ] + + @cli.stubs(:options).returns(job_path: 'other_spot') + @cli.stubs(:run_command).with(commands.join('')).once + @cli.start + end + + def test_stop_task_stops_thin_server + @cli.stubs(:run_command).with('bundle exec thin stop') + @cli.stop + end + + def test_job_task_requires_job_file + Dir.stubs(:pwd).returns('') + @cli.stubs(:require_file).with('/jobs/special_job.rb').once + + @cli.job('special_job') + end + + def test_job_task_requires_every_ruby_file_in_lib + Dir.stubs(:pwd).returns('') + Dir.stubs(:[]).returns(['lib/dashing/cli.rb', 'lib/dashing.rb']) + @cli.stubs(:require_file).times(3) + + @cli.job('special_job') + end + + def test_job_sets_auth_token + @cli.class.stubs(:auth_token=).with('my_token').once + @cli.stubs(:require_file) + + @cli.job('my_job', 'my_token') + end + + def test_hyphenate_lowers_and_hyphenates_inputs + assertion_map = { + 'Power' => 'power', + 'POWER' => 'power', + 'PowerRangers' => 'power-rangers', + 'Power_ranger' => 'power-ranger', + 'SuperPowerRangers' => 'super-power-rangers' + } + + assertion_map.each do |input, expected| + assert_equal expected, Dashing::CLI.hyphenate(input) + end + end + +end |