diaspora/spec/models/notifications/mentioned_in_post_spec.rb
2016-11-28 15:56:56 +02:00

72 lines
2.6 KiB
Ruby

describe Notifications::MentionedInPost, type: :model do
let(:sm) {
FactoryGirl.create(:status_message, author: alice.person, text: "hi @{bob; #{bob.diaspora_handle}}", public: true)
}
let(:mentioned_notification) { Notifications::MentionedInPost.new(recipient: bob) }
describe ".notify" do
it "calls create_notification with mention" do
expect(Notifications::MentionedInPost).to receive(:create_notification).with(
bob, sm.mentions.first, sm.author
).and_return(mentioned_notification)
Notifications::MentionedInPost.notify(sm, [])
end
it "sends an email to the mentioned person" do
allow(Notifications::MentionedInPost).to receive(:create_notification).and_return(mentioned_notification)
expect(bob).to receive(:mail).with(Workers::Mail::Mentioned, bob.id, sm.author.id, sm.mentions.first.id)
Notifications::MentionedInPost.notify(sm, [])
end
it "does nothing if the mentioned person is not local" do
sm = FactoryGirl.create(
:status_message,
author: alice.person,
text: "hi @{raphael; #{remote_raphael.diaspora_handle}}",
public: true
)
expect(Notifications::MentionedInPost).not_to receive(:create_notification)
Notifications::MentionedInPost.notify(sm, [])
end
it "does not notify if the author of the post is ignored" do
bob.blocks.create(person: sm.author)
expect_any_instance_of(Notifications::MentionedInPost).not_to receive(:email_the_user)
Notifications::MentionedInPost.notify(sm, [])
expect(Notifications::MentionedInPost.where(target: sm.mentions.first)).not_to exist
end
context "with private post" do
let(:private_sm) {
FactoryGirl.create(
:status_message,
author: remote_raphael,
text: "hi @{bob; #{bob.diaspora_handle}}",
public: false
).tap {|private_sm|
private_sm.receive([bob.id, alice.id])
}
}
it "calls create_notification if the mentioned person is a recipient of the post" do
expect(Notifications::MentionedInPost).to receive(:create_notification).with(
bob, private_sm.mentions.first, private_sm.author
).and_return(mentioned_notification)
Notifications::MentionedInPost.notify(private_sm, [bob.id])
end
it "does not call create_notification if the mentioned person is not a recipient of the post" do
expect(Notifications::MentionedInPost).not_to receive(:create_notification)
Notifications::MentionedInPost.notify(private_sm, [alice.id])
end
end
end
end