Project

General

Profile

Patch #1901 ยป restful_urls_start.diff

Gerrit Kaiser, 2008-09-15 03:23

View differences:

app/views/projects/changelog.rhtml
26 26
<% end %>
27 27

  
28 28
<% content_for :sidebar do %>
29
<% form_tag do %>
29
<% form_tag({},:method => :get) do %>
30 30
<h3><%= l(:label_change_log) %></h3>
31 31
<% @trackers.each do |tracker| %>
32 32
  <label><%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %>
config/routes.rb
10 10
  map.signin 'login', :controller => 'account', :action => 'login'
11 11
  map.signout 'logout', :controller => 'account', :action => 'logout'
12 12
  
13
  map.connect 'wiki/:id/:page/:action', :controller => 'wiki', :page => nil
14 13
  map.connect 'roles/workflow/:id/:role_id/:tracker_id', :controller => 'roles', :action => 'workflow'
15 14
  map.connect 'help/:ctrl/:page', :controller => 'help'
16 15
  #map.connect ':controller/:action/:id/:sort_key/:sort_order'
17 16
  
18
  map.connect 'issues/:issue_id/relations/:action/:id', :controller => 'issue_relations'
17
  map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :get}
18
  map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :post}
19
  map.with_options :controller => 'wiki' do |wiki_routes|
20
    wiki_routes.with_options :conditions => {:method => :get} do |wiki_views|
21
      wiki_views.connect 'projects/:id/wiki/:page', :action => 'special', :page => /page_index|date_index|export/i
22
      wiki_views.connect 'projects/:id/wiki/:page', :action => 'index', :page => nil
23
      wiki_views.connect 'projects/:id/wiki/:page/edit', :action => 'edit'
24
      wiki_views.connect 'projects/:id/wiki/:page/rename', :action => 'rename'
25
      wiki_views.connect 'projects/:id/wiki/:page/history', :action => 'history'
26
      wiki_views.connect 'projects/:id/wiki/:page/diff/:version/vs/:version_from', :action => 'diff'
27
      wiki_views.connect 'projects/:id/wiki/:page/annotate/:version', :action => 'annotate'
28
    end
29
    
30
    wiki_routes.connect 'projects/:id/wiki/:page/:action', 
31
      :action => /edit|rename|destroy|preview|protect/,
32
      :conditions => {:method => :post}
33
  end
34
  
35
  map.with_options :controller => 'messages' do |messages_routes|
36
    messages_routes.connect 'boards/:board_id/topics/new', :action => 'new', :conditions => {:method => :get}
37
    messages_routes.connect 'boards/:board_id/topics/new', :action => 'new', :conditions => {:method => :post}
38
    messages_routes.connect 'boards/:board_id/topics/:id', :action => 'show', :conditions => {:method => :get}
39
    messages_routes.connect 'boards/:board_id/topics/:id', :action => 'reply', :conditions => {:method => :post}
40
    messages_routes.connect 'boards/:board_id/topics/:id/edit', :action => 'edit', :conditions => {:method => :get}
41
    messages_routes.connect 'boards/:board_id/topics/:id/edit', :action => 'edit', :conditions => {:method => :post}
42
    messages_routes.connect 'boards/:board_id/topics/:id/replies', :action => 'reply', :conditions => {:method => :post}
43
    messages_routes.connect 'boards/:board_id/topics/:id/destroy', :action => 'destroy', :conditions => {:method => :post}
44
  end
45
  map.with_options :controller => 'boards' do |board_routes|
46
    board_routes.connect 'projects/:project_id/boards', :action => 'index', :conditions => {:method => :get}
47
    board_routes.connect 'projects/:project_id/boards/new', :action => 'new', :conditions => {:method => :get}
48
    board_routes.connect 'projects/:project_id/boards', :action => 'new', :conditions => {:method => :post}
49
    board_routes.connect 'projects/:project_id/boards/:id', :action => 'show', :conditions => {:method => :get}
50
    board_routes.connect 'projects/:project_id/boards/:id/edit', :action => 'edit', :conditions => {:method => :get}
51
    board_routes.connect 'projects/:project_id/boards/:id/edit', :action => 'edit', :conditions => {:method => :post}
52
    board_routes.connect 'projects/:project_id/boards/:id/destroy', :action => 'destroy', :conditions => {:method => :post}
53
  end
54
  
55
  map.with_options :controller => 'documents' do |document_routes|
56
    document_routes.connect 'projects/:project_id/documents', :action => 'index', :conditions => {:method => :get}
57
    document_routes.connect 'projects/:project_id/documents/new', :action => 'new', :conditions => {:method => :get}
58
    document_routes.connect 'projects/:project_id/documents', :action => 'new', :conditions => {:method => :post}
59
    
60
    document_routes.connect 'documents/:id', :action => 'show', :conditions => {:method => :get}
61
    document_routes.connect 'documents/:id/destroy', :action => 'destroy', :conditions => {:method => :post}
62
    document_routes.connect 'documents/:id/edit', :action => 'edit', :conditions => {:method => :get}
63
    document_routes.connect 'documents/:id/edit', :action => 'edit', :conditions => {:method => :post}
64
  end
65
  
66
  map.with_options :controller => 'issues' do |issues_routes|
67
    issues_routes.with_options :conditions => {:method => :get} do |issues_views|
68
      issues_views.connect 'issues', :action => 'index'
69
      issues_views.connect 'issues.:format', :action => 'index'
70
      issues_views.connect 'projects/:project_id/issues.:format', :action => 'index'
71
      issues_views.connect 'projects/:project_id/issues/new', :action => 'new'
72
      issues_views.connect 'projects/:project_id/issues/:copy_from/copy', :action => 'new'
73
      issues_views.connect 'issues/:id', :action => 'show'
74
      issues_views.connect 'issues/:id.:format', :action => 'show'
75
      issues_views.connect 'issues/:id/edit', :action => 'edit'
76
      issues_views.connect 'issues/:id/quoted', :action => 'reply'
77
      issues_views.connect 'issues/:id/move', :action => 'move'
78
    end
79
    issues_routes.connect 'projects/:project_id/issues', :action => 'new', :conditions => {:method => :post}
80
    issues_routes.connect 'issues/:id/:action',
81
      :action => /edit|move|destroy/,
82
      :conditions => {:method => :post}
83
  end
84
  map.with_options  :controller => 'issue_relations', :conditions => {:method => :post} do |relations|
85
    relations.connect 'issues/:issue_id/relations/:id', :action => 'new'
86
    relations.connect 'issues/:issue_id/relations/:id/destroy', :action => 'destroy'
87
  end
88
  map.with_options :controller => 'reports', :action => 'issue_report', :conditions => {:method => :get} do |reports|
89
    reports.connect 'projects/:id/issues/report'
90
    reports.connect 'projects/:id/issues/report/:detail'
91
  end
92
  
93
  map.with_options :controller => 'news' do |news_routes|
94
    news_routes.with_options :conditions => {:method => :get} do |news_views|
95
      news_views.connect 'news', :action => 'index'
96
      news_views.connect 'projects/:project_id/news', :action => 'index'
97
      news_views.connect 'projects/:project_id/news.:format', :action => 'index'
98
      news_views.connect 'news.:format', :action => 'index'
99
      news_views.connect 'projects/:project_id/news/new', :action => 'new'
100
      news_views.connect 'news/:id', :action => 'show'
101
      news_views.connect 'news/:id/edit', :action => 'edit'
102
    end
103
    news_routes.with_options do |news_actions|
104
      news_actions.connect 'projects/:project_id/news', :action => 'new'
105
      news_actions.connect 'news/:id/edit', :action => 'edit'
106
      news_actions.connect 'news/:id/destroy', :action => 'destroy'
