From 4b020b8d61e85ca1b1689971015e8c184a99d0b0 Mon Sep 17 00:00:00 2001
From: Benjamin Neff <benjamin@coding4coffee.ch>
Date: Mon, 22 Aug 2016 00:43:43 +0200
Subject: [PATCH] Fix regressions from #6998

* fixed old reshares of reshares
* fixed deleted root of a reshare
---
 app/presenters/post_presenter.rb       |  9 +++--
 spec/presenters/post_presenter_spec.rb | 46 +++++++++++++++++++++++++-
 2 files changed, 49 insertions(+), 6 deletions(-)

diff --git a/app/presenters/post_presenter.rb b/app/presenters/post_presenter.rb
index 9045f339b5..ba1609c8a4 100644
--- a/app/presenters/post_presenter.rb
+++ b/app/presenters/post_presenter.rb
@@ -20,7 +20,7 @@ class PostPresenter < BasePresenter
       description:          {name:     "description",    content: description},
       og_url:               {property: "og:url",         content: url},
       og_title:             {property: "og:title",       content: title},
-      og_image:             {property: "og:image",       content:  images},
+      og_image:             {property: "og:image",       content: images},
       og_description:       {property: "og:description", content: description},
       og_article_tag:       {property: "og:article:tag", content: tags},
       og_article_author:    {property: "og:article:author",         content: author_name},
@@ -138,9 +138,8 @@ class PostPresenter < BasePresenter
   end
 
   def tags
-    tags = @post.is_a?(Reshare) ? @post.root.tags : @post.tags
-    return tags.map(&:name) if tags
-    []
+    tags = @post.is_a?(Reshare) ? @post.absolute_root.try(:tags) : @post.tags
+    tags ? tags.map(&:name) : []
   end
 
   def comma_separated_tags
@@ -152,6 +151,6 @@ class PostPresenter < BasePresenter
   end
 
   def description
-    message.plain_text_without_markdown(truncate:  1000)
+    message.try(:plain_text_without_markdown, truncate: 1000)
   end
 end
diff --git a/spec/presenters/post_presenter_spec.rb b/spec/presenters/post_presenter_spec.rb
index 07a4b2d841..5c9c527287 100644
--- a/spec/presenters/post_presenter_spec.rb
+++ b/spec/presenters/post_presenter_spec.rb
@@ -75,7 +75,7 @@ describe PostPresenter do
     end
 
     context "with posts without text" do
-      it " displays a messaage with the post class" do
+      it "displays a messaage with the post class" do
         @sm = double(message: double(present?: false), author: bob.person, author_name: bob.person.name)
         @presenter.post = @sm
         expect(@presenter.send(:title)).to eq("A post from #{@sm.author.name}")
@@ -89,4 +89,48 @@ describe PostPresenter do
       expect(presenter.as_json).to be_a(Hash)
     end
   end
+
+  describe "#tags" do
+    it "returns the tag of the post" do
+      post = FactoryGirl.create(:status_message, text: "#hello #world", public: true)
+
+      expect(PostPresenter.new(post).send(:tags)).to match_array(%w(hello world))
+    end
+
+    it "returns the tag of the absolute_root of a Reshare" do
+      post = FactoryGirl.create(:status_message, text: "#hello #world", public: true)
+      first_reshare = FactoryGirl.create(:reshare, root: post)
+      second_reshare = FactoryGirl.create(:reshare, root: first_reshare)
+
+      expect(PostPresenter.new(second_reshare).send(:tags)).to match_array(%w(hello world))
+    end
+
+    it "does not raise if the root of a reshare does not exist anymore" do
+      reshare = FactoryGirl.create(:reshare)
+      reshare.root = nil
+
+      expect(PostPresenter.new(reshare).send(:tags)).to eq([])
+    end
+  end
+
+  describe "#description" do
+    it "returns the first 1000 chars of the text" do
+      post = FactoryGirl.create(:status_message, text: "a" * 1001, public: true)
+
+      expect(PostPresenter.new(post).send(:description)).to eq("#{'a' * 997}...")
+    end
+
+    it "does not change the message if less or equal 1000 chars" do
+      post = FactoryGirl.create(:status_message, text: "a" * 1000, public: true)
+
+      expect(PostPresenter.new(post).send(:description)).to eq("a" * 1000)
+    end
+
+    it "does not raise if the root of a reshare does not exist anymore" do
+      reshare = FactoryGirl.create(:reshare)
+      reshare.root = nil
+
+      expect(PostPresenter.new(reshare).send(:description)).to eq(nil)
+    end
+  end
 end
-- 
GitLab