Commit 2bb61b50eb08513d1224f0140b7a2ec633d33da7

Authored by João M. M. Silva + Guilherme Rojas V. de Lima
Committed by Rafael Manzo
1 parent a801d1d1

Projects helper

Projects helper and destroy link is not shown anymore if the user is not the owner
app/helpers/projects_helper.rb 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +module ProjectsHelper
  2 + def project_owner? project_id
  3 + user_signed_in? && !current_user.project_ownerships.find_by_project_id(project_id).nil?
  4 + end
  5 +end
0 6 \ No newline at end of file
... ...
app/views/projects/show.html.erb
... ... @@ -9,7 +9,9 @@
9 9 </p>
10 10  
11 11 <p>
12   - <%= link_to 'Destroy', project_path(@project.id), method: :delete, data: { confirm: 'Are you sure?' } %>
  12 + <% if project_owner? @project.id %>
  13 + <%= link_to 'Destroy', project_path(@project.id), method: :delete, data: { confirm: 'Are you sure?' } %>
  14 + <% end %>
13 15 </p>
14 16  
15 17 <%= link_to 'Back', projects_path %>
... ...
spec/controllers/projects_controller_spec.rb
... ... @@ -11,7 +11,7 @@ describe ProjectsController do
11 11 it { should respond_with(:success) }
12 12 it { should render_template(:new) }
13 13 end
14   -
  14 +
15 15 describe 'create' do
16 16 before do
17 17 sign_in FactoryGirl.create(:user)
... ... @@ -27,7 +27,7 @@ describe ProjectsController do
27 27 end
28 28  
29 29 context 'rendering the show' do
30   - before :each do
  30 + before :each do
31 31 Project.expects(:exists?).returns(true)
32 32  
33 33 post :create, :project => @subject_params
... ... @@ -42,7 +42,7 @@ describe ProjectsController do
42 42 before :each do
43 43 post :create, :project => @subject_params
44 44 end
45   -
  45 +
46 46 it { should respond_with(:redirect) }
47 47 end
48 48 end
... ... @@ -51,7 +51,7 @@ describe ProjectsController do
51 51 before :each do
52 52 @subject = FactoryGirl.build(:project)
53 53 @subject_params = Hash[FactoryGirl.attributes_for(:project).map { |k,v| [k.to_s, v.to_s] }] #FIXME: Mocha is creating the expectations with strings, but FactoryGirl returns everything with sybols and integers
54   -
  54 +
55 55 Project.expects(:new).at_least_once.with(@subject_params).returns(@subject)
56 56 Project.any_instance.expects(:save).returns(false)
57 57  
... ... @@ -84,7 +84,7 @@ describe ProjectsController do
84 84 @ownerships = []
85 85 @ownerships.expects(:find_by_project_id).with(@subject.id).returns(@ownership)
86 86 User.any_instance.expects(:project_ownerships).returns(@ownerships)
87   -
  87 +
88 88 Project.expects(:find).with(@subject.id.to_s).returns(@subject)
89 89 delete :destroy, :id => @subject.id
90 90 end
... ... @@ -136,7 +136,7 @@ describe ProjectsController do
136 136 end
137 137  
138 138 context 'rendering the show' do
139   - before :each do
  139 + before :each do
140 140 Project.expects(:exists?).returns(true)
141 141  
142 142 post :update, :id => @subject.id, :project => @subject_params
... ... @@ -151,7 +151,7 @@ describe ProjectsController do
151 151 before :each do
152 152 post :update, :id => @subject.id, :project => @subject_params
153 153 end
154   -
  154 +
155 155 it { should respond_with(:redirect) }
156 156 end
157 157 end
... ... @@ -160,7 +160,7 @@ describe ProjectsController do
160 160 before :each do
161 161 @subject = FactoryGirl.build(:project)
162 162 @subject_params = Hash[FactoryGirl.attributes_for(:project).map { |k,v| [k.to_s, v.to_s] }] #FIXME: Mocha is creating the expectations with strings, but FactoryGirl returns everything with sybols and integers
163   -
  163 +
164 164 Project.expects(:find).with(@subject.id.to_s).returns(@subject)
165 165 Project.any_instance.expects(:update).with(@subject_params).returns(false)
166 166  
... ...
spec/helpers/projects_helper_spec.rb 0 → 100644
... ... @@ -0,0 +1,46 @@
  1 +require 'spec_helper'
  2 +
  3 +describe ProjectsHelper do
  4 +
  5 + describe 'project_owner?' do
  6 + before :each do
  7 + @subject = FactoryGirl.build(:project)
  8 + end
  9 +
  10 + context 'returns false if not logged in' do
  11 + before :each do
  12 + helper.expects(:user_signed_in?).returns(false)
  13 + end
  14 + it { helper.project_owner?(@subject.id).should be_false }
  15 + end
  16 +
  17 + context 'returns false if is not the owner' do
  18 + before :each do
  19 + helper.expects(:user_signed_in?).returns(true)
  20 + helper.expects(:current_user).returns(FactoryGirl.build(:user))
  21 +
  22 + @ownerships = []
  23 + @ownerships.expects(:find_by_project_id).with(@subject.id).returns(nil)
  24 +
  25 + User.any_instance.expects(:project_ownerships).returns(@ownerships)
  26 + end
  27 +
  28 + it { helper.project_owner?(@subject.id).should be_false }
  29 + end
  30 +
  31 + context 'returns true if user is the project owner' do
  32 + before :each do
  33 + helper.expects(:user_signed_in?).returns(true)
  34 + helper.expects(:current_user).returns(FactoryGirl.build(:user))
  35 +
  36 + @ownership = FactoryGirl.build(:project_ownership)
  37 + @ownerships = []
  38 + @ownerships.expects(:find_by_project_id).with(@subject.id).returns(@ownership)
  39 + User.any_instance.expects(:project_ownerships).returns(@ownerships)
  40 + end
  41 +
  42 + it { helper.project_owner?(@subject.id).should be_true }
  43 + end
  44 + end
  45 +
  46 +end
0 47 \ No newline at end of file
... ...