require 'rails_helper'

describe Comment do

  context "basic" do
    before(:each) do
      @comment = FactoryGirl.create(:comment)
    end

    it "belongs to a post" do
      @comment.post.should be_an_instance_of Post
    end

    it "belongs to an author" do
      @comment.author.should be_an_instance_of Member
    end
  end

  context "notifications" do
    before(:each) do
      @comment = FactoryGirl.create(:comment)
    end

    it "sends a notification when a comment is posted" do
      expect {
        FactoryGirl.create(:comment)
      }.to change(Notification, :count).by(1)
    end

    it "sets the notification fields" do
      @c = FactoryGirl.create(:comment)
      @n = Notification.first
      @n.sender.should eq @c.author
      @n.recipient.should eq @c.post.author
      @n.subject.should match /commented on/
      @n.body.should eq @c.body
      @n.post.should eq @c.post
    end

    it "doesn't send notifications to yourself" do
      @m = FactoryGirl.create(:member)
      @p = FactoryGirl.create(:post, :author => @m)
      expect {
        FactoryGirl.create(:comment, :post => @p, :author => @m)
      }.to change(Notification, :count).by(0)
    end
  end

  context "ordering" do
    before(:each) do
      @m = FactoryGirl.create(:member)
      @p = FactoryGirl.create(:post, :author => @m)
      @c1 = FactoryGirl.create(:comment, :post => @p, :author => @m)
      @c2 = FactoryGirl.create(:comment, :post => @p, :author => @m)
    end

    it 'is in DESC order by default' do
      Comment.all.should eq [@c2, @c1]
    end

    it 'has a scope for ASC order for displaying on post page' do
      Comment.post_order.should eq [@c1, @c2]
    end
  end

end
