Revision 19f6ab70aefd2ce3e3cf52de80149f92ba0cebcd authored by olivia on 25 February 2018, 16:56:34 UTC, committed by olivia on 25 February 2018, 16:58:11 UTC
1 parent 01bc01c
test_new_command.rb
# frozen_string_literal: true
require "helper"
require "jekyll/commands/new"
class TestNewCommand < JekyllUnitTest
def dir_contents(path)
Dir["#{path}/**/*"].each do |file|
file.gsub! path, ""
end
end
def site_template
File.expand_path("../lib/site_template", __dir__)
end
context "when args contains a path" do
setup do
@path = "new-site"
@args = [@path]
@full_path = File.expand_path(@path, Dir.pwd)
end
teardown do
FileUtils.rm_r @full_path if File.directory?(@full_path)
end
should "create a new directory" do
refute_exist @full_path
capture_output { Jekyll::Commands::New.process(@args) }
assert_exist @full_path
end
should "create a Gemfile" do
gemfile = File.join(@full_path, "Gemfile")
refute_exist @full_path
capture_output { Jekyll::Commands::New.process(@args) }
assert_exist gemfile
assert_match(%r!gem "jekyll", "~> #{Jekyll::VERSION}"!, File.read(gemfile))
assert_match(%r!gem "github-pages"!, File.read(gemfile))
end
should "display a success message" do
output = capture_output { Jekyll::Commands::New.process(@args) }
success_message = "New jekyll site installed in #{@full_path.cyan}. "
bundle_message = "Running bundle install in #{@full_path.cyan}... "
assert_includes output, success_message
assert_includes output, bundle_message
end
should "copy the static files in site template to the new directory" do
static_template_files = dir_contents(site_template).reject do |f|
File.extname(f) == ".erb"
end
static_template_files << "/Gemfile"
capture_output { Jekyll::Commands::New.process(@args) }
new_site_files = dir_contents(@full_path).reject do |f|
File.extname(f) == ".markdown"
end
assert_same_elements static_template_files, new_site_files
end
should "process any ERB files" do
erb_template_files = dir_contents(site_template).select do |f|
File.extname(f) == ".erb"
end
stubbed_date = "2013-01-01"
allow_any_instance_of(Time).to receive(:strftime) { stubbed_date }
erb_template_files.each do |f|
f.chomp! ".erb"
f.gsub! "0000-00-00", stubbed_date
end
capture_output { Jekyll::Commands::New.process(@args) }
new_site_files = dir_contents(@full_path).select do |f|
erb_template_files.include? f
end
assert_same_elements erb_template_files, new_site_files
end
should "create blank project" do
blank_contents = %w(/_drafts /_layouts /_posts /index.html)
output = capture_output { Jekyll::Commands::New.process(@args, "--blank") }
bundle_message = "Running bundle install in #{@full_path.cyan}..."
assert_same_elements blank_contents, dir_contents(@full_path)
refute_includes output, bundle_message
end
should "force created folder" do
capture_output { Jekyll::Commands::New.process(@args) }
output = capture_output { Jekyll::Commands::New.process(@args, "--force") }
assert_match %r!New jekyll site installed in!, output
end
should "skip bundle install when opted to" do
output = capture_output { Jekyll::Commands::New.process(@args, "--skip-bundle") }
bundle_message = "Bundle install skipped."
assert_includes output, bundle_message
end
end
context "when multiple args are given" do
setup do
@site_name_with_spaces = "new site name"
@multiple_args = @site_name_with_spaces.split
end
teardown do
FileUtils.rm_r File.expand_path(@site_name_with_spaces, Dir.pwd)
end
should "create a new directory" do
refute_exist @site_name_with_spaces
capture_output { Jekyll::Commands::New.process(@multiple_args) }
assert_exist @site_name_with_spaces
end
end
context "when no args are given" do
setup do
@empty_args = []
end
should "raise an ArgumentError" do
exception = assert_raises ArgumentError do
Jekyll::Commands::New.process(@empty_args)
end
assert_equal "You must specify a path.", exception.message
end
end
end
Computing file changes ...