diaspora/spec/models/notification_spec.rb
Benjamin Neff 0d338b6f79 don't create notifications if the notification-actor is ignored
Also move "shareable hidden"-logic to AlsoCommented, because it is the
only one that needs it. And write some specs for mentioned and started
sharing notifications.

Fixes #6294
2016-08-14 17:03:49 +02:00

87 lines
2.7 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 Notification, :type => :model do
before do
@sm = FactoryGirl.create(:status_message)
@person = FactoryGirl.create(:person)
@user = alice
@user2 = eve
@aspect = @user.aspects.create(:name => "dudes")
@opts = {:target_id => @sm.id,
:target_type => @sm.class.base_class.to_s,
:type => 'Notifications::CommentOnPost',
:actors => [@person],
:recipient_id => @user.id}
@note = Notification.new(@opts)
end
it 'destoys the associated notification_actor' do
@note.save
expect{@note.destroy}.to change(NotificationActor, :count).by(-1)
end
describe '.for' do
it 'returns all of a users notifications' do
user2 = FactoryGirl.create(:user)
4.times do
Notification.create(@opts)
end
@opts.delete(:recipient_id)
Notification.create(@opts.merge(:recipient_id => user2.id))
expect(Notification.for(@user).count).to eq(4)
end
end
describe 'set_read_state method' do
it "should set an unread notification to read" do
@note.unread = true
@note.save
@note.set_read_state( true )
expect(@note.unread).to eq(false)
end
it "should set an read notification to unread" do
@note.unread = false
@note.save
@note.set_read_state( false )
expect(@note.unread).to eq(true)
end
end
describe ".concatenate_or_create" do
it "creates a new notification if the notification does not exist" do
Notification.concatenate_or_create(alice, @sm, eve.person)
notification = Notification.find_by(recipient: alice, target: @sm)
expect(notification.actors).to eq([eve.person])
end
it "creates a new notification if the notification is unread" do
@note.unread = false
@note.save
expect(Notification.count).to eq(1)
Notification.concatenate_or_create(@note.recipient, @note.target, eve.person)
expect(Notification.count).to eq(2)
end
it "appends the actors to the already existing notification" do
notification = Notification.create_notification(alice, @sm, @person)
expect {
Notification.concatenate_or_create(alice, @sm, eve.person)
}.to change(notification.actors, :count).by(1)
end
it "doesn't append the actor to an existing notification if it is already there" do
notification = Notification.create_notification(alice, @sm, @person)
expect {
Notification.concatenate_or_create(alice, @sm, @person)
}.not_to change(notification.actors, :count)
end
end
end