##// END OF EJS Templates
Refactor: move method, ProjectsController#reset_activities to ProjectEnumerationsController#destroy....
Eric Davis -
r3940:c1068bf0cd32
parent child
Show More
@@ -15,4 +15,12 class ProjectEnumerationsController < ApplicationController
15 redirect_to :controller => 'projects', :action => 'settings', :tab => 'activities', :id => @project
15 redirect_to :controller => 'projects', :action => 'settings', :tab => 'activities', :id => @project
16 end
16 end
17
17
18 def destroy
19 @project.time_entry_activities.each do |time_entry_activity|
20 time_entry_activity.destroy(time_entry_activity.parent)
21 end
22 flash[:notice] = l(:notice_successful_update)
23 redirect_to :controller => 'projects', :action => 'settings', :tab => 'activities', :id => @project
24 end
25
18 end
26 end
@@ -238,14 +238,6 class ProjectsController < ApplicationController
238 @project = nil
238 @project = nil
239 end
239 end
240
240
241 def reset_activities
242 @project.time_entry_activities.each do |time_entry_activity|
243 time_entry_activity.destroy(time_entry_activity.parent)
244 end
245 flash[:notice] = l(:notice_successful_update)
246 redirect_to :controller => 'projects', :action => 'settings', :tab => 'activities', :id => @project
247 end
248
249 private
241 private
250 def find_optional_project
242 def find_optional_project
251 return true unless params[:id]
243 return true unless params[:id]
@@ -32,7 +32,7
32 </table>
32 </table>
33
33
34 <div class="contextual">
34 <div class="contextual">
35 <%= link_to(l(:button_reset), {:controller => 'projects', :action => 'reset_activities', :id => @project},
35 <%= link_to(l(:button_reset), {:controller => 'project_enumerations', :action => 'destroy', :id => @project},
36 :method => :delete,
36 :method => :delete,
37 :confirm => l(:text_are_you_sure),
37 :confirm => l(:text_are_you_sure),
38 :class => 'icon icon-del') %>
38 :class => 'icon icon-del') %>
@@ -209,7 +209,7 ActionController::Routing::Routes.draw do |map|
209
209
210 projects.with_options :conditions => {:method => :delete} do |project_actions|
210 projects.with_options :conditions => {:method => :delete} do |project_actions|
211 project_actions.conditions 'projects/:id.:format', :action => 'destroy', :format => /xml/
211 project_actions.conditions 'projects/:id.:format', :action => 'destroy', :format => /xml/
212 project_actions.conditions 'projects/:id/reset_activities', :action => 'reset_activities'
212 project_actions.conditions 'projects/:id/reset_activities', :controller => 'project_enumerations', :action => 'destroy'
213 end
213 end
214 end
214 end
215
215
@@ -87,7 +87,7 Redmine::AccessControl.map do |map|
87 map.permission :view_time_entries, :timelog => [:details, :report]
87 map.permission :view_time_entries, :timelog => [:details, :report]
88 map.permission :edit_time_entries, {:timelog => [:edit, :destroy]}, :require => :member
88 map.permission :edit_time_entries, {:timelog => [:edit, :destroy]}, :require => :member
89 map.permission :edit_own_time_entries, {:timelog => [:edit, :destroy]}, :require => :loggedin
89 map.permission :edit_own_time_entries, {:timelog => [:edit, :destroy]}, :require => :loggedin
90 map.permission :manage_project_activities, {:projects => [:reset_activities], :project_enumerations => [:save]}, :require => :member
90 map.permission :manage_project_activities, {:project_enumerations => [:save, :destroy]}, :require => :member
91 end
91 end
92
92
93 map.project_module :news do |map|
93 map.project_module :news do |map|
@@ -139,4 +139,51 class ProjectEnumerationsControllerTest < ActionController::TestCase
139 # TimeEntries shouldn't have been reassigned on the saved record either
139 # TimeEntries shouldn't have been reassigned on the saved record either
140 assert_equal 1, TimeEntry.find_all_by_activity_id_and_project_id(10, 1).size, "Time Entries are not assigned to system activities"
140 assert_equal 1, TimeEntry.find_all_by_activity_id_and_project_id(10, 1).size, "Time Entries are not assigned to system activities"
141 end
141 end
142
143 def test_destroy
144 @request.session[:user_id] = 2 # manager
145 project_activity = TimeEntryActivity.new({
146 :name => 'Project Specific',
147 :parent => TimeEntryActivity.find(:first),
148 :project => Project.find(1),
149 :active => true
150 })
151 assert project_activity.save
152 project_activity_two = TimeEntryActivity.new({
153 :name => 'Project Specific Two',
154 :parent => TimeEntryActivity.find(:last),
155 :project => Project.find(1),
156 :active => true
157 })
158 assert project_activity_two.save
159
160 delete :destroy, :id => 1
161 assert_response :redirect
162 assert_redirected_to 'projects/ecookbook/settings/activities'
163
164 assert_nil TimeEntryActivity.find_by_id(project_activity.id)
165 assert_nil TimeEntryActivity.find_by_id(project_activity_two.id)
166 end
167
168 def test_destroy_should_reassign_time_entries_back_to_the_system_activity
169 @request.session[:user_id] = 2 # manager
170 project_activity = TimeEntryActivity.new({
171 :name => 'Project Specific Design',
172 :parent => TimeEntryActivity.find(9),
173 :project => Project.find(1),
174 :active => true
175 })
176 assert project_activity.save
177 assert TimeEntry.update_all("activity_id = '#{project_activity.id}'", ["project_id = ? AND activity_id = ?", 1, 9])
178 assert 3, TimeEntry.find_all_by_activity_id_and_project_id(project_activity.id, 1).size
179
180 delete :destroy, :id => 1
181 assert_response :redirect
182 assert_redirected_to 'projects/ecookbook/settings/activities'
183
184 assert_nil TimeEntryActivity.find_by_id(project_activity.id)
185 assert_equal 0, TimeEntry.find_all_by_activity_id_and_project_id(project_activity.id, 1).size, "TimeEntries still assigned to project specific activity"
186 assert_equal 3, TimeEntry.find_all_by_activity_id_and_project_id(9, 1).size, "TimeEntries still assigned to project specific activity"
187 end
188
142 end
189 end
@@ -381,52 +381,6 class ProjectsControllerTest < ActionController::TestCase
381 assert_template 'show'
381 assert_template 'show'
382 end
382 end
383
383
384 def test_reset_activities
385 @request.session[:user_id] = 2 # manager
386 project_activity = TimeEntryActivity.new({
387 :name => 'Project Specific',
388 :parent => TimeEntryActivity.find(:first),
389 :project => Project.find(1),
390 :active => true
391 })
392 assert project_activity.save
393 project_activity_two = TimeEntryActivity.new({
394 :name => 'Project Specific Two',
395 :parent => TimeEntryActivity.find(:last),
396 :project => Project.find(1),
397 :active => true
398 })
399 assert project_activity_two.save
400
401 delete :reset_activities, :id => 1
402 assert_response :redirect
403 assert_redirected_to 'projects/ecookbook/settings/activities'
404
405 assert_nil TimeEntryActivity.find_by_id(project_activity.id)
406 assert_nil TimeEntryActivity.find_by_id(project_activity_two.id)
407 end
408
409 def test_reset_activities_should_reassign_time_entries_back_to_the_system_activity
410 @request.session[:user_id] = 2 # manager
411 project_activity = TimeEntryActivity.new({
412 :name => 'Project Specific Design',
413 :parent => TimeEntryActivity.find(9),
414 :project => Project.find(1),
415 :active => true
416 })
417 assert project_activity.save
418 assert TimeEntry.update_all("activity_id = '#{project_activity.id}'", ["project_id = ? AND activity_id = ?", 1, 9])
419 assert 3, TimeEntry.find_all_by_activity_id_and_project_id(project_activity.id, 1).size
420
421 delete :reset_activities, :id => 1
422 assert_response :redirect
423 assert_redirected_to 'projects/ecookbook/settings/activities'
424
425 assert_nil TimeEntryActivity.find_by_id(project_activity.id)
426 assert_equal 0, TimeEntry.find_all_by_activity_id_and_project_id(project_activity.id, 1).size, "TimeEntries still assigned to project specific activity"
427 assert_equal 3, TimeEntry.find_all_by_activity_id_and_project_id(9, 1).size, "TimeEntries still assigned to project specific activity"
428 end
429
430 # A hook that is manually registered later
384 # A hook that is manually registered later
431 class ProjectBasedTemplate < Redmine::Hook::ViewListener
385 class ProjectBasedTemplate < Redmine::Hook::ViewListener
432 def view_layouts_base_html_head(context)
386 def view_layouts_base_html_head(context)
@@ -190,7 +190,7 class RoutingTest < ActionController::IntegrationTest
190 should_route :put, "/projects/1.xml", :controller => 'projects', :action => 'edit', :id => '1', :format => 'xml'
190 should_route :put, "/projects/1.xml", :controller => 'projects', :action => 'edit', :id => '1', :format => 'xml'
191
191
192 should_route :delete, "/projects/1.xml", :controller => 'projects', :action => 'destroy', :id => '1', :format => 'xml'
192 should_route :delete, "/projects/1.xml", :controller => 'projects', :action => 'destroy', :id => '1', :format => 'xml'
193 should_route :delete, "/projects/64/reset_activities", :controller => 'projects', :action => 'reset_activities', :id => '64'
193 should_route :delete, "/projects/64/reset_activities", :controller => 'project_enumerations', :action => 'destroy', :id => '64'
194 end
194 end
195
195
196 context "repositories" do
196 context "repositories" do
General Comments 0
You need to be logged in to leave comments. Login now