require File.expand_path(File.dirname(__FILE__) + '/spec_helper')

require 'compiler/domains'

describe "Domains" do
  before(:each) do
    stub_git_helper
    stub_ymdp_configuration
    
    @options = {
      :commit => true,
      :branch => "master",
      :message => "Commit message"
    }   
    @domains = YMDP::Compiler::Domains.new(@options)
  end
  
  describe "instantiation" do
    it "should instantiate" do
      @domains.should_not be_nil
    end
    
    it "should set options" do
      @domains.options.should == @options
    end
    
    it "should set message" do
      @domains.message.should == @options[:message]
    end
    
    it "should set servers" do
      @domains.servers.should == @servers
    end
    
    it "should set base_path" do
      @domains.paths[:base_path].should == @base_path
    end
    
    it "should set domains" do
      @domains = YMDP::Compiler::Domains.new(@options.merge({:domain => "staging"}))
      @domains.domains.should == ["staging"]
    end
    
    it "should not commit" do
      @git_helper.should_not_receive(:do_commit)
      @domains = YMDP::Compiler::Domains.new(@options.merge({:commit => false}))
    end
    
    it "should commit" do
      @git_helper.should_receive(:do_commit).with(@options[:message])
      @domains = YMDP::Compiler::Domains.new(@options)
    end
  end
  
  describe "compile" do
    before(:each) do
      stub_screen_io
      stub_file_io("")
      stub_erb("")
      stub_timer
      
      @compiler = mock('compiler').as_null_object
      YMDP::Compiler::Base.stub!(:new).and_return(@compiler)
    end
    
    describe "process domains" do
      it "should create a new compiler" do
        @servers.keys.each do |server|
          YMDP::Compiler::Base.should_receive(:new).with(anything, anything, anything).and_return(@compiler)
        end
        @domains.compile
      end
    
      it "should process the views" do
        @servers.keys.each do |server|
          @compiler.should_receive(:process_all)
        end
        @domains.compile
      end
    end
  end
end