require "../spec_helper"

describe Spectator::Matchers::TruthyMatcher do
  context "truthy" do
    describe "#match?" do
      context "with a truthy value" do
        it "is true" do
          value = 42
          partial = Spectator::Expectations::ValueExpectationPartial.new(value)
          matcher = Spectator::Matchers::TruthyMatcher.new(true)
          matcher.match?(partial).should be_true
        end
      end

      context "with false" do
        it "is false" do
          value = false
          partial = Spectator::Expectations::ValueExpectationPartial.new(value)
          matcher = Spectator::Matchers::TruthyMatcher.new(true)
          matcher.match?(partial).should be_false
        end
      end

      context "with nil" do
        it "is false" do
          value = nil
          partial = Spectator::Expectations::ValueExpectationPartial.new(value)
          matcher = Spectator::Matchers::TruthyMatcher.new(true)
          matcher.match?(partial).should be_false
        end
      end
    end

    describe "#message" do
      it "contains the actual label" do
        value = 42
        label = "everything"
        partial = Spectator::Expectations::ValueExpectationPartial.new(label, value)
        matcher = Spectator::Matchers::TruthyMatcher.new(true)
        matcher.message(partial).should contain(label)
      end

      it "contains the \"truthy\"" do
        value = 42
        label = "everything"
        partial = Spectator::Expectations::ValueExpectationPartial.new(value)
        matcher = Spectator::Matchers::TruthyMatcher.new(true)
        matcher.message(partial).should contain("truthy")
      end
    end

    describe "#negated_message" do
      it "contains the actual label" do
        value = 42
        label = "everything"
        partial = Spectator::Expectations::ValueExpectationPartial.new(label, value)
        matcher = Spectator::Matchers::TruthyMatcher.new(true)
        matcher.negated_message(partial).should contain(label)
      end

      it "contains the \"truthy\"" do
        value = 42
        label = "everything"
        partial = Spectator::Expectations::ValueExpectationPartial.new(value)
        matcher = Spectator::Matchers::TruthyMatcher.new(true)
        matcher.negated_message(partial).should contain("truthy")
      end
    end
  end

  context "falsey" do
    describe "#match?" do
      context "with a truthy value" do
        it "is false" do
          value = 42
          partial = Spectator::Expectations::ValueExpectationPartial.new(value)
          matcher = Spectator::Matchers::TruthyMatcher.new(false)
          matcher.match?(partial).should be_false
        end
      end

      context "with false" do
        it "is true" do
          value = false
          partial = Spectator::Expectations::ValueExpectationPartial.new(value)
          matcher = Spectator::Matchers::TruthyMatcher.new(false)
          matcher.match?(partial).should be_true
        end
      end

      context "with nil" do
        it "is true" do
          value = nil
          partial = Spectator::Expectations::ValueExpectationPartial.new(value)
          matcher = Spectator::Matchers::TruthyMatcher.new(false)
          matcher.match?(partial).should be_true
        end
      end
    end

    describe "#message" do
      it "contains the actual label" do
        value = 42
        label = "everything"
        partial = Spectator::Expectations::ValueExpectationPartial.new(label, value)
        matcher = Spectator::Matchers::TruthyMatcher.new(false)
        matcher.message(partial).should contain(label)
      end

      it "contains the \"falsey\"" do
        value = 42
        label = "everything"
        partial = Spectator::Expectations::ValueExpectationPartial.new(value)
        matcher = Spectator::Matchers::TruthyMatcher.new(false)
        matcher.message(partial).should contain("falsey")
      end
    end

    describe "#negated_message" do
      it "contains the actual label" do
        value = 42
        label = "everything"
        partial = Spectator::Expectations::ValueExpectationPartial.new(label, value)
        matcher = Spectator::Matchers::TruthyMatcher.new(false)
        matcher.negated_message(partial).should contain(label)
      end

      it "contains the \"falsey\"" do
        value = 42
        label = "everything"
        partial = Spectator::Expectations::ValueExpectationPartial.new(value)
        matcher = Spectator::Matchers::TruthyMatcher.new(false)
        matcher.negated_message(partial).should contain("falsey")
      end
    end
  end
end