You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

trackers_controller_test.rb 7.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. # Redmine - project management software
  2. # Copyright (C) 2006-2017 Jean-Philippe Lang
  3. #
  4. # This program is free software; you can redistribute it and/or
  5. # modify it under the terms of the GNU General Public License
  6. # as published by the Free Software Foundation; either version 2
  7. # of the License, or (at your option) any later version.
  8. #
  9. # This program is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. # GNU General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU General Public License
  15. # along with this program; if not, write to the Free Software
  16. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  17. require File.expand_path('../../test_helper', __FILE__)
  18. class TrackersControllerTest < Redmine::ControllerTest
  19. fixtures :trackers, :projects, :projects_trackers, :users, :issues, :custom_fields, :issue_statuses
  20. def setup
  21. User.current = nil
  22. @request.session[:user_id] = 1 # admin
  23. end
  24. def test_index
  25. get :index
  26. assert_response :success
  27. assert_select 'table.trackers'
  28. end
  29. def test_index_by_anonymous_should_redirect_to_login_form
  30. @request.session[:user_id] = nil
  31. get :index
  32. assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Ftrackers'
  33. end
  34. def test_index_by_user_should_respond_with_406
  35. @request.session[:user_id] = 2
  36. get :index
  37. assert_response 406
  38. end
  39. def test_new
  40. get :new
  41. assert_response :success
  42. assert_select 'input[name=?]', 'tracker[name]'
  43. end
  44. def test_create
  45. assert_difference 'Tracker.count' do
  46. post :create, :params => {
  47. :tracker => {
  48. :name => 'New tracker',
  49. :default_status_id => 1,
  50. :project_ids => ['1', '', ''],
  51. :custom_field_ids => ['1', '6', '']
  52. }
  53. }
  54. end
  55. assert_redirected_to :action => 'index'
  56. tracker = Tracker.order('id DESC').first
  57. assert_equal 'New tracker', tracker.name
  58. assert_equal [1], tracker.project_ids.sort
  59. assert_equal Tracker::CORE_FIELDS, tracker.core_fields
  60. assert_equal [1, 6], tracker.custom_field_ids.sort
  61. assert_equal 0, tracker.workflow_rules.count
  62. end
  63. def test_create_with_disabled_core_fields
  64. assert_difference 'Tracker.count' do
  65. post :create, :params => {
  66. :tracker => {
  67. :name => 'New tracker',
  68. :default_status_id => 1,
  69. :core_fields => ['assigned_to_id', 'fixed_version_id', '']
  70. }
  71. }
  72. end
  73. assert_redirected_to :action => 'index'
  74. tracker = Tracker.order('id DESC').first
  75. assert_equal 'New tracker', tracker.name
  76. assert_equal %w(assigned_to_id fixed_version_id), tracker.core_fields
  77. end
  78. def test_create_new_with_workflow_copy
  79. assert_difference 'Tracker.count' do
  80. post :create, :params => {
  81. :tracker => {
  82. :name => 'New tracker',
  83. :default_status_id => 1
  84. },
  85. :copy_workflow_from => 1
  86. }
  87. end
  88. assert_redirected_to :action => 'index'
  89. tracker = Tracker.find_by_name('New tracker')
  90. assert_equal 0, tracker.projects.count
  91. assert_equal Tracker.find(1).workflow_rules.count, tracker.workflow_rules.count
  92. end
  93. def test_create_with_failure
  94. assert_no_difference 'Tracker.count' do
  95. post :create, :params => {
  96. :tracker => {
  97. :name => '',
  98. :project_ids => ['1', '', ''],
  99. :custom_field_ids => ['1', '6', '']
  100. }
  101. }
  102. end
  103. assert_response :success
  104. assert_select_error /name cannot be blank/i
  105. end
  106. def test_edit
  107. Tracker.find(1).project_ids = [1, 3]
  108. get :edit, :params => {:id => 1}
  109. assert_response :success
  110. assert_select 'input[name=?][value="1"][checked=checked]', 'tracker[project_ids][]'
  111. assert_select 'input[name=?][value="2"]:not([checked])', 'tracker[project_ids][]'
  112. assert_select 'input[name=?][value=""][type=hidden]', 'tracker[project_ids][]'
  113. end
  114. def test_edit_should_check_core_fields
  115. tracker = Tracker.find(1)
  116. tracker.core_fields = %w(assigned_to_id fixed_version_id)
  117. tracker.save!
  118. get :edit, :params => {:id => 1}
  119. assert_response :success
  120. assert_select 'input[name=?][value=assigned_to_id][checked=checked]', 'tracker[core_fields][]'
  121. assert_select 'input[name=?][value=fixed_version_id][checked=checked]', 'tracker[core_fields][]'
  122. assert_select 'input[name=?][value=category_id]', 'tracker[core_fields][]'
  123. assert_select 'input[name=?][value=category_id][checked=checked]', 'tracker[core_fields][]', 0
  124. assert_select 'input[name=?][value=""][type=hidden]', 'tracker[core_fields][]'
  125. end
  126. def test_update
  127. put :update, :params => {
  128. :id => 1,
  129. :tracker => {
  130. :name => 'Renamed',
  131. :project_ids => ['1', '2', '']
  132. }
  133. }
  134. assert_redirected_to :action => 'index'
  135. assert_equal [1, 2], Tracker.find(1).project_ids.sort
  136. end
  137. def test_update_without_projects
  138. put :update, :params => {
  139. :id => 1,
  140. :tracker => {
  141. :name => 'Renamed',
  142. :project_ids => ['']
  143. }
  144. }
  145. assert_redirected_to :action => 'index'
  146. assert Tracker.find(1).project_ids.empty?
  147. end
  148. def test_update_without_core_fields
  149. put :update, :params => {
  150. :id => 1,
  151. :tracker => {
  152. :name => 'Renamed',
  153. :core_fields => ['']
  154. }
  155. }
  156. assert_redirected_to :action => 'index'
  157. assert Tracker.find(1).core_fields.empty?
  158. end
  159. def test_update_with_failure
  160. put :update, :params => {:id => 1, :tracker => { :name => '' }}
  161. assert_response :success
  162. assert_select_error /name cannot be blank/i
  163. end
  164. def test_move_lower
  165. tracker = Tracker.find_by_position(1)
  166. put :update, :params => {:id => 1, :tracker => { :position => '2' }}
  167. assert_equal 2, tracker.reload.position
  168. end
  169. def test_destroy
  170. tracker = Tracker.generate!(:name => 'Destroyable')
  171. assert_difference 'Tracker.count', -1 do
  172. delete :destroy, :params => {:id => tracker.id}
  173. end
  174. assert_redirected_to :action => 'index'
  175. assert_nil flash[:error]
  176. end
  177. def test_destroy_tracker_in_use
  178. assert_no_difference 'Tracker.count' do
  179. delete :destroy, :params => {:id => 1}
  180. end
  181. assert_redirected_to :action => 'index'
  182. assert_not_nil flash[:error]
  183. end
  184. def test_get_fields
  185. get :fields
  186. assert_response :success
  187. assert_select 'form' do
  188. assert_select 'input[type=checkbox][name=?][value=assigned_to_id]', 'trackers[1][core_fields][]'
  189. assert_select 'input[type=checkbox][name=?][value="2"]', 'trackers[1][custom_field_ids][]'
  190. assert_select 'input[type=hidden][name=?][value=""]', 'trackers[1][core_fields][]'
  191. assert_select 'input[type=hidden][name=?][value=""]', 'trackers[1][custom_field_ids][]'
  192. end
  193. end
  194. def test_post_fields
  195. post :fields, :params => {
  196. :trackers => {
  197. '1' => {'core_fields' => ['assigned_to_id', 'due_date', ''], 'custom_field_ids' => ['1', '2']},
  198. '2' => {'core_fields' => [''], 'custom_field_ids' => ['']}
  199. }
  200. }
  201. assert_redirected_to '/trackers/fields'
  202. tracker = Tracker.find(1)
  203. assert_equal %w(assigned_to_id due_date), tracker.core_fields
  204. assert_equal [1, 2], tracker.custom_field_ids.sort
  205. tracker = Tracker.find(2)
  206. assert_equal [], tracker.core_fields
  207. assert_equal [], tracker.custom_field_ids.sort
  208. end
  209. end