201 lines
5.1 KiB
Ruby
201 lines
5.1 KiB
Ruby
require 'rails_helper'
|
|
|
|
describe CommentsController, type: :controller do
|
|
let!(:user) { build(:user) }
|
|
let!(:subcreddit) { create(:subcreddit) }
|
|
let!(:tpost) { create(:post, subcreddit: subcreddit) }
|
|
let(:data) { { content: 'Here is some updated content for a comment' } }
|
|
|
|
before(:each) do
|
|
allow_any_instance_of(ApplicationController)
|
|
.to receive(:current_user).and_return(user)
|
|
end
|
|
|
|
describe '#show' do
|
|
let!(:comment) { create(:comment) }
|
|
before(:each) do
|
|
get :show,
|
|
subcreddit_id: comment.post.subcreddit,
|
|
post_id: comment.post,
|
|
id: comment
|
|
end
|
|
|
|
it 'should render :show' do
|
|
expect(response).to render_template(:show)
|
|
end
|
|
|
|
it 'should assign correct Comment to @comment' do
|
|
expect(assigns(:comment)).to eq(comment)
|
|
end
|
|
end
|
|
|
|
describe '#new' do
|
|
let(:comment) { build(:comment) }
|
|
before(:each) do
|
|
get :new,
|
|
subcreddit_id: comment.post.subcreddit,
|
|
post_id: comment.post
|
|
end
|
|
|
|
it 'should render :new' do
|
|
expect(response).to render_template(:new)
|
|
end
|
|
|
|
it 'should assign new Comment to @comment' do
|
|
expect(assigns(:comment)).to be_a_new(Comment)
|
|
end
|
|
end
|
|
|
|
describe '#create' do
|
|
context 'with valid data' do
|
|
it 'should create a comment' do
|
|
expect do
|
|
post :create,
|
|
subcreddit_id: subcreddit,
|
|
post_id: tpost,
|
|
comment: data
|
|
end.to change(Comment, :count).by(1)
|
|
end
|
|
|
|
it 'should redirect to the parent post' do
|
|
expect(post :create,
|
|
subcreddit_id: subcreddit,
|
|
post_id: tpost,
|
|
comment: data
|
|
).to redirect_to(subcreddit_post_path(assigns(:post).subcreddit,
|
|
assigns(:post)))
|
|
end
|
|
|
|
it 'should send a notice flash message' do
|
|
expect(post :create,
|
|
subcreddit_id: subcreddit,
|
|
post_id: tpost,
|
|
comment: data)
|
|
|
|
expect(flash[:notice]).to be_present
|
|
end
|
|
end
|
|
|
|
context 'with invalid data' do
|
|
before(:each) { data['content'] = '' }
|
|
|
|
it 'should not create a new comment' do
|
|
expect do
|
|
post :create,
|
|
subcreddit_id: subcreddit,
|
|
post_id: tpost,
|
|
comment: data
|
|
end.to change(Comment, :count).by(0)
|
|
end
|
|
|
|
it 'should render :new' do
|
|
expect(post :create,
|
|
subcreddit_id: subcreddit,
|
|
post_id: tpost,
|
|
comment: data
|
|
).to redirect_to(subcreddit_post_path(subcreddit, tpost))
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#edit' do
|
|
let!(:comment) { create(:comment) }
|
|
before(:each) do
|
|
get :edit,
|
|
id: comment,
|
|
post_id: comment.post,
|
|
subcreddit_id: comment.post.subcreddit
|
|
end
|
|
|
|
context 'with valid comment' do
|
|
it 'should render :edit' do
|
|
expect(response).to render_template(:edit)
|
|
end
|
|
|
|
it 'should assign correct Comment to @comment' do
|
|
expect(assigns(:comment)).to eq(comment)
|
|
end
|
|
end
|
|
end
|
|
|
|
context '#update' do
|
|
let!(:comment) { create(:comment) }
|
|
let(:data) { { content: 'Some edited comment content goes here' } }
|
|
|
|
context 'with valid data' do
|
|
before(:each) do
|
|
put :update,
|
|
id: comment,
|
|
post_id: comment.post,
|
|
subcreddit_id: comment.post.subcreddit,
|
|
comment: data
|
|
end
|
|
|
|
it 'should assign correct Comment to @comment' do
|
|
expect(assigns(:comment)).to eq(comment)
|
|
end
|
|
|
|
it 'should update the comment' do
|
|
comment.reload
|
|
|
|
expect(comment.content).to eq(data[:content])
|
|
end
|
|
|
|
it 'should redirect to the post' do
|
|
expect(response)
|
|
.to redirect_to(subcreddit_post_path(assigns(:post).subcreddit,
|
|
assigns(:post)))
|
|
end
|
|
|
|
it 'should display a notice flash message' do
|
|
expect(flash[:notice]).to be_present
|
|
end
|
|
end
|
|
|
|
context 'with invalid data' do
|
|
before(:each) { data[:content] = '' }
|
|
|
|
it 'should render :edit' do
|
|
put :update,
|
|
id: comment,
|
|
post_id: comment.post,
|
|
subcreddit_id: comment.post.subcreddit,
|
|
comment: data
|
|
|
|
expect(response).to render_template(:edit)
|
|
end
|
|
end
|
|
end
|
|
|
|
context '#destroy' do
|
|
let!(:comment) { create(:comment) }
|
|
|
|
it 'should delete the post' do
|
|
delete :destroy,
|
|
id: comment,
|
|
post_id: comment.post,
|
|
subcreddit_id: comment.post.subcreddit
|
|
|
|
comment.reload
|
|
expect(comment.destroyed?).to be(true)
|
|
end
|
|
|
|
it 'should redirect to the post' do
|
|
delete :destroy,
|
|
id: comment,
|
|
post_id: comment.post,
|
|
subcreddit_id: comment.post.subcreddit
|
|
|
|
expect(response).to redirect_to(subcreddit_post_path(assigns(:subcreddit),
|
|
assigns(:post)))
|
|
end
|
|
|
|
it 'should send a notice flash message' do
|
|
delete :destroy,
|
|
id: comment,
|
|
post_id: comment.post,
|
|
subcreddit_id: comment.post.subcreddit
|
|
expect(flash[:notice]).to be_present
|
|
end
|
|
end
|
|
end
|