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


describe PostsController do
  include SocialStream::TestHelpers
  include SocialStream::TestHelpers::Controllers

  render_views

  describe "authorizing" do
    before do
      @user = Factory(:user)
      sign_in @user
    end

    describe "posts to user" do
      describe "with first relation" do
        before do
          tie = @user.sent_ties.received_by(@user).related_by(@user.relation_customs.sort.first).first
          model_assigned_to tie
          @current_model = Factory(:post, :_activity_tie_id => tie)
        end

        it_should_behave_like "Allow Creating"
        it_should_behave_like "Allow Destroying"
      end

      describe "with last relation" do
        before do
          tie = @user.sent_ties.received_by(@user).related_by(@user.relation_customs.sort.last).first
          model_assigned_to tie
          @current_model = Factory(:post, :_activity_tie_id => tie)
        end

        it_should_behave_like "Allow Creating"
        it_should_behave_like "Allow Destroying"
      end

      describe "with public relation" do
        before do
          tie = @user.sent_ties.received_by(@user).related_by(@user.relation_public).first
          model_assigned_to tie
          @current_model = Factory(:post, :_activity_tie_id => tie)
        end

        it_should_behave_like "Allow Creating"
        it_should_behave_like "Allow Destroying"
      end

    end

    describe "post to friend" do
      before do
        friend = Factory(:friend, :receiver => @user.actor).sender

        model_assigned_to friend.activity_ties_for(@user).first
      end

      it_should_behave_like "Allow Creating"
    end

    describe "post to acquaintance" do
      before do
        ac = Factory(:acquaintance, :receiver => @user.actor).sender

        model_assigned_to Factory(:friend, :sender => @user.actor, :receiver => ac)
      end

      it_should_behave_like "Deny Creating"
    end

    describe "posts represented group" do
      before do
        @group = Factory(:member, :receiver_id => @user.actor_id).sender_subject
      end

      describe "with public relation" do
        before do
          tie = @group.activity_ties_for(@user).first
          model_assigned_to tie
          @current_model = Factory(:post, :_activity_tie_id => tie)
        end

        it_should_behave_like "Allow Creating"
        it_should_behave_like "Allow Destroying"
      end

      context "representing the group" do
        before do
          represent(@group)
        end

        describe "with first relation" do
          before do
            tie = @group.sent_ties.received_by(@group).related_by(@group.relation_customs.sort.first).first
            model_assigned_to tie
            @current_model = Factory(:post, :_activity_tie_id => tie)
          end

          it_should_behave_like "Allow Creating"
          it_should_behave_like "Allow Destroying"
        end

        describe "with last relation" do
          before do
            tie = @group.sent_ties.received_by(@group).related_by(@group.relation_customs.sort.last).first
            model_assigned_to tie
            @current_model = Factory(:post, :_activity_tie_id => tie)
          end

          it_should_behave_like "Allow Creating"
          it_should_behave_like "Allow Destroying"
        end

        describe "with public relation" do
          before do
            tie = @group.sent_ties.received_by(@group).related_by(@group.relation_public).first
            model_assigned_to tie
            @current_model = Factory(:post, :_activity_tie_id => tie)
          end

          it_should_behave_like "Allow Creating"
          it_should_behave_like "Allow Destroying"
        end
      end
    end
  end
end