126 lines
4.3 KiB
Ruby
126 lines
4.3 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 NotificationsController do
|
|
before do
|
|
sign_in :user, alice
|
|
end
|
|
|
|
describe '#update' do
|
|
it 'marks a notification as read if it gets no other information' do
|
|
note = mock_model( Notification )
|
|
Notification.should_receive( :where ).and_return( [note] )
|
|
note.should_receive( :set_read_state ).with( true )
|
|
get :update, "id" => note.id
|
|
end
|
|
it 'marks a notification as read if it is told to' do
|
|
note = mock_model( Notification )
|
|
Notification.should_receive( :where ).and_return( [note] )
|
|
note.should_receive( :set_read_state ).with( true )
|
|
get :update, "id" => note.id, :set_unread => "false"
|
|
end
|
|
|
|
it 'marks a notification as unread if it is told to' do
|
|
note = mock_model( Notification )
|
|
Notification.should_receive( :where ).and_return( [note] )
|
|
note.should_receive( :set_read_state ).with( false )
|
|
get :update, "id" => note.id, :set_unread => "true"
|
|
end
|
|
|
|
it 'only lets you read your own notifications' do
|
|
user2 = bob
|
|
|
|
FactoryGirl.create(:notification, :recipient => alice)
|
|
note = FactoryGirl.create(:notification, :recipient => user2)
|
|
|
|
get :update, "id" => note.id, :set_unread => "false"
|
|
|
|
Notification.find(note.id).unread.should == true
|
|
end
|
|
end
|
|
|
|
describe "#read_all" do
|
|
it 'marks all notifications as read' do
|
|
request.env["HTTP_REFERER"] = "I wish I were spelled right"
|
|
FactoryGirl.create(:notification, :recipient => alice)
|
|
FactoryGirl.create(:notification, :recipient => alice)
|
|
|
|
Notification.where(:unread => true).count.should == 2
|
|
get :read_all
|
|
Notification.where(:unread => true).count.should == 0
|
|
end
|
|
it "should redirect to the stream in the html version" do
|
|
FactoryGirl.create(:notification, :recipient => alice)
|
|
get :read_all, :format => :html
|
|
response.should redirect_to(stream_path)
|
|
end
|
|
it "should redirect to the stream in the mobile version" do
|
|
FactoryGirl.create(:notification, :recipient => alice)
|
|
get :read_all, :format => :mobile
|
|
response.should redirect_to(stream_path)
|
|
end
|
|
it "should return a dummy value in the json version" do
|
|
FactoryGirl.create(:notification, :recipient => alice)
|
|
get :read_all, :format => :json
|
|
response.should_not be_redirect
|
|
end
|
|
end
|
|
|
|
describe '#index' do
|
|
before do
|
|
@post = FactoryGirl.create(:status_message)
|
|
FactoryGirl.create(:notification, :recipient => alice, :target => @post)
|
|
end
|
|
|
|
it 'succeeds' do
|
|
get :index
|
|
response.should be_success
|
|
assigns[:notifications].count.should == 1
|
|
end
|
|
|
|
it 'succeeds for notification dropdown' do
|
|
get :index, :format => :json
|
|
response.should be_success
|
|
response.body.should =~ /note_html/
|
|
end
|
|
|
|
it 'succeeds on mobile' do
|
|
get :index, :format => :mobile
|
|
response.should be_success
|
|
end
|
|
|
|
it 'paginates the notifications' do
|
|
25.times { FactoryGirl.create(:notification, :recipient => alice, :target => @post) }
|
|
get :index
|
|
assigns[:notifications].count.should == 25
|
|
get :index, "page" => 2
|
|
assigns[:notifications].count.should == 1
|
|
end
|
|
|
|
it "supports a limit per_page parameter" do
|
|
5.times { FactoryGirl.create(:notification, :recipient => alice, :target => @post) }
|
|
get :index, "per_page" => 5
|
|
assigns[:notifications].count.should == 5
|
|
end
|
|
|
|
describe "special case for start sharing notifications" do
|
|
it "should not provide a contacts menu for standard notifications" do
|
|
2.times { FactoryGirl.create(:notification, :recipient => alice, :target => @post) }
|
|
get :index, "per_page" => 5
|
|
|
|
Nokogiri(response.body).css('.aspect_membership').should be_empty
|
|
end
|
|
it "should provide a contacts menu for start sharing notifications" do
|
|
2.times { FactoryGirl.create(:notification, :recipient => alice, :target => @post) }
|
|
eve.share_with(alice.person, eve.aspects.first)
|
|
get :index, "per_page" => 5
|
|
|
|
Nokogiri(response.body).css('.aspect_membership').should_not be_empty
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|