diaspora/spec/shared_behaviors/relayable.rb
Benjamin Neff 4fea926057
Only update interacted_at on new comments
I got feedback from many users, that they don't understand how the "my
activity" stream is sorted, because they have posts on the top, but
don't see why. The user doesn't see if a like was added, and it is also
not imported for the user to see the post again then. And we have
notifications if someone likes a users own posts, so no need to move it on
top of the "my activity" stream here too.

closes #7030
2016-09-04 03:29:59 +02:00

88 lines
3.2 KiB
Ruby

# Copyright (c) 2010-2011, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
require "spec_helper"
shared_examples_for "it is relayable" do
describe "validations" do
context "author ignored by parent author" do
context "the author is on the parent object author's ignore list when object is created" do
before do
bob.blocks.create(person: alice.person)
end
it "is invalid" do
expect(relayable).not_to be_valid
expect(relayable.errors[:author_id].size).to eq(1)
end
it "works if the object has no parent" do # This can happen if we get a comment for a post that's been deleted
relayable.parent = nil
expect { relayable.valid? }.to_not raise_exception
end
end
context "the author is added to the parent object author's ignore list later" do
it "is valid" do
relayable.save!
bob.blocks.create(person: alice.person)
expect(relayable).to be_valid
end
end
end
end
describe "#subscribers" do
context "parent is local" do
it "returns the parents original audience, if author is local" do
expect(object_on_local_parent.subscribers.map(&:id))
.to match_array([local_leia.person, remote_raphael].map(&:id))
end
it "returns remote persons of the parents original audience not on same pod as the author, if author is remote" do
person1 = FactoryGirl.create(:person, pod: remote_raphael.pod)
person2 = FactoryGirl.create(:person, pod: FactoryGirl.create(:pod))
local_luke.share_with(person1, local_luke.aspects.first)
local_luke.share_with(person2, local_luke.aspects.first)
expect(remote_object_on_local_parent.subscribers.map(&:id)).to match_array([person2].map(&:id))
end
end
context "parent is remote" do
it "returns the author of parent and author of relayable (for local delivery)" do
expect(object_on_remote_parent.subscribers.map(&:id))
.to match_array([remote_raphael, local_luke.person].map(&:id))
end
end
end
describe "#signature" do
let(:signature_class) { described_class.reflect_on_association(:signature).klass }
before do
remote_object_on_local_parent.signature = signature_class.new(
author_signature: "signature",
additional_data: {"new_property" => "some text"},
signature_order: FactoryGirl.create(:signature_order)
)
end
it "returns the signature data" do
signature = described_class.find(remote_object_on_local_parent.id).signature
expect(signature).not_to be_nil
expect(signature.author_signature).to eq("signature")
expect(signature.additional_data).to eq("new_property" => "some text")
expect(signature.order).to eq(%w(guid parent_guid text author))
end
it "deletes the signature when destroying the relayable" do
id = remote_object_on_local_parent.id
remote_object_on_local_parent.destroy!
signature = signature_class.find_by(signature_class.primary_key => id)
expect(signature).to be_nil
end
end
end