require "spec_helper" describe Machined::CLI do describe "#compile" do it "compiles the site" do machined.should_receive(:compile) Machined::Environment.should_receive(:new).with(:root => ".", :output_path => "public", :environment => "production", :config_path => "machined.rb").and_return(machined) machined_cli "compile -e production" end end describe "#new" do it "creates a machined site directory" do within_construct do |c| machined_cli "new my_site" File.directory?("my_site").should be_true end end it "creates source directories" do within_construct do |c| machined_cli "new my_site" File.directory?("my_site/pages").should be_true File.directory?("my_site/views").should be_true File.directory?("my_site/assets/images").should be_true File.directory?("my_site/assets/javascripts").should be_true File.directory?("my_site/assets/stylesheets").should be_true end end it "creates an output path" do within_construct do |c| machined_cli "new my_site" File.directory?("my_site/public").should be_true end end it "creates an default index page" do within_construct do |c| machined_cli "new my_site" File.read("my_site/pages/index.html.erb").should == <<-CONTENT.unindent --- title: Home Page ---

<%= title %>

Find me in pages/index.erb

CONTENT end end it 'creates a default layout' do within_construct do |c| machined_cli "new my_site" File.read("my_site/views/layouts/main.html.erb").should == <<-CONTENT.unindent <%= title %> <%= stylesheet_link_tag "main" %> <%= javascript_include_tag "main" %> <%= yield %> CONTENT end end it "creates a default javascript file" do within_construct do |c| machined_cli "new my_site" File.exist?("my_site/assets/javascripts/main.js.coffee").should be_true end end it "creates a default stylesheet file" do within_construct do |c| machined_cli "new my_site" File.exist?("my_site/assets/stylesheets/main.css.scss").should be_true end end it "creates a default Gemfile" do within_construct do |c| machined_cli "new my_site" File.read("my_site/Gemfile").should == <<-CONTENT.unindent source :rubygems gem "machined", "#{Machined::VERSION}" gem "sass", "~> 3.1" gem "coffee-script", "~> 2.2" group :production do gem "uglifier", "~> 1.0" end CONTENT end end it "creates a default config file" do within_construct do |c| machined_cli "new my_site" File.read("my_site/machined.rb").should == <<-CONTENT.unindent require "bundler" Bundler.require :default, config.environment.to_sym if config.environment == "production" # Compress javascripts and stylesheets config.compress = true # Generate digests for assets URLs # config.digest_assets = true # Create gzipped versions of javascripts and stylesheets # config.gzip_assets = true end helpers do # Define helper methods here end CONTENT end end it "creates a default rackup file" do within_construct do |c| machined_cli "new my_site" File.read("my_site/config.ru").should == <<-CONTENT.unindent require "machined" run Machined::Environment.new CONTENT end end end describe "#server" do it "should start a Rack server" do app = machined Machined::Environment.should_receive(:new).with(:root => ".", :output_path => "site", :environment => "production", :config_path => "machined.rb").and_return(app) Rack::Server.should_receive(:start).with(hash_including(:app => app, :environment => "production", :Port => 5000)) machined_cli "server -o site -e production -p 5000" end end describe "#version" do it "prints out the current version number" do output = machined_cli "version" output.strip.should == Machined::VERSION end end end