107
    end
108
  end
109
  
110
  map.connect 'projects/:id/members/new', :controller => 'members', :action => 'new'
111
  map.connect 'projects/:id/wiki', :controller => 'wikis', :action => 'edit', :conditions => {:method => :post}
112
  
113
  map.with_options :controller => 'projects' do |projects|
114
    projects.connect 'projects', :action => 'index', :conditions => {:method => :get}
115
    projects.connect 'projects.:format', :action => 'index', :conditions => {:method => :get}
116
    projects.connect 'projects/new', :action => 'add', :conditions => {:method => :get}
117
    projects.connect 'projects', :action => 'add', :conditions => {:method => :post}
118
    projects.connect 'projects/:id', :action => 'show', :conditions => {:method => :get}
119
    
120
    projects.connect 'projects/:id/roadmap', :action => 'roadmap', :conditions => {:method => :get}
121
    projects.connect 'projects/:id/changelog', :action => 'changelog', :conditions => {:method => :get}
122
    
123
    projects.connect 'projects/:id/files', :action => 'list_files', :conditions => {:method => :get}
124
    projects.connect 'projects/:id/files/new', :action => 'add_file', :conditions => {:method => :get}
125
    projects.connect 'projects/:id/files/new', :action => 'add_file', :conditions => {:method => :post}
126
    
127
    projects.connect 'projects/:id/versions/new', :action => 'add_version', :conditions => {:method => :get}
128
    projects.connect 'projects/:id/versions/new', :action => 'add_version', :conditions => {:method => :post}
129

  
130
    projects.connect 'projects/:id/categories/new', :action => 'add_issue_category', :conditions => {:method => :get}
131
    projects.connect 'projects/:id/categories/new', :action => 'add_issue_category', :conditions => {:method => :post}
132
    
133
    projects.connect 'projects/:id/settings', :action => 'settings', :conditions => {:method => :get}
134
    projects.connect 'projects/:id/settings/:tab', :action => 'settings', :conditions => {:method => :get}
135
    
136
    projects.with_options :action => 'activity', :conditions => {:method => :get} do |activity|
137
      activity.connect 'projects/:id/activity'
138
      activity.connect 'projects/:id/activity.:format'
139
      activity.connect 'activity'
140
      activity.connect 'activity.:format'
141
    end
142
  end
143
  
144
  map.with_options :controller => 'repositories' do |repositories|
145
    repositories.connect 'projects/:id/repository', :action => 'show', :conditions => {:method => :get}
146
    repositories.connect 'projects/:id/repository/edit', :action => 'edit', :conditions => {:method => :post}
147
    repositories.connect 'projects/:id/repository/edit', :action => 'edit', :conditions => {:method => :get}
148
    repositories.connect 'projects/:id/repository/statistics', :action => 'stats', :conditions => {:method => :get}
149
    repositories.connect 'projects/:id/repository/revisions', :action => 'revisions', :conditions => {:method => :get}
150
    repositories.connect 'projects/:id/repository/revisions.:format', :action => 'revisions', :conditions => {:method => :get}
151
    repositories.connect 'projects/:id/repository/revisions/:rev', :action => 'revision', :conditions => {:method => :get}
152
    repositories.connect 'projects/:id/repository/revisions/:rev/diff', :action => 'diff', :conditions => {:method => :get}
153
    repositories.connect 'projects/:id/repository/revisions/:rev/diff.:format', :action => 'diff', :conditions => {:method => :get}
154

  
155
    repositories.connect 'projects/:id/repository/:action/*path', :conditions => {:method => :get}
156
  end
157
  
158
  map.connect 'attachments/:id', :controller => 'attachments', :action => 'show', :id => /\d+/
159
  map.connect 'attachments/:id/:filename', :controller => 'attachments', :action => 'show', :id => /\d+/, :filename => /.*/
160
  map.connect 'attachments/download/:id/:filename', :controller => 'attachments', :action => 'download', :id => /\d+/, :filename => /.*/
161
   
162

  
163
  #left old routes at the bottom for backwards compat
19 164
  map.connect 'projects/:project_id/issues/:action', :controller => 'issues'
20
  map.connect 'projects/:project_id/news/:action', :controller => 'news'
21 165
  map.connect 'projects/:project_id/documents/:action', :controller => 'documents'
22 166
  map.connect 'projects/:project_id/boards/:action/:id', :controller => 'boards'
23
  map.connect 'projects/:project_id/timelog/:action/:id', :controller => 'timelog', :project_id => /.+/
24 167
  map.connect 'boards/:board_id/topics/:action/:id', :controller => 'messages'
25

  
168
  map.connect 'wiki/:id/:page/:action', :page => nil, :controller => 'wiki'
169
  map.connect 'issues/:issue_id/relations/:action/:id', :controller => 'issue_relations'
170
  map.connect 'projects/:project_id/news/:action', :controller => 'news'  
171
  map.connect 'projects/:project_id/timelog/:action/:id', :controller => 'timelog', :project_id => /.+/
26 172
  map.with_options :controller => 'repositories' do |omap|
27 173
    omap.repositories_show 'repositories/browse/:id/*path', :action => 'browse'
28 174
    omap.repositories_changes 'repositories/changes/:id/*path', :action => 'changes'
29 175
    omap.repositories_diff 'repositories/diff/:id/*path', :action => 'diff'
30 176
    omap.repositories_entry 'repositories/entry/:id/*path', :action => 'entry'
31 177
    omap.repositories_entry 'repositories/annotate/:id/*path', :action => 'annotate'
32
    omap.repositories_revision 'repositories/revision/:id/:rev', :action => 'revision'
178
    omap.connect 'repositories/revision/:id/:rev', :action => 'revision'
33 179
  end
34
  
35
  map.connect 'attachments/:id', :controller => 'attachments', :action => 'show', :id => /\d+/
36
  map.connect 'attachments/:id/:filename', :controller => 'attachments', :action => 'show', :id => /\d+/, :filename => /.*/
37
  map.connect 'attachments/download/:id/:filename', :controller => 'attachments', :action => 'download', :id => /\d+/, :filename => /.*/
38 180
   
39 181
  # Allow downloading Web Service WSDL as a file with an extension
40 182
  # instead of a file named 'wsdl'
41 183
  map.connect ':controller/service.wsdl', :action => 'wsdl'
42

  
43 184
 
44 185
  # Install the default route as the lowest priority.
45 186
  map.connect ':controller/:action/:id'
test/functional/boards_controller_test.rb
31 31
    User.current = nil
32 32
  end
33 33
  
34
  def test_index_routing
35
    assert_routing(
36
      {:method => :get, :path => '/projects/world_domination/boards'},
37
      :controller => 'boards', :action => 'index', :project_id => 'world_domination'
38
    )
39
  end
40
  
34 41
  def test_index
35 42
    get :index, :project_id => 1
36 43
    assert_response :success
......
39 46
    assert_not_nil assigns(:project)
40 47
  end
41 48
  
49
  def test_new_routing
50
    assert_routing(
51
      {:method => :get, :path => '/projects/world_domination/boards/new'},
52
      :controller => 'boards', :action => 'new', :project_id => 'world_domination'
53
    )
54
    assert_recognizes(
55
      {:controller => 'boards', :action => 'new', :project_id => 'world_domination'},
56
      {:method => :post, :path => '/projects/world_domination/boards'}
57
    )
58
  end
59
  
60
  def test_show_routing
61
    assert_routing(
62
      {:method => :get, :path => '/projects/world_domination/boards/44'},
63
      :controller => 'boards', :action => 'show', :id => '44', :project_id => 'world_domination'
64
    )
65
  end
66
  
42 67
  def test_show
43 68
    get :show, :project_id => 1, :id => 1
