require "spec_helper"
include Redistat

describe Redistat::Connection do

  before(:each) do
    @redis = Redistat.redis
  end

  it "should have a valid Redis client instance" do
    Redistat.redis.should_not be_nil
  end

  it "should have initialized custom testing connection" do
    @redis.client.host.should == '127.0.0.1'
    @redis.client.port.should == 8379
    @redis.client.db.should == 15
  end

  it "should be able to set and get data" do
    @redis.set("hello", "world")
    @redis.get("hello").should == "world"
    @redis.del("hello").should be_true
  end

  it "should be able to store hashes to Redis" do
    @redis.hset("hash", "field", "1")
    @redis.hget("hash", "field").should == "1"
    @redis.hincrby("hash", "field", 1)
    @redis.hget("hash", "field").should == "2"
    @redis.hincrby("hash", "field", -1)
    @redis.hget("hash", "field").should == "1"
    @redis.del("hash")
  end

  it "should be accessible from Redistat module" do
    Redistat.redis.should == Connection.get
    Redistat.redis.should == Redistat.connection
  end

  it "should handle multiple connections with refs" do
    Redistat.redis.client.db.should == 15
    Redistat.connect(:port => 8379, :db => 14, :ref => "Custom")
    Redistat.redis.client.db.should == 15
    Redistat.redis("Custom").client.db.should == 14
  end

  it "should be able to overwrite default and custom refs" do
    Redistat.redis.client.db.should == 15
    Redistat.connect(:port => 8379, :db => 14)
    Redistat.redis.client.db.should == 14

    Redistat.redis("Custom").client.db.should == 14
    Redistat.connect(:port => 8379, :db => 15, :ref => "Custom")
    Redistat.redis("Custom").client.db.should == 15

    # Reset the default connection to the testing server or all hell
    # might brake loose from the rest of the specs
    Redistat.connect(:port => 8379, :db => 15)
  end

  # TODO: Test thread-safety
  it "should be thread-safe" do
    pending("need to figure out a way to test thread-safety")
  end

end
