Unverified Commit 163ffdb1 authored by Benjamin Neff's avatar Benjamin Neff
Browse files

Allow multiple reshares without root

Follow-up for #7578

Fixes #7587
parent cd09c75c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ class Reshare < Post
  belongs_to :root, class_name: "Post", foreign_key: :root_guid, primary_key: :guid, optional: true
  validate :root_must_be_public
  validates_presence_of :root, :on => :create
  validates_uniqueness_of :root_guid, :scope => :author_id
  validates :root_guid, uniqueness: {scope: :author_id}, allow_nil: true
  delegate :author, to: :root, prefix: true

  before_validation do
+34 −8
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ describe Reshare, type: :model do
    expect(FactoryGirl.build(:reshare)).to be_valid
  end

  context "validation" do
    it "requires root" do
      reshare = FactoryGirl.build(:reshare, root: nil)
      expect(reshare).not_to be_valid
@@ -14,6 +15,31 @@ describe Reshare, type: :model do
      expect(reshare.errors[:base]).to include("Only posts which are public may be reshared.")
    end

    it "allows two reshares without a root" do
      reshare1 = FactoryGirl.create(:reshare, author: alice.person)
      reshare2 = FactoryGirl.create(:reshare, author: alice.person)

      reshare1.update_attributes(root_guid: nil)

      reshare2.root_guid = nil
      expect(reshare2).to be_valid
    end

    it "doesn't allow to reshare the same post twice" do
      post = FactoryGirl.create(:status_message, public: true)
      FactoryGirl.create(:reshare, author: alice.person, root: post)

      expect(FactoryGirl.build(:reshare, author: alice.person, root: post)).not_to be_valid
    end

    it "allows to reshare the same post with different people" do
      post = FactoryGirl.create(:status_message, public: true)
      FactoryGirl.create(:reshare, author: alice.person, root: post)

      expect(FactoryGirl.build(:reshare, author: bob.person, root: post)).to be_valid
    end
  end

  it "forces public" do
    expect(FactoryGirl.create(:reshare, public: false).public).to be true
  end