Files
growstuff/spec/controllers/notifications_controller_spec.rb
2018-01-04 21:28:48 +13:00

93 lines
2.9 KiB
Ruby

require 'rails_helper'
describe NotificationsController do
login_member
def valid_attributes
{
"recipient_id" => subject.current_member.id,
"sender_id" => FactoryBot.create(:member).id,
"subject" => 'test'
}
end
# this gets a bit confused because for most of the notification tests
# (reading, etc) the logged in member needs to be the recipient.
# However, for sending private messages (create, etc) the logged in
# member needs to be the sender. Hence this separate set of
# attributes.
def valid_attributes_for_sender
{
"sender_id" => subject.current_member.id,
"recipient_id" => FactoryBot.create(:member).id,
"subject" => 'test'
}
end
def valid_session
{}
end
describe "GET index" do
it "assigns all notifications as @notifications" do
notification = FactoryBot.create(:notification, recipient_id: subject.current_member.id)
get :index, params: {}
assigns(:notifications).should eq([notification])
end
end
describe "GET show" do
it "assigns the requested notification as @notification" do
notification = FactoryBot.create(:notification, recipient_id: subject.current_member.id)
get :show, params: { id: notification.to_param }
assigns(:notification).should eq(notification)
end
it "assigns the reply link for a post comment" do
notification = FactoryBot.create(:notification, recipient_id: subject.current_member.id)
get :show, params: { id: notification.to_param }
assigns(:reply_link).should_not be_nil
assigns(:reply_link).should eq new_comment_url(
post_id: notification.post.id
)
end
it "marks notifications as read" do
notification = FactoryBot.create(:notification, recipient_id: subject.current_member.id)
get :show, params: { id: notification.to_param }
# we need to fetch it from the db again, can't test against the old one
n = Notification.find(notification.id)
n.read.should eq true
end
end
describe "GET reply" do
it "marks notifications as read" do
notification = FactoryBot.create(:notification, recipient_id: subject.current_member.id)
get :reply, params: { id: notification.to_param }
# we need to fetch it from the db again, can't test against the old one
n = Notification.find(notification.id)
n.read.should eq true
end
end
describe "GET new" do
it "assigns a recipient" do
@recipient = FactoryBot.create(:member)
get :new, params: { recipient_id: @recipient.id }
assigns(:recipient).should be_an_instance_of(Member)
end
end
describe "POST create" do
describe "with valid params" do
it "redirects to the recipient's profile" do
@recipient = FactoryBot.create(:member)
post :create, params: { notification: { recipient_id: @recipient.id, subject: 'foo' } }
response.should redirect_to(notifications_path)
end
end
end
end