44 69
    assert_response :success
......
47 72
    assert_not_nil assigns(:project)
48 73
    assert_not_nil assigns(:topics)
49 74
  end
75
  
76
  def test_edit_routing
77
    assert_routing(
78
      {:method => :get, :path => '/projects/world_domination/boards/44/edit'},
79
      :controller => 'boards', :action => 'edit', :id => '44', :project_id => 'world_domination'
80
    )
81
    assert_recognizes(#TODO: use PUT method to board_path, modify form accordingly
82
      {:controller => 'boards', :action => 'edit', :id => '44', :project_id => 'world_domination'},
83
      {:method => :post, :path => '/projects/world_domination/boards/44/edit'}
84
    )
85
  end
86
  
87
  def test_destroy_routing
88
    assert_routing(#TODO: use DELETE method to board_path, modify form accoringly
89
      {:method => :post, :path => '/projects/world_domination/boards/44/destroy'},
90
      :controller => 'boards', :action => 'destroy', :id => '44', :project_id => 'world_domination'
91
    )
92
  end
50 93
end
test/functional/documents_controller_test.rb
30 30
    @response   = ActionController::TestResponse.new
31 31
    User.current = nil
32 32
  end
33

  
33
  
34
  def test_index_routing
35
    assert_routing(
36
      {:method => :get, :path => '/projects/567/documents'},
37
      :controller => 'documents', :action => 'index', :project_id => '567'
38
    )
39
  end
40
  
34 41
  def test_index
35 42
    get :index, :project_id => 'ecookbook'
36 43
    assert_response :success
......
38 45
    assert_not_nil assigns(:grouped)
39 46
  end
40 47
  
48
  def test_new_routing
49
    assert_routing(
50
      {:method => :get, :path => '/projects/567/documents/new'},
51
      :controller => 'documents', :action => 'new', :project_id => '567'
52
    )
53
    assert_recognizes(
54
      {:controller => 'documents', :action => 'new', :project_id => '567'},
55
      {:method => :post, :path => '/projects/567/documents'}
56
    )
57
  end
58
  
41 59
  def test_new_with_one_attachment
42 60
    @request.session[:user_id] = 2
43 61
    set_tmp_attachments_directory
......
57 75
    assert_equal 'testfile.txt', document.attachments.first.filename
58 76
  end
59 77
  
78
  def test_edit_routing
79
    assert_routing(
80
      {:method => :get, :path => '/documents/22/edit'},
81
      :controller => 'documents', :action => 'edit', :id => '22'
82
    )
83
    assert_recognizes(#TODO: should be using PUT on document URI
84
      {:controller => 'documents', :action => 'edit', :id => '567'},
85
      {:method => :post, :path => '/documents/567/edit'}
86
    )
87
  end
88
  
89
  def test_show_routing
90
    assert_routing(
91
      {:method => :get, :path => '/documents/22'},
92
      :controller => 'documents', :action => 'show', :id => '22'
93
    )
94
  end
95
  
96
  def test_destroy_routing
97
    assert_recognizes(#TODO: should be using DELETE on document URI
98
      {:controller => 'documents', :action => 'destroy', :id => '567'},
99
      {:method => :post, :path => '/documents/567/destroy'}
100
    )
101
  end
102
  
60 103
  def test_destroy
61 104
    @request.session[:user_id] = 2
62 105
    post :destroy, :id => 1
test/functional/issue_relations_controller_test.rb
1
require File.dirname(__FILE__) + '/../test_helper'
2
require 'issue_relations_controller'
3

  
4
# Re-raise errors caught by the controller.
5
class IssueRelationsController; def rescue_action(e) raise e end; end
6

  
7

  
8
class IssueRelationsControllerTest < Test::Unit::TestCase
9
  def test_new_routing
10
    assert_routing(
11
      {:method => :post, :path => '/issues/1/relations'},
12
      {:controller => 'issue_relations', :action => 'new', :issue_id => '1'}
13
    )
14
  end
15
  
16
  def test_destroy_routing
17
    assert_recognizes( #TODO: use DELETE on issue URI
18
      {:controller => 'issue_relations', :action => 'destroy', :issue_id => '1', :id => '23'},
19
      {:method => :post, :path => '/issues/1/relations/23/destroy'}
20
    )
21
  end
22
end
test/functional/issues_controller_test.rb
49 49
    @response   = ActionController::TestResponse.new
50 50
    User.current = nil
51 51
  end
52
  
53
  def test_index_routing
54
    assert_routing(
55
      {:method => :get, :path => '/issues'},
56
      :controller => 'issues', :action => 'index'
57
    )
58
  end
52 59

  
53 60
  def test_index
54 61
    get :index
......
62 69
    assert_no_tag :tag => 'a', :content => /Issue of a private subproject/
63 70
    assert_no_tag :tag => 'a', :content => /Issue on project 2/
64 71
  end
65

  
72
  
73
  def test_index_with_project_routing
74
    assert_routing(
75
      {:method => :get, :path => '/projects/23/issues'},
76
      :controller => 'issues', :action => 'index', :project_id => '23'
77
    )
78
  end
79
  
66 80
  def test_index_with_project
67 81
    Setting.display_subprojects_issues = 0
68 82
    get :index, :project_id => 1
......
96 110
    assert_tag :tag => 'a', :content => /Issue of a private subproject/
97 111
  end
98 112
  
113
  def test_index_with_project_routing_formatted
114
    assert_routing(
115
      {:method => :get, :path => 'projects/23/issues.pdf'},
116
      :controller => 'issues', :action => 'index', :project_id => '23', :format => 'pdf'
117
    )
118
    assert_routing(
119
      {:method => :get, :path => 'projects/23/issues.atom'},
120
      :controller => 'issues', :action => 'index', :project_id => '23', :format => 'atom'
121
    )
122
  end
123
  
99 124
  def test_index_with_project_and_filter
100 125
    get :index, :project_id => 1, :set_filter => 1
101 126
    assert_response :success
......
115 140
    assert_equal 'text/csv', @response.content_type
116 141
  end
117 142
  
143
  def test_index_formatted
144
    assert_routing(
145
      {:method => :get, :path => 'issues.pdf'},
146
      :controller => 'issues', :action => 'index', :format => 'pdf'
147
    )
148
    assert_routing(
149
      {:method => :get, :path => 'issues.atom'},
150
      :controller => 'issues', :action => 'index', :format => 'atom'
151
    )
152
  end
153
  
118 154
  def test_index_pdf
119 155
    get :index, :format => 'pdf'
120 156
    assert_response :success
......
176 212
    assert_equal 'application/atom+xml', @response.content_type
177 213
  end
178 214
  
215
  def test_show_routing
216
    assert_routing(
217
      {:method => :get, :path => '/issues/64'},
218
      :controller => 'issues', :action => 'show', :id => '64'
219
    )
220
  end
221
  
222
  def test_show_routing_formatted
223
    assert_routing(
224
      {:method => :get, :path => '/issues/2332.pdf'},
225
      :controller => 'issues', :action => 'show', :id => '2332', :format => 'pdf'
226
    )
227
    assert_routing(
228
      {:method => :get, :path => '/issues/23123.atom'},
229
      :controller => 'issues', :action => 'show', :id => '23123', :format => 'atom'
230
    )
231
  end
232
  
179 233
  def test_show_by_anonymous
180 234
    get :show, :id => 1
181 235
    assert_response :success
......
206 260
                                :child => { :tag => 'legend', 
207 261
                                            :content => /Notes/ } }
208 262
  end
263
  
264
  def test_new_routing
265
    assert_routing(
266
      {:method => :get, :path => '/projects/1/issues/new'},
267
      :controller => 'issues', :action => 'new', :project_id => '1'
268
    )
