require 'spec_helper'

describe YogiBerra::Catcher do
  before(:all) do
    @test_yaml = "#{SPEC_FOLDER}/fixtures/test.yml"
  end

  before(:each) do
    YogiBerra::Logger.stub(:log)
  end

  it "should load a yaml file without rails" do
    lambda { YogiBerra::Catcher.load_db_settings(@test_yaml) }.should_not raise_error
    YogiBerra::Catcher.settings.should_not == nil
    YogiBerra::Catcher.settings["project"].should == "test_yogi_project"
  end

  it "should load a yaml file with rails" do
    ENV["YOGI_ENV"] = nil
    load "#{SPEC_FOLDER}/fixtures/rails.rb"
    lambda { YogiBerra::Catcher.load_db_settings }.should_not raise_error
    YogiBerra::Catcher.settings.should_not == nil
    YogiBerra::Catcher.settings["project"].should == "rails_yogi_project"
    Object.send(:remove_const, :Rails)
  end

  it "should grab a connection using the settings file" do
    mock_mongo_client(:client_should => true)
    connection = nil
    YogiBerra::Catcher.load_db_settings(@test_yaml)
    connection = YogiBerra::Catcher.quick_connection
    connection.should_not == nil
  end

  it "should grab a connection to mongodb" do
    mock_mongo_client(:auth => false)
    YogiBerra::Catcher.load_db_settings(@test_yaml)
    db_client = YogiBerra::Catcher.db_client(YogiBerra::Catcher.settings["host"], YogiBerra::Catcher.settings["port"])
    db_client.should_not == nil
  end

  it "should grab a connection and fail to connect after 5 seconds" do
    mock_mongo_client(:timeout => true)
    YogiBerra::Catcher.load_db_settings(@test_yaml)
    client = YogiBerra::Catcher.db_client(YogiBerra::Catcher.settings["host"], YogiBerra::Catcher.settings["port"])
    client.should == nil
  end

  it "should grab a connection and authenticate" do
    mock_mongo_client(:client_should => true)
    YogiBerra::Catcher.load_db_settings(@test_yaml)
    connection = YogiBerra::Catcher.quick_connection
    connection.should_not == nil
  end

  it "should grab a connection and fail to authenticate" do
    mock_mongo_client(:client_should => true, :auth => :error)
    YogiBerra::Catcher.load_db_settings(@test_yaml)
    connection = YogiBerra::Catcher.quick_connection
    connection.should_not == nil
  end
end