From 57dbcc0e67caf41944ff7e0dd70cdc1748b5b615 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Tue, 14 Jun 2016 05:31:44 +0200 Subject: [PATCH] add root author to reshare subscribers --- app/controllers/reshares_controller.rb | 2 +- app/models/reshare.rb | 4 +++ lib/federated/generator.rb | 12 +-------- spec/controllers/reshares_controller_spec.rb | 2 +- spec/lib/diaspora/federated/generator_spec.rb | 26 ------------------- spec/models/reshare_spec.rb | 12 +++++++++ spec/support/user_methods.rb | 1 - 7 files changed, 19 insertions(+), 40 deletions(-) delete mode 100644 spec/lib/diaspora/federated/generator_spec.rb diff --git a/app/controllers/reshares_controller.rb b/app/controllers/reshares_controller.rb index 4be025598..22915891a 100644 --- a/app/controllers/reshares_controller.rb +++ b/app/controllers/reshares_controller.rb @@ -11,7 +11,7 @@ class ResharesController < ApplicationController end if @reshare.save - current_user.dispatch_post(@reshare, :url => post_url(@reshare), :additional_subscribers => @reshare.root_author) + current_user.dispatch_post(@reshare) render :json => ExtremePostPresenter.new(@reshare, current_user), :status => 201 else render :nothing => true, :status => 422 diff --git a/app/models/reshare.rb b/app/models/reshare.rb index c042e0852..1ec55eef0 100644 --- a/app/models/reshare.rb +++ b/app/models/reshare.rb @@ -63,6 +63,10 @@ class Reshare < Post @absolute_root end + def subscribers + super + [root.author] + end + private def root_must_be_public diff --git a/lib/federated/generator.rb b/lib/federated/generator.rb index ce39df90f..4c78a36da 100644 --- a/lib/federated/generator.rb +++ b/lib/federated/generator.rb @@ -5,27 +5,17 @@ module Federated def initialize(user, target) @user = user @target = target - @dispatcher_opts ||= {} end def create!(options={}) relayable = build(options) if relayable.save! logger.info "user:#{@user.id} dispatching #{relayable.class}:#{relayable.guid}" - add_root_author(relayable) - Diaspora::Federation::Dispatcher.defer_dispatch(@user, relayable, @dispatcher_opts) + Diaspora::Federation::Dispatcher.defer_dispatch(@user, relayable) relayable end end - def add_root_author(relayable) - return unless relayable.parent.respond_to?(:root) && relayable.parent.root - # Comment post is a reshare, include original author in subscribers - root_post = relayable.parent.root - @dispatcher_opts[:additional_subscribers] ||= [] - @dispatcher_opts[:additional_subscribers] << root_post.author - end - def build(options={}) self.class.federated_class.new(options.merge(relayable_options).merge(author_id: @user.person.id)) end diff --git a/spec/controllers/reshares_controller_spec.rb b/spec/controllers/reshares_controller_spec.rb index 90b2720d9..5285927bd 100644 --- a/spec/controllers/reshares_controller_spec.rb +++ b/spec/controllers/reshares_controller_spec.rb @@ -34,7 +34,7 @@ describe ResharesController, :type => :controller do end it 'calls dispatch' do - expect(bob).to receive(:dispatch_post).with(anything, hash_including(:additional_subscribers)) + expect(bob).to receive(:dispatch_post) post_request! end diff --git a/spec/lib/diaspora/federated/generator_spec.rb b/spec/lib/diaspora/federated/generator_spec.rb deleted file mode 100644 index d72f11652..000000000 --- a/spec/lib/diaspora/federated/generator_spec.rb +++ /dev/null @@ -1,26 +0,0 @@ -require "spec_helper" - -describe "adds root author on reshare" do - before do - @generator = Federated::Generator.new(double("user", id: 1), double) - @root_author = double("root_author") - root = double("root", author: @root_author) - parent = double("parent", root: root) - @relayable = double("relayable", parent: parent, class: "foo", guid: "123") - end - - it "adds root to additional subscribers" do - @generator.add_root_author(@relayable) - additional_subscribers = @generator.instance_variable_get(:@dispatcher_opts)[:additional_subscribers] - expect(additional_subscribers).to include(@root_author) - end - - it "calls add_root_author" do - allow(Diaspora::Federation::Dispatcher).to receive(:defer_dispatch).and_return(true) - allow(@generator).to receive(:build).and_return(@relayable) - allow(@relayable).to receive(:save!).and_return(true) - allow(@relayable).to receive(:new_record?).and_return(false) - expect(@generator).to receive(:add_root_author) - @generator.create! - end -end diff --git a/spec/models/reshare_spec.rb b/spec/models/reshare_spec.rb index be473eff4..5ad2d9643 100644 --- a/spec/models/reshare_spec.rb +++ b/spec/models/reshare_spec.rb @@ -115,4 +115,16 @@ describe Reshare, type: :model do end end end + + describe "#subscribers" do + it "adds root author to subscribers" do + user = FactoryGirl.create(:user_with_aspect) + user.share_with(alice.person, user.aspects.first) + + post = eve.post(:status_message, text: "hello", public: true) + reshare = FactoryGirl.create(:reshare, root: post, author: user.person) + + expect(reshare.subscribers).to eq([alice.person, eve.person]) + end + end end diff --git a/spec/support/user_methods.rb b/spec/support/user_methods.rb index acbfd15cc..9b5860809 100644 --- a/spec/support/user_methods.rb +++ b/spec/support/user_methods.rb @@ -27,7 +27,6 @@ class User host: AppConfig.pod_uri.to_s ), to: opts[:to]} - dispatch_opts.merge!(:additional_subscribers => p.root.author) if class_name == :reshare dispatch_post(p, dispatch_opts) end unless opts[:created_at]