269
    assert_recognizes(
270
      {:controller => 'issues', :action => 'new', :project_id => '1'},
271
      {:method => :post, :path => '/projects/1/issues'}
272
    )
273
  end
209 274

  
210 275
  def test_get_new
211 276
    @request.session[:user_id] = 2
......
248 313
                          :priority_id => 5,
249 314
                          :estimated_hours => '',
250 315
                          :custom_field_values => {'2' => 'Value for field 2'}}
251
    assert_redirected_to 'issues/show'
316
    assert_redirected_to :action => 'show'
252 317
    
253 318
    issue = Issue.find_by_subject('This is the test_new issue')
254 319
    assert_not_nil issue
......
267 332
                          :subject => 'This is the test_new issue',
268 333
                          :description => 'This is the description',
269 334
                          :priority_id => 5}
270
    assert_redirected_to 'issues/show'
335
    assert_redirected_to :action => 'show'
271 336
  end
272 337
  
273 338
  def test_post_new_with_required_custom_field_and_without_custom_fields_param
......
314 379
                                        :value => 'Value for field 2'}
315 380
  end
316 381
  
382
  def test_copy_routing
383
    assert_routing(
384
      {:method => :get, :path => '/projects/world_domination/issues/567/copy'},
385
      :controller => 'issues', :action => 'new', :project_id => 'world_domination', :copy_from => '567'
386
    )
387
  end
388
  
317 389
  def test_copy_issue
318 390
    @request.session[:user_id] = 2
319 391
    get :new, :project_id => 1, :copy_from => 1
......
323 395
    assert_equal orig.subject, assigns(:issue).subject
324 396
  end
325 397
  
398
  def test_edit_routing
399
    assert_routing(
400
      {:method => :get, :path => '/issues/1/edit'},
401
      :controller => 'issues', :action => 'edit', :id => '1'
402
    )
403
    assert_recognizes( #TODO: use a PUT on the issue URI isntead, need to adjust form
404
      {:controller => 'issues', :action => 'edit', :id => '1'},
405
      {:method => :post, :path => '/issues/1/edit'}
406
    )
407
  end
408
  
326 409
  def test_get_edit
327 410
    @request.session[:user_id] = 2
328 411
    get :edit, :id => 1
......
354 437
                                    :attributes => { :selected => 'selected' } }
355 438
  end
356 439
  
440
  def test_reply_routing
441
    assert_routing(
442
      {:method => :get, :path => '/issues/1/quoted'},
443
      :controller => 'issues', :action => 'reply', :id => '1'
444
    )
445
  end
446
  
357 447
  def test_reply_to_issue
358 448
    @request.session[:user_id] = 2
359 449
    get :reply, :id => 1
......
385 475
                                        }
386 476
      end
387 477
    end
388
    assert_redirected_to 'issues/show/1'
478
    assert_redirected_to :action => 'show', :id => '1'
389 479
    issue.reload
390 480
    assert_equal new_subject, issue.subject
391 481
    # Make sure custom fields were not cleared
......
411 501
                                        }
412 502
      end
413 503
    end
414
    assert_redirected_to 'issues/show/1'
504
    assert_redirected_to :action => 'show', :id => '1'
415 505
    issue.reload
416 506
    assert_equal 'New custom value', issue.custom_value_for(2).value
417 507
    
......
431 521
           :notes => 'Assigned to dlopper',
432 522
           :time_entry => { :hours => '', :comments => '', :activity_id => Enumeration.get_values('ACTI').first }
433 523
    end
434
    assert_redirected_to 'issues/show/1'
524
    assert_redirected_to :action => 'show', :id => '1'
435 525
    issue.reload
436 526
    assert_equal 2, issue.status_id
437 527
    j = issue.journals.find(:first, :order => 'id DESC')
......
448 538
    post :edit,
449 539
         :id => 1,
450 540
         :notes => notes
451
    assert_redirected_to 'issues/show/1'
541
    assert_redirected_to :action => 'show', :id => '1'
452 542
    j = Issue.find(1).journals.find(:first, :order => 'id DESC')
453 543
    assert_equal notes, j.notes
454 544
    assert_equal 0, j.details.size
......
467 557
           :notes => '2.5 hours added',
468 558
           :time_entry => { :hours => '2.5', :comments => '', :activity_id => Enumeration.get_values('ACTI').first }
469 559
    end
470
    assert_redirected_to 'issues/show/1'
560
    assert_redirected_to :action => 'show', :id => '1'
471 561
    
472 562
    issue = Issue.find(1)
473 563
    
......
489 579
         :id => 1,
490 580
         :notes => '',
491 581
         :attachments => {'1' => {'file' => test_uploaded_file('testfile.txt', 'text/plain')}}
492
    assert_redirected_to 'issues/show/1'
582
    assert_redirected_to :action => 'show', :id => '1'
493 583
    j = Issue.find(1).journals.find(:first, :order => 'id DESC')
494 584
    assert j.notes.blank?
495 585
    assert_equal 1, j.details.size
......
508 598
    post :edit,
509 599
         :id => 1,
510 600
         :notes => ''
511
    assert_redirected_to 'issues/show/1'
601
    assert_redirected_to :action => 'show', :id => '1'
512 602
    
513 603
    issue.reload
514 604
    assert issue.journals.empty?
......
536 626
    assert_nil Issue.find(2).assigned_to
537 627
  end
538 628
  
629
  def test_move_routing
630
    assert_routing(
631
      {:method => :get, :path => '/issues/1/move'},
632
      :controller => 'issues', :action => 'move', :id => '1'
633
    )
634
    assert_recognizes(
635
      {:controller => 'issues', :action => 'move', :id => '1'},
636
      {:method => :post, :path => '/issues/1/move'}
637
    )
638
  end
639
  
539 640
  def test_move_one_issue_to_another_project
540 641
    @request.session[:user_id] = 1
541 642
    post :move, :id => 1, :new_project_id => 2
542
    assert_redirected_to 'projects/ecookbook/issues'
643
    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
543 644
    assert_equal 2, Issue.find(1).project_id
544 645
  end
545 646

  
546 647
  def test_bulk_move_to_another_project
547 648
    @request.session[:user_id] = 1
548 649
    post :move, :ids => [1, 2], :new_project_id => 2
549
    assert_redirected_to 'projects/ecookbook/issues'
650
    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
550 651
    # Issues moved to project 2
551 652
    assert_equal 2, Issue.find(1).project_id
552 653
    assert_equal 2, Issue.find(2).project_id
......
558 659
  def test_bulk_move_to_another_tracker
559 660
    @request.session[:user_id] = 1
560 661
    post :move, :ids => [1, 2], :new_tracker_id => 2
561
    assert_redirected_to 'projects/ecookbook/issues'
662
    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
562 663
    assert_equal 2, Issue.find(1).tracker_id
563 664
    assert_equal 2, Issue.find(2).tracker_id
564 665
  end
......
569 670
    assert_response :success
570 671
    assert_template 'context_menu'
571 672
    assert_tag :tag => 'a', :content => 'Edit',
