From e0be1b49f128a7665c26c97ab51e1f7c44b42e8c Mon Sep 17 00:00:00 2001
From: Steffen van Bergerem <svbergerem@online.de>
Date: Mon, 5 Oct 2015 18:59:46 +0200
Subject: [PATCH] Add public stream

closes #6465
---
 Changelog.md                                |  1 +
 app/assets/javascripts/app/router.js        |  1 +
 app/controllers/streams_controller.rb       |  1 -
 app/views/streams/main_stream.html.haml     |  2 ++
 features/desktop/public_stream.feature      | 30 +++++++++++++++++++++
 spec/controllers/streams_controller_spec.rb |  8 +-----
 6 files changed, 35 insertions(+), 8 deletions(-)
 create mode 100644 features/desktop/public_stream.feature

diff --git a/Changelog.md b/Changelog.md
index 1146ce99f8..18728e2414 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -14,6 +14,7 @@
 * Only post to the primary tumblr blog [#6386](https://github.com/diaspora/diaspora/pull/6386)
 * Always show public photos on profile page [#6398](https://github.com/diaspora/diaspora/pull/6398)
 * Expose Unicorn's pid option to our configuration system [#6411](https://github.com/diaspora/diaspora/pull/6411)
+* Add stream of all public posts [#6465](https://github.com/diaspora/diaspora/pull/6465)
 
 # 0.5.3.1
 
diff --git a/app/assets/javascripts/app/router.js b/app/assets/javascripts/app/router.js
index 43befff7a5..824252046d 100644
--- a/app/assets/javascripts/app/router.js
+++ b/app/assets/javascripts/app/router.js
@@ -24,6 +24,7 @@ app.Router = Backbone.Router.extend({
     "commented": "stream",
     "liked": "stream",
     "mentions": "stream",
+    "public": "stream",
     "followed_tags": "followed_tags",
     "tags/:name": "followed_tags",
     "people/:id/photos": "photos",
diff --git a/app/controllers/streams_controller.rb b/app/controllers/streams_controller.rb
index 52edbe5ec2..f8e8b422f3 100644
--- a/app/controllers/streams_controller.rb
+++ b/app/controllers/streams_controller.rb
@@ -5,7 +5,6 @@
 class StreamsController < ApplicationController
   before_action :authenticate_user!
   before_action :save_selected_aspects, :only => :aspects
-  before_action :redirect_unless_admin, :only => :public
 
   layout proc { request.format == :mobile ? "application" : "with_header" }
 
diff --git a/app/views/streams/main_stream.html.haml b/app/views/streams/main_stream.html.haml
index a3c7fccb63..f4d963ea6f 100644
--- a/app/views/streams/main_stream.html.haml
+++ b/app/views/streams/main_stream.html.haml
@@ -39,6 +39,8 @@
           = render "aspects/aspect_listings", stream: @stream
         %li
           = render "tags/followed_tags_listings"
+        %li{data: {stream: "public"}}
+          = link_to t("streams.public.title"), public_stream_path, rel: "backbone", class: "hoverable"
 
     .span6
       #aspect_stream_container.stream_container
diff --git a/features/desktop/public_stream.feature b/features/desktop/public_stream.feature
new file mode 100644
index 0000000000..7d9c27f5dc
--- /dev/null
+++ b/features/desktop/public_stream.feature
@@ -0,0 +1,30 @@
+@javascript
+Feature: The public stream
+  Background:
+    Given following users exist:
+      | username    | email             |
+      | Alice Smith | alice@alice.alice |
+      | Bob Jones   | bob@bob.bob       |
+      | Eve Doe     | eve@eve.eve       |
+    And a user with email "alice@alice.alice" is connected with "bob@bob.bob"
+    And "bob@bob.bob" has a public post with text "Bob’s public post"
+    And "bob@bob.bob" has a non public post with text "Bob’s private post"
+    And "eve@eve.eve" has a public post with text "Eve’s public post"
+  
+  Scenario: seeing public posts of someone you don't follow
+    When I sign in as "alice@alice.alice"
+    Then I should not see "Eve’s public post"
+    When I am on the public stream page
+    Then I should see "Eve’s public post"
+
+  Scenario: seeing public posts of someone you follow
+    When I sign in as "alice@alice.alice"
+    Then I should see "Bob’s public post"
+    When I am on the public stream page
+    Then I should see "Bob’s public post"
+
+  Scenario: not seeing private posts of someone you follow
+    When I sign in as "alice@alice.alice"
+    Then I should see "Bob’s private post"
+    When I am on the public stream page
+    Then I should not see "Bob’s private post"
diff --git a/spec/controllers/streams_controller_spec.rb b/spec/controllers/streams_controller_spec.rb
index 05440948f0..9aeb5f3194 100644
--- a/spec/controllers/streams_controller_spec.rb
+++ b/spec/controllers/streams_controller_spec.rb
@@ -10,16 +10,10 @@ describe StreamsController, :type => :controller do
   end
 
   describe "#public" do
-    it 'will succeed if admin' do
-      Role.add_admin(alice.person)
+    it "succeeds" do
       get :public
       expect(response).to be_success
     end
-
-    it 'will redirect if not' do
-      get :public
-      expect(response).to be_redirect
-    end
   end
 
   describe '#multi' do
-- 
GitLab