[refs #777] refactoring comments controller specs
This commit is contained in:
parent
519886fecd
commit
3e8d54a4ab
|
@ -1,79 +1,6 @@
|
||||||
# -*- encoding : utf-8 -*-
|
# -*- encoding : utf-8 -*-
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
def create_comment user
|
|
||||||
FactoryGirl.create(:comment, :user => user, :commentable => @commit, :project => @project)
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples_for 'user with create comment rights for commits' do
|
|
||||||
it 'should be able to perform create action' do
|
|
||||||
post :create, @create_params
|
|
||||||
response.should redirect_to(commit_path(@project, @commit.id)+"#comment#{Comment.last.id}")
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should create subscribe object into db' do
|
|
||||||
lambda{ post :create, @create_params }.should change{ Comment.count }.by(1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples_for 'user with update own comment rights for commits' do
|
|
||||||
it 'should be able to perform update action' do
|
|
||||||
put :update, {:id => @own_comment.id}.merge(@update_params)
|
|
||||||
response.status.should == 200
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should update subscribe body' do
|
|
||||||
put :update, {:id => @own_comment.id}.merge(@update_params)
|
|
||||||
@own_comment.reload.body.should == 'updated'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples_for 'user with update stranger comment rights for commits' do
|
|
||||||
it 'should be able to perform update action' do
|
|
||||||
put :update, {:id => @stranger_comment.id}.merge(@update_params)
|
|
||||||
response.status.should == 200
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should update comment title' do
|
|
||||||
put :update, {:id => @stranger_comment.id}.merge(@update_params)
|
|
||||||
@stranger_comment.reload.body.should == 'updated'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples_for 'user without update stranger comment rights for commits' do
|
|
||||||
it 'should not be able to perform update action' do
|
|
||||||
put :update, {:id => @stranger_comment.id}.merge(@update_params)
|
|
||||||
response.should redirect_to(forbidden_path)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should not update comment title' do
|
|
||||||
put :update, {:id => @stranger_comment.id}.merge(@update_params)
|
|
||||||
@stranger_comment.reload.body.should_not == 'updated'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples_for 'user without destroy comment rights for commits' do
|
|
||||||
it 'should not be able to perform destroy action' do
|
|
||||||
delete :destroy, :id => @stranger_comment.id, :commit_id => @commit.id, :owner_name => @project.owner.uname, :project_name => @project.name
|
|
||||||
response.should redirect_to(forbidden_path)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should not reduce comments count' do
|
|
||||||
lambda{ delete :destroy, :id => @stranger_comment.id, :commit_id => @commit.id, :owner_name => @project.owner.uname, :project_name => @project.name }.should change{ Comment.count }.by(0)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples_for 'user with destroy comment rights for commits' do
|
|
||||||
it 'should be able to perform destroy action' do
|
|
||||||
delete :destroy, :id => @stranger_comment.id, :commit_id => @commit.id, :owner_name => @project.owner.uname, :project_name => @project.name
|
|
||||||
response.should redirect_to(commit_path(@project, @commit.id))
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should reduce comments count' do
|
|
||||||
lambda{ delete :destroy, :id => @stranger_comment.id, :commit_id => @commit.id, :owner_name => @project.owner.uname, :project_name => @project.name }.should change{ Comment.count }.by(-1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe Projects::CommentsController do
|
describe Projects::CommentsController do
|
||||||
before(:each) do
|
before(:each) do
|
||||||
stub_symlink_methods
|
stub_symlink_methods
|
||||||
|
@ -85,10 +12,12 @@ describe Projects::CommentsController do
|
||||||
@update_params = {:comment => {:body => 'updated'}, :owner_name => @project.owner.uname, :project_name => @project.name, :commit_id => @commit.id}
|
@update_params = {:comment => {:body => 'updated'}, :owner_name => @project.owner.uname, :project_name => @project.name, :commit_id => @commit.id}
|
||||||
|
|
||||||
any_instance_of(Project, :versions => ['v1.0', 'v2.0'])
|
any_instance_of(Project, :versions => ['v1.0', 'v2.0'])
|
||||||
@stranger_comment = create_comment FactoryGirl.create(:user)
|
@comment = FactoryGirl.create(:comment, :commentable => @commit, :project => @project)
|
||||||
@user = FactoryGirl.create(:user)
|
@user = FactoryGirl.create(:user)
|
||||||
@own_comment = create_comment @user
|
@own_comment = FactoryGirl.create(:comment, :commentable => @commit, :user => @user, :project => @project)
|
||||||
set_session_for(@user)
|
set_session_for(@user)
|
||||||
|
@path = {:owner_name => @project.owner.uname, :project_name => @project.name, :commit_id => @commit.id}
|
||||||
|
@return_path = commit_path(@project, @commit.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for project admin user' do
|
context 'for project admin user' do
|
||||||
|
@ -96,25 +25,22 @@ describe Projects::CommentsController do
|
||||||
@project.relations.create!(:actor_type => 'User', :actor_id => @user.id, :role => 'admin')
|
@project.relations.create!(:actor_type => 'User', :actor_id => @user.id, :role => 'admin')
|
||||||
end
|
end
|
||||||
|
|
||||||
it_should_behave_like 'user with create comment rights for commits'
|
it_should_behave_like 'user with create comment ability'
|
||||||
it_should_behave_like 'user with update stranger comment rights for commits'
|
it_should_behave_like 'user with update stranger comment ability'
|
||||||
it_should_behave_like 'user with update own comment rights for commits'
|
it_should_behave_like 'user with update own comment ability'
|
||||||
it_should_behave_like 'user with destroy comment rights for commits'
|
it_should_behave_like 'user with destroy comment ability'
|
||||||
#it_should_behave_like 'user with destroy rights'
|
#it_should_behave_like 'user with destroy ability'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for project owner user' do
|
context 'for project owner user' do
|
||||||
before(:each) do
|
before(:each) do
|
||||||
@user.destroy
|
set_session_for(@project.owner)
|
||||||
@user = @project.owner
|
|
||||||
set_session_for(@user)
|
|
||||||
@own_comment = create_comment @user
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it_should_behave_like 'user with create comment rights for commits'
|
it_should_behave_like 'user with create comment ability'
|
||||||
it_should_behave_like 'user with update stranger comment rights for commits'
|
it_should_behave_like 'user with update stranger comment ability'
|
||||||
it_should_behave_like 'user with update own comment rights for commits'
|
it_should_behave_like 'user with update own comment ability'
|
||||||
it_should_behave_like 'user with destroy comment rights for commits'
|
it_should_behave_like 'user with destroy comment ability'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for project reader user' do
|
context 'for project reader user' do
|
||||||
|
@ -122,10 +48,10 @@ describe Projects::CommentsController do
|
||||||
@project.relations.create!(:actor_type => 'User', :actor_id => @user.id, :role => 'reader')
|
@project.relations.create!(:actor_type => 'User', :actor_id => @user.id, :role => 'reader')
|
||||||
end
|
end
|
||||||
|
|
||||||
it_should_behave_like 'user with create comment rights for commits'
|
it_should_behave_like 'user with create comment ability'
|
||||||
it_should_behave_like 'user without update stranger comment rights for commits'
|
it_should_behave_like 'user without update stranger comment ability'
|
||||||
it_should_behave_like 'user with update own comment rights for commits'
|
it_should_behave_like 'user with update own comment ability'
|
||||||
it_should_behave_like 'user without destroy comment rights for commits'
|
it_should_behave_like 'user without destroy comment ability'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for project writer user' do
|
context 'for project writer user' do
|
||||||
|
@ -133,9 +59,9 @@ describe Projects::CommentsController do
|
||||||
@project.relations.create!(:actor_type => 'User', :actor_id => @user.id, :role => 'writer')
|
@project.relations.create!(:actor_type => 'User', :actor_id => @user.id, :role => 'writer')
|
||||||
end
|
end
|
||||||
|
|
||||||
it_should_behave_like 'user with create comment rights for commits'
|
it_should_behave_like 'user with create comment ability'
|
||||||
it_should_behave_like 'user without update stranger comment rights for commits'
|
it_should_behave_like 'user without update stranger comment ability'
|
||||||
it_should_behave_like 'user with update own comment rights for commits'
|
it_should_behave_like 'user with update own comment ability'
|
||||||
it_should_behave_like 'user without destroy comment rights for commits'
|
it_should_behave_like 'user without destroy comment ability'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,7 +6,7 @@ shared_context "comments controller" do
|
||||||
stub_symlink_methods
|
stub_symlink_methods
|
||||||
|
|
||||||
@project = FactoryGirl.create(:project)
|
@project = FactoryGirl.create(:project)
|
||||||
@issue = FactoryGirl.create(:issue, :project_id => @project.id, :user => FactoryGirl.create(:user))
|
@issue = FactoryGirl.create(:issue, :project_id => @project.id)
|
||||||
@comment = FactoryGirl.create(:comment, :commentable => @issue, :project_id => @project.id)
|
@comment = FactoryGirl.create(:comment, :commentable => @issue, :project_id => @project.id)
|
||||||
|
|
||||||
@user = FactoryGirl.create(:user)
|
@user = FactoryGirl.create(:user)
|
||||||
|
@ -14,82 +14,14 @@ shared_context "comments controller" do
|
||||||
|
|
||||||
set_session_for(@user)
|
set_session_for(@user)
|
||||||
|
|
||||||
@address = {:owner_name => @project.owner.uname, :project_name => @project.name, :issue_id => @issue.serial_id}
|
@path = {:owner_name => @project.owner.uname, :project_name => @project.name, :issue_id => @issue.serial_id}
|
||||||
@create_params = {:comment => {:body => 'I am a comment!'}}.merge(@address)
|
@return_path = project_issue_path(@project, @issue)
|
||||||
@update_params = {:comment => {:body => 'updated'}}.merge(@address)
|
@create_params = {:comment => {:body => 'I am a comment!'}}.merge(@path)
|
||||||
|
@update_params = {:comment => {:body => 'updated'}}.merge(@path)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for 'user with create comment rights' do
|
|
||||||
it 'should be able to perform create action' do
|
|
||||||
post :create, @create_params
|
|
||||||
response.should redirect_to(project_issue_path(@project, @issue)+"#comment#{Comment.last.id}")
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should create comment in the database' do
|
|
||||||
lambda{ post :create, @create_params }.should change{ Comment.count }.by(1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples_for 'user with update own comment rights' do
|
|
||||||
it 'should be able to perform update action' do
|
|
||||||
put :update, {:id => @own_comment.id}.merge(@update_params)
|
|
||||||
response.status.should == 200
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should update comment body' do
|
|
||||||
put :update, {:id => @own_comment.id}.merge(@update_params)
|
|
||||||
@own_comment.reload.body.should == 'updated'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples_for 'user with update stranger comment rights' do
|
|
||||||
it 'should be able to perform update action' do
|
|
||||||
put :update, {:id => @comment.id}.merge(@update_params)
|
|
||||||
response.status.should == 200
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should update comment body' do
|
|
||||||
put :update, {:id => @comment.id}.merge(@update_params)
|
|
||||||
@comment.reload.body.should == 'updated'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples_for 'user without update stranger comment rights' do
|
|
||||||
it 'should not be able to perform update action' do
|
|
||||||
put :update, {:id => @comment.id}.merge(@update_params)
|
|
||||||
response.should redirect_to(forbidden_path)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should not update comment body' do
|
|
||||||
put :update, {:id => @comment.id}.merge(@update_params)
|
|
||||||
@comment.reload.body.should_not == 'updated'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples_for 'user without destroy comment rights' do
|
|
||||||
it 'should not be able to perform destroy action' do
|
|
||||||
delete :destroy, {:id => @comment.id}.merge(@address)
|
|
||||||
response.should redirect_to(forbidden_path)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should not delete comment from database' do
|
|
||||||
lambda{ delete :destroy, {:id => @comment.id}.merge(@address)}.should change{ Issue.count }.by(0)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples_for 'user with destroy comment rights' do
|
|
||||||
it 'should be able to perform destroy action' do
|
|
||||||
delete :destroy, {:id => @comment.id}.merge(@address)
|
|
||||||
response.should redirect_to([@project, @issue])
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should delete comment from database' do
|
|
||||||
lambda{ delete :destroy, {:id => @comment.id}.merge(@address)}.should change{ Comment.count }.by(-1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe Projects::CommentsController do
|
describe Projects::CommentsController do
|
||||||
include_context "comments controller"
|
include_context "comments controller"
|
||||||
|
|
||||||
|
@ -99,10 +31,10 @@ describe Projects::CommentsController do
|
||||||
@user.save
|
@user.save
|
||||||
end
|
end
|
||||||
|
|
||||||
it_should_behave_like 'user with create comment rights'
|
it_should_behave_like 'user with create comment ability'
|
||||||
it_should_behave_like 'user with update stranger comment rights'
|
it_should_behave_like 'user with update stranger comment ability'
|
||||||
it_should_behave_like 'user with update own comment rights'
|
it_should_behave_like 'user with update own comment ability'
|
||||||
it_should_behave_like 'user with destroy comment rights'
|
it_should_behave_like 'user with destroy comment ability'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for project admin user' do
|
context 'for project admin user' do
|
||||||
|
@ -110,10 +42,10 @@ describe Projects::CommentsController do
|
||||||
@project.relations.create!(:actor_type => 'User', :actor_id => @user.id, :role => 'admin')
|
@project.relations.create!(:actor_type => 'User', :actor_id => @user.id, :role => 'admin')
|
||||||
end
|
end
|
||||||
|
|
||||||
it_should_behave_like 'user with create comment rights'
|
it_should_behave_like 'user with create comment ability'
|
||||||
it_should_behave_like 'user with update stranger comment rights'
|
it_should_behave_like 'user with update stranger comment ability'
|
||||||
it_should_behave_like 'user with update own comment rights'
|
it_should_behave_like 'user with update own comment ability'
|
||||||
it_should_behave_like 'user with destroy comment rights'
|
it_should_behave_like 'user with destroy comment ability'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for project owner user' do
|
context 'for project owner user' do
|
||||||
|
@ -121,10 +53,10 @@ describe Projects::CommentsController do
|
||||||
set_session_for(@project.owner) # owner should be user
|
set_session_for(@project.owner) # owner should be user
|
||||||
end
|
end
|
||||||
|
|
||||||
it_should_behave_like 'user with create comment rights'
|
it_should_behave_like 'user with create comment ability'
|
||||||
it_should_behave_like 'user with update stranger comment rights'
|
it_should_behave_like 'user with update stranger comment ability'
|
||||||
it_should_behave_like 'user with update own comment rights'
|
it_should_behave_like 'user with update own comment ability'
|
||||||
it_should_behave_like 'user with destroy comment rights'
|
it_should_behave_like 'user with destroy comment ability'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for project reader user' do
|
context 'for project reader user' do
|
||||||
|
@ -132,10 +64,10 @@ describe Projects::CommentsController do
|
||||||
@project.relations.create!(:actor_type => 'User', :actor_id => @user.id, :role => 'reader')
|
@project.relations.create!(:actor_type => 'User', :actor_id => @user.id, :role => 'reader')
|
||||||
end
|
end
|
||||||
|
|
||||||
it_should_behave_like 'user with create comment rights'
|
it_should_behave_like 'user with create comment ability'
|
||||||
it_should_behave_like 'user without update stranger comment rights'
|
it_should_behave_like 'user without update stranger comment ability'
|
||||||
it_should_behave_like 'user with update own comment rights'
|
it_should_behave_like 'user with update own comment ability'
|
||||||
it_should_behave_like 'user without destroy comment rights'
|
it_should_behave_like 'user without destroy comment ability'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for project writer user' do
|
context 'for project writer user' do
|
||||||
|
@ -143,9 +75,9 @@ describe Projects::CommentsController do
|
||||||
@project.relations.create!(:actor_type => 'User', :actor_id => @user.id, :role => 'writer')
|
@project.relations.create!(:actor_type => 'User', :actor_id => @user.id, :role => 'writer')
|
||||||
end
|
end
|
||||||
|
|
||||||
it_should_behave_like 'user with create comment rights'
|
it_should_behave_like 'user with create comment ability'
|
||||||
it_should_behave_like 'user without update stranger comment rights'
|
it_should_behave_like 'user without update stranger comment ability'
|
||||||
it_should_behave_like 'user with update own comment rights'
|
it_should_behave_like 'user with update own comment ability'
|
||||||
it_should_behave_like 'user without destroy comment rights'
|
it_should_behave_like 'user without destroy comment ability'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -36,10 +36,66 @@ shared_examples_for 'user without destroy stranger comment ability (for model)'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for 'by default settings' do
|
shared_examples_for 'user with create comment ability' do
|
||||||
it 'should send an e-mail' do
|
it 'should be able to perform create action' do
|
||||||
comment = create_comment(@stranger)
|
post :create, @create_params
|
||||||
ActionMailer::Base.deliveries.count.should == 1
|
response.should redirect_to(@return_path+"#comment#{Comment.last.id}")
|
||||||
ActionMailer::Base.deliveries.last.to.include?(@user.email).should == true
|
end
|
||||||
|
|
||||||
|
it 'should create comment in the database' do
|
||||||
|
lambda{ post :create, @create_params }.should change{ Comment.count }.by(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
shared_examples_for 'user with update own comment ability' do
|
||||||
|
it 'should be able to perform update action' do
|
||||||
|
put :update, {:id => @own_comment.id}.merge(@update_params)
|
||||||
|
response.status.should == 200
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should update subscribe body' do
|
||||||
|
put :update, {:id => @own_comment.id}.merge(@update_params)
|
||||||
|
@own_comment.reload.body.should == 'updated'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
shared_examples_for 'user with update stranger comment ability' do
|
||||||
|
it 'should be able to perform update action' do
|
||||||
|
put :update, {:id => @comment.id}.merge(@update_params)
|
||||||
|
response.status.should == 200
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should update comment body' do
|
||||||
|
put :update, {:id => @comment.id}.merge(@update_params)
|
||||||
|
@comment.reload.body.should == 'updated'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
shared_examples_for 'user without update stranger comment ability' do
|
||||||
|
it 'should not be able to perform update action' do
|
||||||
|
put :update, {:id => @comment.id}.merge(@update_params)
|
||||||
|
response.should redirect_to(forbidden_path)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should not update comment body' do
|
||||||
|
put :update, {:id => @comment.id}.merge(@update_params)
|
||||||
|
@comment.reload.body.should_not == 'updated'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
shared_examples_for 'user with destroy comment ability' do
|
||||||
|
it 'should be able to perform destroy action' do
|
||||||
|
delete :destroy, {:id => @comment.id}.merge(@path)
|
||||||
|
response.should redirect_to(@return_path)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should delete comment from database' do
|
||||||
|
lambda{ delete :destroy, {:id => @comment.id}.merge(@path)}.should change{ Comment.count }.by(-1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
shared_examples_for 'user without destroy comment ability' do
|
||||||
|
it 'should not be able to perform destroy action' do
|
||||||
|
delete :destroy, {:id => @comment.id}.merge(@path)
|
||||||
|
response.should redirect_to(forbidden_path)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should not delete comment from database' do
|
||||||
|
lambda{ delete :destroy, {:id => @comment.id}.merge(@path)}.should change{ Issue.count }.by(0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue