Files
growstuff/spec/controllers/comments_controller_spec.rb
2017-02-17 09:47:12 +13:00

117 lines
3.6 KiB
Ruby

## DEPRECATION NOTICE: Do not add new tests to this file!
##
## View and controller tests are deprecated in the Growstuff project.
## We no longer write new view and controller tests, but instead write
## feature tests (in spec/features) using Capybara (https://github.com/jnicklas/capybara).
## These test the full stack, behaving as a browser, and require less complicated setup
## to run. Please feel free to delete old view/controller tests as they are reimplemented
## in feature tests.
##
## If you submit a pull request containing new view or controller tests, it will not be
## merged.
require 'rails_helper'
describe CommentsController do
before(:each) do
@member = FactoryGirl.create(:member)
sign_in @member
controller.stub(:current_member) { @member }
end
def valid_attributes
@post = FactoryGirl.create(:post)
{ post_id: @post.id, body: "some text" }
end
describe "GET RSS feed" do
it "returns an RSS feed" do
get :index, format: "rss"
response.should be_success
response.should render_template("comments/index")
response.content_type.should eq("application/rss+xml")
end
end
describe "GET new" do
let(:post) { FactoryGirl.create(:post) }
describe "with valid params" do
before { get :new, post_id: post.id }
it "picks up post from params" do
assigns(:post).should eq(post)
end
let(:old_comment) { FactoryGirl.create(:comment, post: post) }
it "assigns the old comments as @comments" do
assigns(:comments).should eq [old_comment]
end
end
it "dies if no post specified" do
get :new
expect(response).not_to be_success
end
end
describe "GET edit" do
let(:post) { FactoryGirl.create(:post) }
before { get :edit, id: comment.to_param }
describe "my comment" do
let!(:comment) { FactoryGirl.create :comment, author: @member, post: post }
let!(:old_comment) { FactoryGirl.create(:comment, post: post, created_at: Time.zone.yesterday) }
it "assigns previous comments as @comments" do
assigns(:comments).should eq([comment, old_comment])
end
end
describe "not my comment" do
let(:comment) { FactoryGirl.create :comment, post: post }
it { expect(response).not_to be_success }
end
end
describe "PUT update" do
before { put :update, id: comment.to_param, comment: valid_attributes }
describe "my comment" do
let(:comment) { FactoryGirl.create :comment, author: @member }
it "redirects to the comment's post" do
expect(response).to redirect_to(comment.post)
end
end
describe "not my comment" do
let(:comment) { FactoryGirl.create :comment }
it { expect(response).not_to be_success }
end
describe "attempting to change post_id" do
let(:post) { FactoryGirl.create :post, subject: 'our post' }
let(:other_post) { FactoryGirl.create :post, subject: 'the other post' }
let(:valid_attributes) { { post_id: other_post.id, body: "kōrero" } }
let(:comment) { FactoryGirl.create :comment, author: @member, post: post }
it "does not change post_id" do
comment.reload
expect(comment.post_id).to eq(post.id)
end
end
end
describe "DELETE destroy" do
before { delete :destroy, id: comment.to_param }
describe "my comment" do
let(:comment) { FactoryGirl.create :comment, author: @member }
it "redirects to the post the comment was on" do
expect(response).to redirect_to(comment.post)
end
end
describe "not my comment" do
let(:comment) { FactoryGirl.create :comment }
it { expect(response).not_to be_success }
end
end
end