572
                            :attributes => { :href => '/issues/edit/1',
673
                            :attributes => { :href => '/issues/1/edit',
573 674
                                             :class => 'icon-edit' }
574 675
    assert_tag :tag => 'a', :content => 'Closed',
575
                            :attributes => { :href => '/issues/edit/1?issue%5Bstatus_id%5D=5',
676
                            :attributes => { :href => '/issues/1/edit?issue%5Bstatus_id%5D=5',
576 677
                                             :class => '' }
577 678
    assert_tag :tag => 'a', :content => 'Immediate',
578 679
                            :attributes => { :href => '/issues/bulk_edit?ids%5B%5D=1&amp;priority_id=8',
......
581 682
                            :attributes => { :href => '/issues/bulk_edit?assigned_to_id=3&amp;ids%5B%5D=1',
582 683
                                             :class => '' }
583 684
    assert_tag :tag => 'a', :content => 'Copy',
584
                            :attributes => { :href => '/projects/ecookbook/issues/new?copy_from=1',
685
                            :attributes => { :href => '/projects/ecookbook/issues/1/copy',
585 686
                                             :class => 'icon-copy' }
586 687
    assert_tag :tag => 'a', :content => 'Move',
587 688
                            :attributes => { :href => '/issues/move?ids%5B%5D=1',
......
632 733
                                             :class => 'icon-del disabled' }
633 734
  end
634 735
  
736
  def test_destroy_routing
737
    assert_recognizes( #TODO: use DELETE on issue URI (need to change forms)
738
      {:controller => 'issues', :action => 'destroy', :id => '1'},
739
      {:method => :post, :path => '/issues/1/destroy'}
740
    )
741
  end
742
  
635 743
  def test_destroy_issue_with_no_time_entries
636 744
    assert_nil TimeEntry.find_by_issue_id(2)
637 745
    @request.session[:user_id] = 2
638 746
    post :destroy, :id => 2
639
    assert_redirected_to 'projects/ecookbook/issues'
747
    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
640 748
    assert_nil Issue.find_by_id(2)
641 749
  end
642 750

  
......
652 760
  def test_destroy_issues_and_destroy_time_entries
653 761
    @request.session[:user_id] = 2
654 762
    post :destroy, :ids => [1, 3], :todo => 'destroy'
655
    assert_redirected_to 'projects/ecookbook/issues'
763
    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
656 764
    assert !(Issue.find_by_id(1) || Issue.find_by_id(3))
657 765
    assert_nil TimeEntry.find_by_id([1, 2])
658 766
  end
......
660 768
  def test_destroy_issues_and_assign_time_entries_to_project
661 769
    @request.session[:user_id] = 2
662 770
    post :destroy, :ids => [1, 3], :todo => 'nullify'
663
    assert_redirected_to 'projects/ecookbook/issues'
771
    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
664 772
    assert !(Issue.find_by_id(1) || Issue.find_by_id(3))
665 773
    assert_nil TimeEntry.find(1).issue_id
666 774
    assert_nil TimeEntry.find(2).issue_id
......
669 777
  def test_destroy_issues_and_reassign_time_entries_to_another_issue
670 778
    @request.session[:user_id] = 2
671 779
    post :destroy, :ids => [1, 3], :todo => 'reassign', :reassign_to_id => 2
672
    assert_redirected_to 'projects/ecookbook/issues'
780
    assert_redirected_to :action => 'index', :project_id => 'ecookbook'
673 781
    assert !(Issue.find_by_id(1) || Issue.find_by_id(3))
674 782
    assert_equal 2, TimeEntry.find(1).issue_id
675 783
    assert_equal 2, TimeEntry.find(2).issue_id
......
680 788
    a = issue.attachments.size
681 789
    @request.session[:user_id] = 2
682 790
    post :destroy_attachment, :id => 3, :attachment_id => 1
683
    assert_redirected_to 'issues/show/3'
791
    assert_redirected_to :action => 'show', :id => '3'
684 792
    assert_nil Attachment.find_by_id(1)
685 793
    issue.reload
686 794
    assert_equal((a-1), issue.attachments.size)
test/functional/members_controller_test.rb
1
require File.dirname(__FILE__) + '/../test_helper'
2
require 'members_controller'
3

  
4
# Re-raise errors caught by the controller.
5
class MembersController; def rescue_action(e) raise e end; end
6

  
7

  
8
class MembersControllerTest < Test::Unit::TestCase
9
  def test_members_routing
10
    assert_routing(
11
      {:method => :post, :path => 'projects/5234/members/new'},
12
      :controller => 'members', :action => 'new', :id => '5234'
13
    )
14
  end
15
end
test/functional/messages_controller_test.rb
31 31
    User.current = nil
32 32
  end
33 33
  
34
  def test_show_routing
35
    assert_routing(
36
      {:method => :get, :path => '/boards/22/topics/2'},
37
      :controller => 'messages', :action => 'show', :id => '2', :board_id => '22'
38
    )
39
  end
40
  
34 41
  def test_show
35 42
    get :show, :board_id => 1, :id => 1
36 43
    assert_response :success
......
54 61
    assert_response 404
55 62
  end
56 63
  
64
  def test_new_routing
65
    assert_routing(
66
      {:method => :get, :path => '/boards/lala/topics/new'},
67
      :controller => 'messages', :action => 'new', :board_id => 'lala'
68
    )
69
    assert_recognizes(#TODO: POST to collection, need to adjust form accordingly
70
      {:controller => 'messages', :action => 'new', :board_id => 'lala'},
71
      {:method => :post, :path => '/boards/lala/topics/new'}
72
    )
73
  end
74
  
57 75
  def test_get_new
58 76
    @request.session[:user_id] = 2
59 77
    get :new, :board_id => 1
......
86 104
    assert mail.bcc.include?('dlopper@somenet.foo')
87 105
  end
88 106
  
107
  def test_edit_routing
108
    assert_routing(
109
      {:method => :get, :path => '/boards/lala/topics/22/edit'},
110
      :controller => 'messages', :action => 'edit', :board_id => 'lala', :id => '22'
111
    )
112
    assert_recognizes( #TODO: use PUT to topic_path, modify form accordingly
113
      {:controller => 'messages', :action => 'edit', :board_id => 'lala', :id => '22'},
114
      {:method => :post, :path => '/boards/lala/topics/22/edit'}
115
    )
116
  end
117
  
89 118
  def test_get_edit
90 119
    @request.session[:user_id] = 2
91 120
    get :edit, :board_id => 1, :id => 1
......
104 133
    assert_equal 'New body', message.content
105 134
  end
106 135
  
136
  def test_reply_routing
137
    assert_recognizes(
138
      {:controller => 'messages', :action => 'reply', :board_id => '22', :id => '555'},
139
      {:method => :post, :path => '/boards/22/topics/555/replies'}
140
    )
141
  end
142
  
107 143
  def test_reply
108 144
    @request.session[:user_id] = 2
109 145
    post :reply, :board_id => 1, :id => 1, :reply => { :content => 'This is a test reply', :subject => 'Test reply' }
......
111 147
    assert Message.find_by_subject('Test reply')
112 148
  end
113 149
  
150
  def test_destroy_routing
151
    assert_recognizes(#TODO: use DELETE to topic_path, adjust form accordingly
152
      {:controller => 'messages', :action => 'destroy', :board_id => '22', :id => '555'},
153
      {:method => :post, :path => '/boards/22/topics/555/destroy'}
154
    )
155
  end
156
  
114 157
  def test_destroy_topic
115 158
    @request.session[:user_id] = 2
116 159
    post :destroy, :board_id => 1, :id => 1
test/functional/news_controller_test.rb
31 31
    User.current = nil
32 32
  end
33 33
  
34
  def test_index_routing
35
    assert_routing(
36
      {:method => :get, :path => '/news'},
37
      :controller => 'news', :action => 'index'
38
    )
39
  end
40
  
41
  def test_index_routing_formatted
42
    assert_routing(
43
      {:method => :get, :path => '/news.atom'},
44
      :controller => 'news', :action => 'index', :format => 'atom'
45
    )
46
  end
47
  
34 48
  def test_index
35 49
    get :index
36 50
    assert_response :success
......
38 52
    assert_not_nil assigns(:newss)
39 53
    assert_nil assigns(:project)
40 54
  end
55
  
56
  def test_index_with_project_routing
57
    assert_routing(
58
      {:method => :get, :path => '/projects/567/news'},
59
      :controller => 'news', :action => 'index', :project_id => '567'
60
    )
61
  end
62
  
63
  def test_index_with_project_routing_formatted
64
    assert_routing(
65
      {:method => :get, :path => '/projects/567/news.atom'},
66
      :controller => 'news', :action => 'index', :project_id => '567', :format => 'atom'
67
    )
68
  end
41 69

  
42 70
  def test_index_with_project
43 71
    get :index, :project_id => 1
......
46 74
    assert_not_nil assigns(:newss)
47 75
  end
48 76
  
77
  def test_show_routing
78
    assert_routing(
79
      {:method => :get, :path => '/news/2'},
80
      :controller => 'news', :action => 'show', :id => '2'
81
    )
82
  end
83
  
49 84
  def test_show
50 85
    get :show, :id => 1
51 86
    assert_response :success
......
58 93
    assert_response 404
59 94
  end
60 95
  
96
  def test_new_routing
97
    assert_routing(
98
      {:method => :get, :path => '/projects/567/news/new'},
99
      :controller => 'news', :action => 'new', :project_id => '567'
100
    )
101
    assert_recognizes(
102
      {:controller => 'news', :action => 'new', :project_id => '567'},
103
      {:method => :post, :path => '/projects/567/news'}
104
    )
105
  end
106
  
61 107
  def test_get_new
62 108
    @request.session[:user_id] = 2
63 109
    get :new, :project_id => 1
......
79 125
    assert_equal Project.find(1), news.project
80 126
  end
81 127
  
128
  def test_edit_routing
129
    assert_routing(
130
      {:method => :get, :path => '/news/234'},
131
      :controller => 'news', :action => 'show', :id => '234'
132
    )
133
    assert_recognizes(#TODO: PUT to news URI instead, need to modify form
134
      {:controller => 'news', :action => 'edit', :id => '567'},
135
      {:method => :post, :path => '/news/567/edit'}
136
    )
137
  end
138
  
82 139
  def test_get_edit
83 140
    @request.session[:user_id] = 2
84 141
    get :edit, :id => 1
......
127 184
    assert_equal comments_count - 1, News.find(1).comments.size
128 185
  end
129 186
  
187
  def test_destroy_routing
188
    assert_recognizes(#TODO: should use DELETE to news URI, need to change form
189
      {:controller => 'news', :action => 'destroy', :id => '567'},
190
      {:method => :post, :path => '/news/567/destroy'}
191
    )
192
  end
193
  
130 194
  def test_destroy
131 195
    @request.session[:user_id] = 2
132 196
    post :destroy, :id => 1
test/functional/projects_controller_test.rb
31 31
    @response   = ActionController::TestResponse.new
32 32
    @request.session[:user_id] = nil
33 33
  end
34

  
34
  
35
  def test_index_routing
36
    assert_routing(
37
      {:method => :get, :path => '/projects'},
38
      :controller => 'projects', :action => 'index'
39
    )
40
  end
41
  
35 42
  def test_index
36 43
    get :index
37 44
    assert_response :success
......
41 48
    assert assigns(:project_tree).keys.include?(Project.find(1))
42 49
    # Subproject in corresponding value
43 50
    assert assigns(:project_tree)[Project.find(1)].include?(Project.find(3))
44
  end
51
  end
52
  
53
  def test_index_atom_routing
54
    assert_routing(
55
      {:method => :get, :path => '/projects.atom'},
56
      :controller => 'projects', :action => 'index', :format => 'atom'
57
    )
58
  end
45 59
  
46 60
  def test_index_atom
47 61
    get :index, :format => 'atom'
......
50 64
    assert_select 'feed>title', :text => 'Redmine: Latest projects'
51 65
    assert_select 'feed>entry', :count => Project.count(:conditions => Project.visible_by(User.current))
52 66
  end
53
  
54
  def test_show_by_id
55
    get :show, :id => 1
67
  
68
  def test_add_routing
69
    assert_routing(
70
      {:method => :get, :path => '/projects/new'},
71
      :controller => 'projects', :action => 'add'
72
    )
73
    assert_recognizes(
74
      {:controller => 'projects', :action => 'add'},
75
      {:method => :post, :path => '/projects'}
76
    )
77
  end
78
  
79
  def test_show_routing
80
    assert_routing(
81
      {:method => :get, :path => '/projects/test'},
82
      :controller => 'projects', :action => 'show', :id => 'test'
83
    )
84
  end
85
  
86
  def test_show_by_id
87
    get :show, :id => 1
56 88
    assert_response :success
57
    assert_template 'show'
58
    assert_not_nil assigns(:project)
89
    assert_template 'show'
90
    assert_not_nil assigns(:project)
59 91
  end
60 92

  
61 93
  def test_show_by_identifier
......
81 113
    assert_tag :tag => 'a', :content => /Private child/
82 114
  end
83 115
  
116
  def test_settings_routing
117
    assert_routing(
118
      {:method => :get, :path => '/projects/4223/settings'},
119
      :controller => 'projects', :action => 'settings', :id => '4223'
120
    )
121
    assert_routing(
122
      {:method => :get, :path => '/projects/4223/settings/members'},
123
      :controller => 'projects', :action => 'settings', :id => '4223', :tab => 'members'
124
    )
125
  end
126
  
84 127
  def test_settings
85 128
    @request.session[:user_id] = 2 # manager
86 129
    get :settings, :id => 1
......
97 140
    assert_equal 'Test changed name', project.name
98 141
  end
99 142
  
143
  def test_add_version_routing
144
    assert_routing(
145
      {:method => :get, :path => 'projects/64/versions/new'},
146
      :controller => 'projects', :action => 'add_version', :id => '64'
147
    )
148
    assert_routing(
149
    #TODO: use PUT
150
      {:method => :post, :path => 'projects/64/versions/new'},
151
      :controller => 'projects', :action => 'add_version', :id => '64'
152
    )
153
  end
154
  
155
  def test_add_issue_category_routing
156
    assert_routing(
157
      {:method => :get, :path => 'projects/test/categories/new'},
158
      :controller => 'projects', :action => 'add_issue_category', :id => 'test'
159
    )
160
    assert_routing(
161
    #TODO: use PUT
162
      {:method => :post, :path => 'projects/64/categories/new'},
163
      :controller => 'projects', :action => 'add_issue_category', :id => '64'
164
    )
165
  end
166
  
100 167
  def test_get_destroy
101 168
    @request.session[:user_id] = 1 # admin
102 169
    get :destroy, :id => 1
103 170
    assert_response :success
104 171
    assert_template 'destroy'
105 172
    assert_not_nil Project.find_by_id(1)
106
  end
173
  end
107 174

  
108 175
  def test_post_destroy
109 176
    @request.session[:user_id] = 1 # admin
......
111 178
    assert_redirected_to 'admin/projects'
112 179
    assert_nil Project.find_by_id(1)
113 180
  end
114
  
115
  def test_list_files
116
    get :list_files, :id => 1
117
    assert_response :success
118
    assert_template 'list_files'
119
    assert_not_nil assigns(:versions)
120
  end
121

  
122
  def test_changelog
123
    get :changelog, :id => 1
124
    assert_response :success
125
    assert_template 'changelog'
126
    assert_not_nil assigns(:versions)
181
  
182
  def test_list_files_routing
183
    assert_routing(
184
      {:method => :get, :path => '/projects/33/files'},
185
      :controller => 'projects', :action => 'list_files', :id => '33'
186
    )
187
  end
188
  
189
  def test_add_file_routing
190
    assert_routing(
191
      {:method => :get, :path => '/projects/33/files/new'},
192
      :controller => 'projects', :action => 'add_file', :id => '33'
193
    )
194
    assert_routing(
195
      {:method => :post, :path => '/projects/33/files/new'},
196
      :controller => 'projects', :action => 'add_file', :id => '33'
197
    )
198
  end
199
  
200
  def test_list_files
201
    get :list_files, :id => 1
202
    assert_response :success
203
    assert_template 'list_files'
204
    assert_not_nil assigns(:versions)
205
  end
206
  
207
  def test_changelog_routing
208
    assert_routing(
209
      {:method => :get, :path => '/projects/44/changelog'},
210
      :controller => 'projects', :action => 'changelog', :id => '44'
211
    )
212
  end
213
  
214
  def test_changelog
215
    get :changelog, :id => 1
216
    assert_response :success
217
    assert_template 'changelog'
218
    assert_not_nil assigns(:versions)
219
  end
220
  
221
  def test_roadmap_routing
222
    assert_routing(
223
      {:method => :get, :path => 'projects/33/roadmap'},
224
      :controller => 'projects', :action => 'roadmap', :id => '33'
225
    )
127 226
  end
128 227
  
129 228
  def test_roadmap
......
147 246
    # Completed version appears
148 247
    assert assigns(:versions).include?(Version.find(1))
149 248
  end
150

  
249
  
250
  def test_project_activity_routing
251
    assert_routing(
252
      {:method => :get, :path => '/projects/1/activity'},
253
       :controller => 'projects', :action => 'activity', :id => '1'
254
    )
255
  end
256
  
257
  def test_project_activity_atom_routing
258
    assert_routing(
259
      {:method => :get, :path => '/projects/1/activity.atom'},
260
       :controller => 'projects', :action => 'activity', :id => '1', :format => 'atom'
261
    )    
262
  end
263
  
151 264
  def test_project_activity
152 265
    get :activity, :id => 1, :with_subprojects => 0
153 266
    assert_response :success
......
184 297
               }
185 298
  end
186 299
  
300
  def test_global_activity_routing
301
    assert_routing({:method => :get, :path => '/activity'}, :controller => 'projects', :action => 'activity')
302
  end
303
  
187 304
  def test_global_activity
188 305
    get :activity
189 306
    assert_response :success
......
202 319
               }
203 320
  end
204 321
  
322
  def test_global_activity_atom_routing
323
    assert_routing({:method => :get, :path => '/activity.atom'}, :controller => 'projects', :action => 'activity', :format => 'atom')
324
  end
325
  
205 326
  def test_activity_atom_feed
206 327
    get :activity, :format => 'atom'
207 328
    assert_response :success
test/functional/reports_controller_test.rb
1
require File.dirname(__FILE__) + '/../test_helper'
2
require 'reports_controller'
3

  
4
# Re-raise errors caught by the controller.
5
class ReportsController; def rescue_action(e) raise e end; end
6

  
7

  
8
class ReportsControllerTest < Test::Unit::TestCase
9
  def test_issue_report_routing
10
    assert_routing(
11
      {:method => :get, :path => '/projects/567/issues/report'},
12
      :controller => 'reports', :action => 'issue_report', :id => '567'
13
    )
14
    assert_routing(
15
      {:method => :get, :path => '/projects/567/issues/report/assigned_to'},
16
      :controller => 'reports', :action => 'issue_report', :id => '567', :detail => 'assigned_to'
17
    )
18
    
19
  end
20
end
test/functional/repositories_controller_test.rb
31 31
    User.current = nil
32 32
  end
33 33
  
34
  def test_show_routing
35
    assert_routing(
36
      {:method => :get, :path => '/projects/redmine/repository'},
37
      :controller => 'repositories', :action => 'show', :id => 'redmine'
38
    )
39
  end
40
  
41
  def test_edit_routing
42
    assert_routing(
43
      {:method => :get, :path => '/projects/world_domination/repository/edit'},
44
      :controller => 'repositories', :action => 'edit', :id => 'world_domination'
45
    )
46
    assert_routing(
47
      {:method => :post, :path => '/projects/world_domination/repository/edit'},
48
      :controller => 'repositories', :action => 'edit', :id => 'world_domination'
49
    )
50
  end
51
  
52
  def test_revisions_routing
53
    assert_routing(
54
      {:method => :get, :path => '/projects/redmine/repository/revisions'},
55
      :controller => 'repositories', :action => 'revisions', :id => 'redmine'
56
    )
57
  end
58
  
59
  def test_revisions_atom_routing
60
    assert_routing(
61
      {:method => :get, :path => '/projects/redmine/repository/revisions.atom'},
62
      :controller => 'repositories', :action => 'revisions', :id => 'redmine', :format => 'atom'
63
    )
64
  end
65
  
34 66
  def test_revisions
35 67
    get :revisions, :id => 1
36 68
    assert_response :success
37 69
    assert_template 'revisions'
38 70
    assert_not_nil assigns(:changesets)
39 71
  end
72

  
73
  def test_revision_routing
74
    assert_routing(
75
      {:method => :get, :path => '/projects/restmine/repository/revisions/2457'},
76
      :controller => 'repositories', :action => 'revision', :id => 'restmine', :rev => '2457'
77
    )
78
  end
40 79
  
41 80
  def test_revision_with_before_nil_and_afer_normal
42 81
    get :revision, {:id => 1, :rev => 1}
43 82
    assert_response :success
44 83
    assert_template 'revision'
45 84
    assert_no_tag :tag => "div", :attributes => { :class => "contextual" },
46
      :child => { :tag => "a", :attributes => { :href => '/repositories/revision/ecookbook/0'}
85
      :child => { :tag => "a", :attributes => { :href => '/projects/ecookbook/repository/revisions/0'}
47 86
    }
48 87
    assert_tag :tag => "div", :attributes => { :class => "contextual" },
49
        :child => { :tag => "a", :attributes => { :href => '/repositories/revision/ecookbook/2'}
88
        :child => { :tag => "a", :attributes => { :href => '/projects/ecookbook/repository/revisions/2'}
50 89
    }
51 90
  end
52

  
91
  
92
  def test_diff_routing
93
    assert_routing(
94
      {:method => :get, :path => '/projects/restmine/repository/revisions/2457/diff'},
95
      :controller => 'repositories', :action => 'diff', :id => 'restmine', :rev => '2457'
96
    )
97
  end
98
  
99
  def test_unified_diff_routing
100
    assert_routing(
101
      {:method => :get, :path => '/projects/restmine/repository/revisions/2457/diff.diff'},
102
      :controller => 'repositories', :action => 'diff', :id => 'restmine', :rev => '2457', :format => 'diff'
103
    )
104
  end
105
  
106
  def test_diff_path_routing
107
    assert_routing(
108
      {:method => :get, :path => '/projects/restmine/repository/diff/path/to/file.c'},
109
      :controller => 'repositories', :action => 'diff', :id => 'restmine', :path => %w[path to file.c]
110
    )
111
  end
112
  
113
  def test_browse_routing
114
    assert_routing(
115
      {:method => :get, :path => '/projects/restmine/repository/browse/path/to/dir'},
116
      :controller => 'repositories', :action => 'browse', :id => 'restmine', :path => %w[path to dir]
117
    )
118
  end
119
  
120
  def test_entry_routing
121
    assert_routing(
122
      {:method => :get, :path => '/projects/restmine/repository/entry/path/to/file.c'},
123
      :controller => 'repositories', :action => 'entry', :id => 'restmine', :path => %w[path to file.c]
124
    )
125
  end
126
  
127
  def test_annotate_routing
128
    assert_routing(
129
      {:method => :get, :path => '/projects/restmine/repository/annotate/path/to/file.c'},
130
      :controller => 'repositories', :action => 'annotate', :id => 'restmine', :path => %w[path to file.c]
131
    )
132
  end
133
  
134
  def test_changesrouting
135
    assert_routing(
136
      {:method => :get, :path => '/projects/restmine/repository/changes/path/to/file.c'},
137
      :controller => 'repositories', :action => 'changes', :id => 'restmine', :path => %w[path to file.c]
138
    )
139
  end
140
  
141
  def test_statistics_routing
142
    assert_routing(
143
      {:method => :get, :path => '/projects/restmine/repository/statistics'},
144
      :controller => 'repositories', :action => 'stats', :id => 'restmine'
145
    )
146
  end
147
  
53 148
  def test_graph_commits_per_month
54 149
    get :graph, :id => 1, :graph => 'commits_per_month'
55 150
    assert_response :success
test/functional/wiki_controller_test.rb
31 31
    User.current = nil
32 32
  end
33 33
  
34
  def test_index_routing
35
    assert_routing(
36
      {:method => :get, :path => '/projects/567/wiki'},
37
      :controller => 'wiki', :action => 'index', :id => '567'
38
    )
39
    assert_routing(
40
      {:method => :get, :path => '/projects/567/wiki/lalala'},
41
      :controller => 'wiki', :action => 'index', :id => '567', :page => 'lalala'
42
    )
43
    assert_generates(
44
      '/projects/567/wiki',
45
      :controller => 'wiki', :action => 'index', :id => '567', :page => nil
46
    )
47
  end
48
  
34 49
  def test_show_start_page
35 50
    get :index, :id => 'ecookbook'
36 51
    assert_response :success
......
40 55
    # child_pages macro
41 56
    assert_tag :ul, :attributes => { :class => 'pages-hierarchy' },
42 57
               :child => { :tag => 'li',
43
                           :child => { :tag => 'a', :attributes => { :href => '/wiki/ecookbook/Page_with_an_inline_image' },
58
                           :child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/Page_with_an_inline_image' },
44 59
                                                    :content => 'Page with an inline image' } }
45 60
  end
46 61
  
......
67 82
    assert_template 'edit'
68 83
  end
69 84
  
85
  def test_edit_routing
86
    assert_routing(
87
      {:method => :get, :path => '/projects/567/wiki/my_page/edit'},
88
      :controller => 'wiki', :action => 'edit', :id => '567', :page => 'my_page'
89
    )
90
    assert_recognizes(#TODO: use PUT to page path, adjust forms accordingly
91
      {:controller => 'wiki', :action => 'edit', :id => '567', :page => 'my_page'},
92
      {:method => :post, :path => '/projects/567/wiki/my_page/edit'}
93
    )
94
  end
95
  
70 96
  def test_create_page
71 97
    @request.session[:user_id] = 2
72 98
    post :edit, :id => 1,
......
74 100
                :content => {:comments => 'Created the page',
75 101
                             :text => "h1. New page\n\nThis is a new page",
76 102
                             :version => 0}
77
    assert_redirected_to 'wiki/ecookbook/New_page'
103
    assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'New_page'
78 104
    page = Project.find(1).wiki.find_page('New page')
79 105
    assert !page.new_record?
80 106
    assert_not_nil page.content
81 107
    assert_equal 'Created the page', page.content.comments
82 108
  end
83 109
  
110
  def test_preview_routing
111
    assert_routing(
112
      {:method => :post, :path => '/projects/567/wiki/CookBook_documentation/preview'},
113
      :controller => 'wiki', :action => 'preview', :id => '567', :page => 'CookBook_documentation'
114
    )
115
  end
116
  
84 117
  def test_preview
85 118
    @request.session[:user_id] = 2
86 119
    xhr :post, :preview, :id => 1, :page => 'CookBook_documentation',
......
103 136
    assert_tag :tag => 'h1', :content => /New page/
104 137
  end
105 138
  
139
  def test_history_routing
140
    assert_routing(
141
      {:method => :get, :path => '/projects/1/wiki/CookBook_documentation/history'},
142
      :controller => 'wiki', :action => 'history', :id => '1', :page => 'CookBook_documentation'
143
    )
144
  end
145
  
106 146
  def test_history
107 147
    get :history, :id => 1, :page => 'CookBook_documentation'
108 148
    assert_response :success
......
120 160
    assert_equal 1, assigns(:versions).size
121 161
    assert_select "input[type=submit][name=commit]", false
122 162
  end
163
  
164
  def test_diff_routing
165
    assert_routing(
166
      {:method => :get, :path => '/projects/1/wiki/CookBook_documentation/diff/2/vs/1'},
167
      :controller => 'wiki', :action => 'diff', :id => '1', :page => 'CookBook_documentation', :version => '2', :version_from => '1'
168
    )
169
  end
123 170

  
124 171
  def test_diff
125 172
    get :diff, :id => 1, :page => 'CookBook_documentation', :version => 2, :version_from => 1
......
129 176
                               :content => /updated/
130 177
  end
131 178
  
179
  def test_annotate_routing
180
    assert_routing(
181
      {:method => :get, :path => '/projects/1/wiki/CookBook_documentation/annotate/2'},
182
      :controller => 'wiki', :action => 'annotate', :id => '1', :page => 'CookBook_documentation', :version => '2'
183
    )
184
  end
185
  
132 186
  def test_annotate
133 187
    get :annotate, :id => 1, :page =>  'CookBook_documentation', :version => 2
134 188
    assert_response :success
......
143 197
                             :child => { :tag => 'td', :content => /Some updated \[\[documentation\]\] here/ }
144 198
  end
145 199
  
200
  def test_rename_routing
201
    assert_routing(
202
      {:method => :get, :path => '/projects/22/wiki/ladida/rename'},
203
      :controller => 'wiki', :action => 'rename', :id => '22', :page => 'ladida'
204
    )
205
    assert_recognizes(
206
      #TODO: should be moved into a update action and use a PUT to the page URI
207
      {:controller => 'wiki', :action => 'rename', :id => '22', :page => 'ladida'},
208
      {:method => :post, :path => '/projects/22/wiki/ladida/rename'}
209
    )
210
  end
211
  
146 212
  def test_rename_with_redirect
147 213
    @request.session[:user_id] = 2
148 214
    post :rename, :id => 1, :page => 'Another_page',
149 215
                            :wiki_page => { :title => 'Another renamed page',
150 216
                                            :redirect_existing_links => 1 }
151
    assert_redirected_to 'wiki/ecookbook/Another_renamed_page'
217
    assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'Another_renamed_page'
152 218
    wiki = Project.find(1).wiki
153 219
    # Check redirects
154 220
    assert_not_nil wiki.find_page('Another page')
......
160 226
    post :rename, :id => 1, :page => 'Another_page',
161 227
                            :wiki_page => { :title => 'Another renamed page',
162 228
                                            :redirect_existing_links => "0" }
163
    assert_redirected_to 'wiki/ecookbook/Another_renamed_page'
229
    assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'Another_renamed_page'
164 230
    wiki = Project.find(1).wiki
165 231
    # Check that there's no redirects
166 232
    assert_nil wiki.find_page('Another page')
167 233
  end
168 234
  
235
  def test_destroy_routing
236
    assert_recognizes(
237
      #TODO: should use DELETE on page URI
238
      {:controller => 'wiki', :action => 'destroy', :id => '22', :page => 'ladida'},
239
      {:method => :post, :path => 'projects/22/wiki/ladida/destroy'}
240
    )
241
  end
242
  
169 243
  def test_destroy
170 244
    @request.session[:user_id] = 2
171 245
    post :destroy, :id => 1, :page => 'CookBook_documentation'
172
    assert_redirected_to 'wiki/ecookbook/Page_index/special'
246
    assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index'
... This diff was truncated because it exceeds the maximum size that can be displayed.
    (1-1/1)