diaspora/spec/models/comment_spec.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

98 lines
3.4 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"
describe Comment, type: :model do
let(:alices_aspect) { alice.aspects.first }
let(:status_bob) { bob.post(:status_message, text: "hello", to: bob.aspects.first.id) }
let(:comment_alice) { alice.comment!(status_bob, "why so formal?") }
describe "#destroy" do
it "should delete a participation" do
comment_alice
expect { comment_alice.destroy }.to change { Participation.count }.by(-1)
end
it "should decrease count participation" do
alice.comment!(status_bob, "Are you there?")
comment_alice.destroy
participations = Participation.where(target_id: comment_alice.commentable_id, author_id: comment_alice.author_id)
expect(participations.first.count).to eq(1)
end
end
describe "User#comment" do
it "should be able to comment on one's own status" do
bob.comment!(status_bob, "sup dog")
expect(status_bob.reload.comments.first.text).to eq("sup dog")
end
it "should be able to comment on a contact's status" do
comment_alice
expect(status_bob.reload.comments.first.text).to eq("why so formal?")
end
it "does not multi-post a comment" do
expect {
comment_alice
}.to change { Comment.count }.by(1)
end
it "should create a participation" do
comment_alice
participations = Participation.where(target_id: comment_alice.commentable_id, author_id: comment_alice.author_id)
expect(participations.count).to eq(1)
end
it "does not create a participation if comment validation failed" do
begin
alice.comment!(status_bob, " ")
rescue ActiveRecord::RecordInvalid
end
participations = Participation.where(target_id: status_bob, author_id: alice.person.id)
expect(participations.count).to eq(0)
end
end
describe "counter cache" do
it "increments the counter cache on its post" do
expect {
comment_alice
}.to change{
status_bob.reload.comments_count
}.by(1)
end
end
describe "interacted_at" do
it "sets the interacted at of the parent to the created at of the comment" do
Timecop.travel(Time.zone.now + 1.minute)
comment = Comment::Generator.new(alice, status_bob, "why so formal?").build
comment.save
expect(status_bob.reload.interacted_at.to_i).to eq(comment.created_at.to_i)
end
end
it_behaves_like "it is relayable" do
let(:remote_parent) { FactoryGirl.create(:status_message, author: remote_raphael) }
let(:local_parent) { local_luke.post(:status_message, text: "hi", to: local_luke.aspects.first) }
let(:object_on_local_parent) { local_luke.comment!(local_parent, "yo!") }
let(:object_on_remote_parent) { local_luke.comment!(remote_parent, "Yeah, it was great") }
let(:remote_object_on_local_parent) { FactoryGirl.create(:comment, post: local_parent, author: remote_raphael) }
let(:relayable) { Comment::Generator.new(alice, status_bob, "why so formal?").build }
end
describe "tags" do
let(:object) { build(:comment) }
before do
# shared_behaviors/taggable.rb is still using instance variables, so we need to define them here.
# Suggestion: refactor all specs using shared_behaviors/taggable.rb to use "let"
@object = object
end
it_should_behave_like "it is taggable"
end
end