spec/cli_spec.rb in wordless-0.2.1 vs spec/cli_spec.rb in wordless-0.3.0

- old
+ new

@@ -1,11 +1,10 @@ require 'spec_helper' describe Wordless::CLI do - before :each do - # $stdout = StringIO.new - @original_wd = Dir.pwd + + before :all do wp_api_response = <<-eof upgrade http://wordpress.org/download/ http://wordpress.org/wordpress-3.3.1.zip 3.3.1 @@ -13,81 +12,167 @@ 5.2.4 5.0 eof FakeWeb.register_uri(:get, %r|http://api.wordpress.org/core/version-check/1.5/.*|, :body => wp_api_response) FakeWeb.register_uri(:get, "http://wordpress.org/wordpress-3.3.1.zip", :body => File.expand_path('spec/fixtures/wordpress_stub.zip')) + end + + before :each do + Wordless::CLI.class_variable_set :@@config, { + :wordless_repo => File.expand_path(File.join(File.dirname(__FILE__), 'fixtures', 'wordless')) + } + @original_wd = Dir.pwd Dir.chdir('tmp') end - + + after :each do + Dir.chdir(@original_wd) + %w(tmp/wordpress tmp/myapp).each do |dir| + FileUtils.rm_rf(dir) if File.directory? dir + end + end + context "#new" do it "downloads a copy of WordPress, installs Wordless and creates a theme" do Wordless::CLI.start ['new', 'myapp'] - File.exists?('wp-content/index.php').should eq true - (File.exists?('wp-content/plugins/plugin.php') || File.directory?('wp-content/themes/theme')).should eq false - File.directory?('wp-content/plugins/wordless').should eq true - File.directory?('wp-content/themes/myapp').should eq true - File.exists?('wp-content/themes/myapp/index.php').should eq true + File.exists?('wp-content/index.php').should be_true + (File.exists?('wp-content/plugins/plugin.php') || File.directory?('wp-content/themes/theme')).should be_false + File.directory?('wp-content/plugins/wordless').should be_true + File.directory?('wp-content/themes/myapp').should be_true + File.exists?('wp-content/themes/myapp/index.php').should be_true end end - + context "#install" do context "with a valid WordPress installation" do it "installs the Wordless plugin" do WordPressTools::CLI.start ['new'] Dir.chdir 'wordpress' Wordless::CLI.start ['install'] - File.directory?('wp-content/plugins/wordless').should eq true - end + File.directory?('wp-content/plugins/wordless').should be_true + end end - + context "without a valid WordPress installation" do it "fails to install the Wordless plugin" do content = capture(:stdout) { Wordless::CLI.start ['install'] } content.should =~ %r|Directory 'wp-content/plugins' not found| end end end - + context "#theme" do context "with a valid WordPress installation and the Wordless plugin" do before :each do WordPressTools::CLI.start ['new'] Dir.chdir 'wordpress' Wordless::CLI.start ['install'] end - + it "creates a Wordless theme" do Wordless::CLI.start ['theme', 'mytheme'] - File.directory?('wp-content/themes/mytheme').should eq true - File.exists?('wp-content/themes/mytheme/index.php').should eq true + File.directory?('wp-content/themes/mytheme').should be_true + File.exists?('wp-content/themes/mytheme/index.php').should be_true end end - + context "without a valid WordPress installation" do it "fails to create a Wordless theme" do content = capture(:stdout) { Wordless::CLI.start ['theme', 'mytheme'] } content.should =~ %r|Directory 'wp-content/themes' not found| end end end - + context "#compile" do context "with a valid Wordless installation" do before :each do Wordless::CLI.start ['new', 'myapp'] end - + it "compiles static assets" do Wordless::CLI.start ['compile'] - File.exists?('wp-content/themes/myapp/assets/stylesheets/screen.css').should eq true - File.exists?('wp-content/themes/myapp/assets/javascripts/application.js').should eq true + File.exists?('wp-content/themes/myapp/assets/stylesheets/screen.css').should be_true + File.exists?('wp-content/themes/myapp/assets/javascripts/application.js').should be_true end end end - - after :each do - Dir.chdir(@original_wd) - %w(tmp/wordpress tmp/myapp).each do |dir| - FileUtils.rm_rf(dir) if File.directory? dir + + context "#clean" do + before do + FileUtils.mkdir_p('myapp/wp-content/themes/myapp/assets/stylesheets') + FileUtils.mkdir_p('myapp/wp-content/themes/myapp/assets/javascripts') + Dir.chdir('myapp') end + + let(:default_css) { 'wp-content/themes/myapp/assets/stylesheets/screen.css' } + let(:default_js) { 'wp-content/themes/myapp/assets/javascripts/application.js' } + + let(:first_css) { 'wp-content/themes/myapp/assets/stylesheets/foo.css' } + let(:second_css) { 'wp-content/themes/myapp/assets/stylesheets/bar.css' } + let(:first_js) { 'wp-content/themes/myapp/assets/javascripts/robin.js' } + let(:second_js) { 'wp-content/themes/myapp/assets/javascripts/galahad.js' } + + it "should remove default default assets" do + FileUtils.touch(default_css) + FileUtils.touch(default_js) + + Wordless::CLI.start ['clean'] + + File.exists?(default_css).should be_false + File.exists?(default_js).should be_false + end + + it "should remove assets specified on config" do + Wordless::CLI.class_variable_set :@@config, { + :static_css => [ first_css, second_css ], + :static_js => [ first_js, second_js ] + } + + [ first_css, second_css, first_js, second_js ].each do |file| + FileUtils.touch(file) + end + + Wordless::CLI.start ['clean'] + + [ first_css, second_css, first_js, second_js ].each do |file| + File.exists?(file).should be_false + end + end end -end \ No newline at end of file + + context "#deploy" do + + let(:cli) { Wordless::CLI.new } + let(:file) { 'shrubbery.txt' } + + before :each do + FileUtils.mkdir_p('myapp') and Dir.chdir('myapp') + FileUtils.touch('wp-config.php') + Wordless::CLI.class_variable_set :@@config, { + :deploy_command => "touch #{file}" + } + end + + it "should deploy via the deploy command" do + cli.deploy + File.exists?(file).should be_true + end + + it "should compile and clean if refresh option is passed" do + cli.should_receive(:compile).and_return(true) + cli.should_receive(:clean).and_return(true) + cli.stub(:options).and_return({ 'refresh' => true }) + cli.deploy + end + + context "if a custom deploy is passed" do + let(:file) { 'knights.txt' } + + it "should launch the custom deploy command" do + cli.stub(:options).and_return({ 'command' => "touch #{file}" }) + cli.deploy + File.exists?(file).should be_true + end + end + end +end