From 66925918b124dced2648cfc13629d0503fdc8636 Mon Sep 17 00:00:00 2001 From: Jason Robinson <mail@jasonrobinson.me> Date: Sat, 21 Nov 2015 21:44:32 +0200 Subject: [PATCH] Send comment to reshare author when commenting on reshare As posts are always delivered also to reshare root, comments should also be delivered to reshare root, for concistency. --- lib/federated/generator.rb | 9 +++++++ spec/lib/diaspora/federated/generator_spec.rb | 25 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 spec/lib/diaspora/federated/generator_spec.rb diff --git a/lib/federated/generator.rb b/lib/federated/generator.rb index da3a8390e4..062d13168d 100644 --- a/lib/federated/generator.rb +++ b/lib/federated/generator.rb @@ -12,11 +12,20 @@ module Federated relayable = build(options) if relayable.save! logger.info "user:#{@user.id} dispatching #{relayable.class}:#{relayable.guid}" + add_root_author(relayable) Postzord::Dispatcher.defer_build_and_post(@user, relayable, @dispatcher_opts) 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={}) options.merge!(relayable_options) relayable = self.class.federated_class.new(options.merge(:author_id => @user.person.id)) diff --git a/spec/lib/diaspora/federated/generator_spec.rb b/spec/lib/diaspora/federated/generator_spec.rb new file mode 100644 index 0000000000..a7859efc61 --- /dev/null +++ b/spec/lib/diaspora/federated/generator_spec.rb @@ -0,0 +1,25 @@ +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(Postzord::Dispatcher).to receive(:defer_build_and_post).and_return(true) + allow(@generator).to receive(:build).and_return(@relayable) + allow(@relayable).to receive(:save!).and_return(true) + expect(@generator).to receive(:add_root_author) + @generator.create! + end +end -- GitLab