##// END OF EJS Templates
add changeset comment in revision page title (#14138)...
Toshi MARUYAMA -
r11679:a4394e877e72
parent child
Show More
@@ -1,97 +1,101
1 <div class="contextual">
1 <div class="contextual">
2 &#171;
2 &#171;
3 <% unless @changeset.previous.nil? -%>
3 <% unless @changeset.previous.nil? -%>
4 <%= link_to_revision(@changeset.previous, @repository, :text => l(:label_previous)) %>
4 <%= link_to_revision(@changeset.previous, @repository, :text => l(:label_previous)) %>
5 <% else -%>
5 <% else -%>
6 <%= l(:label_previous) %>
6 <%= l(:label_previous) %>
7 <% end -%>
7 <% end -%>
8 |
8 |
9 <% unless @changeset.next.nil? -%>
9 <% unless @changeset.next.nil? -%>
10 <%= link_to_revision(@changeset.next, @repository, :text => l(:label_next)) %>
10 <%= link_to_revision(@changeset.next, @repository, :text => l(:label_next)) %>
11 <% else -%>
11 <% else -%>
12 <%= l(:label_next) %>
12 <%= l(:label_next) %>
13 <% end -%>
13 <% end -%>
14 &#187;&nbsp;
14 &#187;&nbsp;
15
15
16 <%= form_tag({:controller => 'repositories',
16 <%= form_tag({:controller => 'repositories',
17 :action => 'revision',
17 :action => 'revision',
18 :id => @project,
18 :id => @project,
19 :repository_id => @repository.identifier_param,
19 :repository_id => @repository.identifier_param,
20 :rev => nil},
20 :rev => nil},
21 :method => :get) do %>
21 :method => :get) do %>
22 <%= text_field_tag 'rev', @rev, :size => 8 %>
22 <%= text_field_tag 'rev', @rev, :size => 8 %>
23 <%= submit_tag 'OK', :name => nil %>
23 <%= submit_tag 'OK', :name => nil %>
24 <% end %>
24 <% end %>
25 </div>
25 </div>
26
26
27 <h2><%= avatar(@changeset.user, :size => "24") %><%= l(:label_revision) %> <%= format_revision(@changeset) %></h2>
27 <h2><%= avatar(@changeset.user, :size => "24") %><%= l(:label_revision) %> <%= format_revision(@changeset) %></h2>
28
28
29 <% if @changeset.scmid.present? || @changeset.parents.present? || @changeset.children.present? %>
29 <% if @changeset.scmid.present? || @changeset.parents.present? || @changeset.children.present? %>
30 <table class="revision-info">
30 <table class="revision-info">
31 <% if @changeset.scmid.present? %>
31 <% if @changeset.scmid.present? %>
32 <tr>
32 <tr>
33 <td>ID</td><td><%= h(@changeset.scmid) %></td>
33 <td>ID</td><td><%= h(@changeset.scmid) %></td>
34 </tr>
34 </tr>
35 <% end %>
35 <% end %>
36 <% if @changeset.parents.present? %>
36 <% if @changeset.parents.present? %>
37 <tr>
37 <tr>
38 <td><%= l(:label_parent_revision) %></td>
38 <td><%= l(:label_parent_revision) %></td>
39 <td>
39 <td>
40 <%= @changeset.parents.collect{
40 <%= @changeset.parents.collect{
41 |p| link_to_revision(p, @repository, :text => format_revision(p))
41 |p| link_to_revision(p, @repository, :text => format_revision(p))
42 }.join(", ").html_safe %>
42 }.join(", ").html_safe %>
43 </td>
43 </td>
44 </tr>
44 </tr>
45 <% end %>
45 <% end %>
46 <% if @changeset.children.present? %>
46 <% if @changeset.children.present? %>
47 <tr>
47 <tr>
48 <td><%= l(:label_child_revision) %></td>
48 <td><%= l(:label_child_revision) %></td>
49 <td>
49 <td>
50 <%= @changeset.children.collect{
50 <%= @changeset.children.collect{
51 |p| link_to_revision(p, @repository, :text => format_revision(p))
51 |p| link_to_revision(p, @repository, :text => format_revision(p))
52 }.join(", ").html_safe %>
52 }.join(", ").html_safe %>
53 </td>
53 </td>
54 </tr>
54 </tr>
55 <% end %>
55 <% end %>
56 </table>
56 </table>
57 <% end %>
57 <% end %>
58
58
59 <p>
59 <p>
60 <span class="author">
60 <span class="author">
61 <%= authoring(@changeset.committed_on, @changeset.author) %>
61 <%= authoring(@changeset.committed_on, @changeset.author) %>
62 </span>
62 </span>
63 </p>
63 </p>
64
64
65 <%= textilizable @changeset.comments %>
65 <%= textilizable @changeset.comments %>
66
66
67 <% if @changeset.issues.visible.any? || User.current.allowed_to?(:manage_related_issues, @repository.project) %>
67 <% if @changeset.issues.visible.any? || User.current.allowed_to?(:manage_related_issues, @repository.project) %>
68 <%= render :partial => 'related_issues' %>
68 <%= render :partial => 'related_issues' %>
69 <% end %>
69 <% end %>
70
70
71 <% if User.current.allowed_to?(:browse_repository, @project) %>
71 <% if User.current.allowed_to?(:browse_repository, @project) %>
72 <h3><%= l(:label_attachment_plural) %></h3>
72 <h3><%= l(:label_attachment_plural) %></h3>
73 <ul id="changes-legend">
73 <ul id="changes-legend">
74 <li class="change change-A"><%= l(:label_added) %></li>
74 <li class="change change-A"><%= l(:label_added) %></li>
75 <li class="change change-M"><%= l(:label_modified) %></li>
75 <li class="change change-M"><%= l(:label_modified) %></li>
76 <li class="change change-C"><%= l(:label_copied) %></li>
76 <li class="change change-C"><%= l(:label_copied) %></li>
77 <li class="change change-R"><%= l(:label_renamed) %></li>
77 <li class="change change-R"><%= l(:label_renamed) %></li>
78 <li class="change change-D"><%= l(:label_deleted) %></li>
78 <li class="change change-D"><%= l(:label_deleted) %></li>
79 </ul>
79 </ul>
80
80
81 <p><%= link_to(l(:label_view_diff),
81 <p><%= link_to(l(:label_view_diff),
82 :action => 'diff',
82 :action => 'diff',
83 :id => @project,
83 :id => @project,
84 :repository_id => @repository.identifier_param,
84 :repository_id => @repository.identifier_param,
85 :path => "",
85 :path => "",
86 :rev => @changeset.identifier) if @changeset.filechanges.any? %></p>
86 :rev => @changeset.identifier) if @changeset.filechanges.any? %></p>
87
87
88 <div class="changeset-changes">
88 <div class="changeset-changes">
89 <%= render_changeset_changes %>
89 <%= render_changeset_changes %>
90 </div>
90 </div>
91 <% end %>
91 <% end %>
92
92
93 <% content_for :header_tags do %>
93 <% content_for :header_tags do %>
94 <%= stylesheet_link_tag "scm" %>
94 <%= stylesheet_link_tag "scm" %>
95 <% end %>
95 <% end %>
96
96
97 <% html_title("#{l(:label_revision)} #{format_revision(@changeset)}") -%>
97 <%
98 title = "#{l(:label_revision)} #{format_revision(@changeset)}"
99 title << " - #{truncate(@changeset.comments, :length => 80)}"
100 html_title(title)
101 -%>
@@ -1,541 +1,541
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2013 Jean-Philippe Lang
2 # Copyright (C) 2006-2013 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
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
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.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 require File.expand_path('../../test_helper', __FILE__)
18 require File.expand_path('../../test_helper', __FILE__)
19
19
20 class RepositoriesMercurialControllerTest < ActionController::TestCase
20 class RepositoriesMercurialControllerTest < ActionController::TestCase
21 tests RepositoriesController
21 tests RepositoriesController
22
22
23 fixtures :projects, :users, :roles, :members, :member_roles,
23 fixtures :projects, :users, :roles, :members, :member_roles,
24 :repositories, :enabled_modules
24 :repositories, :enabled_modules
25
25
26 REPOSITORY_PATH = Rails.root.join('tmp/test/mercurial_repository').to_s
26 REPOSITORY_PATH = Rails.root.join('tmp/test/mercurial_repository').to_s
27 CHAR_1_HEX = "\xc3\x9c"
27 CHAR_1_HEX = "\xc3\x9c"
28 PRJ_ID = 3
28 PRJ_ID = 3
29 NUM_REV = 32
29 NUM_REV = 32
30
30
31 ruby19_non_utf8_pass =
31 ruby19_non_utf8_pass =
32 (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
32 (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
33
33
34 def setup
34 def setup
35 User.current = nil
35 User.current = nil
36 @project = Project.find(PRJ_ID)
36 @project = Project.find(PRJ_ID)
37 @repository = Repository::Mercurial.create(
37 @repository = Repository::Mercurial.create(
38 :project => @project,
38 :project => @project,
39 :url => REPOSITORY_PATH,
39 :url => REPOSITORY_PATH,
40 :path_encoding => 'ISO-8859-1'
40 :path_encoding => 'ISO-8859-1'
41 )
41 )
42 assert @repository
42 assert @repository
43 @diff_c_support = true
43 @diff_c_support = true
44 @char_1 = CHAR_1_HEX.dup
44 @char_1 = CHAR_1_HEX.dup
45 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
45 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
46 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
46 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
47 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
47 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
48 if @char_1.respond_to?(:force_encoding)
48 if @char_1.respond_to?(:force_encoding)
49 @char_1.force_encoding('UTF-8')
49 @char_1.force_encoding('UTF-8')
50 @tag_char_1.force_encoding('UTF-8')
50 @tag_char_1.force_encoding('UTF-8')
51 @branch_char_0.force_encoding('UTF-8')
51 @branch_char_0.force_encoding('UTF-8')
52 @branch_char_1.force_encoding('UTF-8')
52 @branch_char_1.force_encoding('UTF-8')
53 end
53 end
54 end
54 end
55
55
56 if ruby19_non_utf8_pass
56 if ruby19_non_utf8_pass
57 puts "TODO: Mercurial functional test fails in Ruby 1.9 " +
57 puts "TODO: Mercurial functional test fails in Ruby 1.9 " +
58 "and Encoding.default_external is not UTF-8. " +
58 "and Encoding.default_external is not UTF-8. " +
59 "Current value is '#{Encoding.default_external.to_s}'"
59 "Current value is '#{Encoding.default_external.to_s}'"
60 def test_fake; assert true end
60 def test_fake; assert true end
61 elsif File.directory?(REPOSITORY_PATH)
61 elsif File.directory?(REPOSITORY_PATH)
62
62
63 def test_get_new
63 def test_get_new
64 @request.session[:user_id] = 1
64 @request.session[:user_id] = 1
65 @project.repository.destroy
65 @project.repository.destroy
66 get :new, :project_id => 'subproject1', :repository_scm => 'Mercurial'
66 get :new, :project_id => 'subproject1', :repository_scm => 'Mercurial'
67 assert_response :success
67 assert_response :success
68 assert_template 'new'
68 assert_template 'new'
69 assert_kind_of Repository::Mercurial, assigns(:repository)
69 assert_kind_of Repository::Mercurial, assigns(:repository)
70 assert assigns(:repository).new_record?
70 assert assigns(:repository).new_record?
71 end
71 end
72
72
73 def test_show_root
73 def test_show_root
74 assert_equal 0, @repository.changesets.count
74 assert_equal 0, @repository.changesets.count
75 @repository.fetch_changesets
75 @repository.fetch_changesets
76 @project.reload
76 @project.reload
77 assert_equal NUM_REV, @repository.changesets.count
77 assert_equal NUM_REV, @repository.changesets.count
78 get :show, :id => PRJ_ID
78 get :show, :id => PRJ_ID
79 assert_response :success
79 assert_response :success
80 assert_template 'show'
80 assert_template 'show'
81 assert_not_nil assigns(:entries)
81 assert_not_nil assigns(:entries)
82 assert_equal 4, assigns(:entries).size
82 assert_equal 4, assigns(:entries).size
83 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
83 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
84 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
84 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
85 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
85 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
86 assert_not_nil assigns(:changesets)
86 assert_not_nil assigns(:changesets)
87 assert assigns(:changesets).size > 0
87 assert assigns(:changesets).size > 0
88 end
88 end
89
89
90 def test_show_directory
90 def test_show_directory
91 assert_equal 0, @repository.changesets.count
91 assert_equal 0, @repository.changesets.count
92 @repository.fetch_changesets
92 @repository.fetch_changesets
93 @project.reload
93 @project.reload
94 assert_equal NUM_REV, @repository.changesets.count
94 assert_equal NUM_REV, @repository.changesets.count
95 get :show, :id => PRJ_ID, :path => repository_path_hash(['images'])[:param]
95 get :show, :id => PRJ_ID, :path => repository_path_hash(['images'])[:param]
96 assert_response :success
96 assert_response :success
97 assert_template 'show'
97 assert_template 'show'
98 assert_not_nil assigns(:entries)
98 assert_not_nil assigns(:entries)
99 assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
99 assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
100 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
100 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
101 assert_not_nil entry
101 assert_not_nil entry
102 assert_equal 'file', entry.kind
102 assert_equal 'file', entry.kind
103 assert_equal 'images/edit.png', entry.path
103 assert_equal 'images/edit.png', entry.path
104 assert_not_nil assigns(:changesets)
104 assert_not_nil assigns(:changesets)
105 assert assigns(:changesets).size > 0
105 assert assigns(:changesets).size > 0
106 end
106 end
107
107
108 def test_show_at_given_revision
108 def test_show_at_given_revision
109 assert_equal 0, @repository.changesets.count
109 assert_equal 0, @repository.changesets.count
110 @repository.fetch_changesets
110 @repository.fetch_changesets
111 @project.reload
111 @project.reload
112 assert_equal NUM_REV, @repository.changesets.count
112 assert_equal NUM_REV, @repository.changesets.count
113 [0, '0', '0885933ad4f6'].each do |r1|
113 [0, '0', '0885933ad4f6'].each do |r1|
114 get :show, :id => PRJ_ID, :path => repository_path_hash(['images'])[:param],
114 get :show, :id => PRJ_ID, :path => repository_path_hash(['images'])[:param],
115 :rev => r1
115 :rev => r1
116 assert_response :success
116 assert_response :success
117 assert_template 'show'
117 assert_template 'show'
118 assert_not_nil assigns(:entries)
118 assert_not_nil assigns(:entries)
119 assert_equal ['delete.png'], assigns(:entries).collect(&:name)
119 assert_equal ['delete.png'], assigns(:entries).collect(&:name)
120 assert_not_nil assigns(:changesets)
120 assert_not_nil assigns(:changesets)
121 assert assigns(:changesets).size > 0
121 assert assigns(:changesets).size > 0
122 end
122 end
123 end
123 end
124
124
125 def test_show_directory_sql_escape_percent
125 def test_show_directory_sql_escape_percent
126 assert_equal 0, @repository.changesets.count
126 assert_equal 0, @repository.changesets.count
127 @repository.fetch_changesets
127 @repository.fetch_changesets
128 @project.reload
128 @project.reload
129 assert_equal NUM_REV, @repository.changesets.count
129 assert_equal NUM_REV, @repository.changesets.count
130 [13, '13', '3a330eb32958'].each do |r1|
130 [13, '13', '3a330eb32958'].each do |r1|
131 get :show, :id => PRJ_ID,
131 get :show, :id => PRJ_ID,
132 :path => repository_path_hash(['sql_escape', 'percent%dir'])[:param],
132 :path => repository_path_hash(['sql_escape', 'percent%dir'])[:param],
133 :rev => r1
133 :rev => r1
134 assert_response :success
134 assert_response :success
135 assert_template 'show'
135 assert_template 'show'
136
136
137 assert_not_nil assigns(:entries)
137 assert_not_nil assigns(:entries)
138 assert_equal ['percent%file1.txt', 'percentfile1.txt'],
138 assert_equal ['percent%file1.txt', 'percentfile1.txt'],
139 assigns(:entries).collect(&:name)
139 assigns(:entries).collect(&:name)
140 changesets = assigns(:changesets)
140 changesets = assigns(:changesets)
141 assert_not_nil changesets
141 assert_not_nil changesets
142 assert assigns(:changesets).size > 0
142 assert assigns(:changesets).size > 0
143 assert_equal %w(13 11 10 9), changesets.collect(&:revision)
143 assert_equal %w(13 11 10 9), changesets.collect(&:revision)
144 end
144 end
145 end
145 end
146
146
147 def test_show_directory_latin_1_path
147 def test_show_directory_latin_1_path
148 assert_equal 0, @repository.changesets.count
148 assert_equal 0, @repository.changesets.count
149 @repository.fetch_changesets
149 @repository.fetch_changesets
150 @project.reload
150 @project.reload
151 assert_equal NUM_REV, @repository.changesets.count
151 assert_equal NUM_REV, @repository.changesets.count
152 [21, '21', 'adf805632193'].each do |r1|
152 [21, '21', 'adf805632193'].each do |r1|
153 get :show, :id => PRJ_ID,
153 get :show, :id => PRJ_ID,
154 :path => repository_path_hash(['latin-1-dir'])[:param],
154 :path => repository_path_hash(['latin-1-dir'])[:param],
155 :rev => r1
155 :rev => r1
156 assert_response :success
156 assert_response :success
157 assert_template 'show'
157 assert_template 'show'
158
158
159 assert_not_nil assigns(:entries)
159 assert_not_nil assigns(:entries)
160 assert_equal ["make-latin-1-file.rb",
160 assert_equal ["make-latin-1-file.rb",
161 "test-#{@char_1}-1.txt",
161 "test-#{@char_1}-1.txt",
162 "test-#{@char_1}-2.txt",
162 "test-#{@char_1}-2.txt",
163 "test-#{@char_1}.txt"], assigns(:entries).collect(&:name)
163 "test-#{@char_1}.txt"], assigns(:entries).collect(&:name)
164 changesets = assigns(:changesets)
164 changesets = assigns(:changesets)
165 assert_not_nil changesets
165 assert_not_nil changesets
166 assert_equal %w(21 20 19 18 17), changesets.collect(&:revision)
166 assert_equal %w(21 20 19 18 17), changesets.collect(&:revision)
167 end
167 end
168 end
168 end
169
169
170 def show_should_show_branch_selection_form
170 def show_should_show_branch_selection_form
171 @repository.fetch_changesets
171 @repository.fetch_changesets
172 @project.reload
172 @project.reload
173 get :show, :id => PRJ_ID
173 get :show, :id => PRJ_ID
174 assert_tag 'form', :attributes => {:id => 'revision_selector', :action => '/projects/subproject1/repository/show'}
174 assert_tag 'form', :attributes => {:id => 'revision_selector', :action => '/projects/subproject1/repository/show'}
175 assert_tag 'select', :attributes => {:name => 'branch'},
175 assert_tag 'select', :attributes => {:name => 'branch'},
176 :child => {:tag => 'option', :attributes => {:value => 'test-branch-01'}},
176 :child => {:tag => 'option', :attributes => {:value => 'test-branch-01'}},
177 :parent => {:tag => 'form', :attributes => {:id => 'revision_selector'}}
177 :parent => {:tag => 'form', :attributes => {:id => 'revision_selector'}}
178 end
178 end
179
179
180 def test_show_branch
180 def test_show_branch
181 assert_equal 0, @repository.changesets.count
181 assert_equal 0, @repository.changesets.count
182 @repository.fetch_changesets
182 @repository.fetch_changesets
183 @project.reload
183 @project.reload
184 assert_equal NUM_REV, @repository.changesets.count
184 assert_equal NUM_REV, @repository.changesets.count
185 [
185 [
186 'default',
186 'default',
187 @branch_char_1,
187 @branch_char_1,
188 'branch (1)[2]&,%.-3_4',
188 'branch (1)[2]&,%.-3_4',
189 @branch_char_0,
189 @branch_char_0,
190 'test_branch.latin-1',
190 'test_branch.latin-1',
191 'test-branch-00',
191 'test-branch-00',
192 ].each do |bra|
192 ].each do |bra|
193 get :show, :id => PRJ_ID, :rev => bra
193 get :show, :id => PRJ_ID, :rev => bra
194 assert_response :success
194 assert_response :success
195 assert_template 'show'
195 assert_template 'show'
196 assert_not_nil assigns(:entries)
196 assert_not_nil assigns(:entries)
197 assert assigns(:entries).size > 0
197 assert assigns(:entries).size > 0
198 assert_not_nil assigns(:changesets)
198 assert_not_nil assigns(:changesets)
199 assert assigns(:changesets).size > 0
199 assert assigns(:changesets).size > 0
200 end
200 end
201 end
201 end
202
202
203 def test_show_tag
203 def test_show_tag
204 assert_equal 0, @repository.changesets.count
204 assert_equal 0, @repository.changesets.count
205 @repository.fetch_changesets
205 @repository.fetch_changesets
206 @project.reload
206 @project.reload
207 assert_equal NUM_REV, @repository.changesets.count
207 assert_equal NUM_REV, @repository.changesets.count
208 [
208 [
209 @tag_char_1,
209 @tag_char_1,
210 'tag_test.00',
210 'tag_test.00',
211 'tag-init-revision'
211 'tag-init-revision'
212 ].each do |tag|
212 ].each do |tag|
213 get :show, :id => PRJ_ID, :rev => tag
213 get :show, :id => PRJ_ID, :rev => tag
214 assert_response :success
214 assert_response :success
215 assert_template 'show'
215 assert_template 'show'
216 assert_not_nil assigns(:entries)
216 assert_not_nil assigns(:entries)
217 assert assigns(:entries).size > 0
217 assert assigns(:entries).size > 0
218 assert_not_nil assigns(:changesets)
218 assert_not_nil assigns(:changesets)
219 assert assigns(:changesets).size > 0
219 assert assigns(:changesets).size > 0
220 end
220 end
221 end
221 end
222
222
223 def test_changes
223 def test_changes
224 get :changes, :id => PRJ_ID,
224 get :changes, :id => PRJ_ID,
225 :path => repository_path_hash(['images', 'edit.png'])[:param]
225 :path => repository_path_hash(['images', 'edit.png'])[:param]
226 assert_response :success
226 assert_response :success
227 assert_template 'changes'
227 assert_template 'changes'
228 assert_tag :tag => 'h2', :content => 'edit.png'
228 assert_tag :tag => 'h2', :content => 'edit.png'
229 end
229 end
230
230
231 def test_entry_show
231 def test_entry_show
232 get :entry, :id => PRJ_ID,
232 get :entry, :id => PRJ_ID,
233 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param]
233 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param]
234 assert_response :success
234 assert_response :success
235 assert_template 'entry'
235 assert_template 'entry'
236 # Line 10
236 # Line 10
237 assert_tag :tag => 'th',
237 assert_tag :tag => 'th',
238 :content => '10',
238 :content => '10',
239 :attributes => { :class => 'line-num' },
239 :attributes => { :class => 'line-num' },
240 :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
240 :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
241 end
241 end
242
242
243 def test_entry_show_latin_1_path
243 def test_entry_show_latin_1_path
244 [21, '21', 'adf805632193'].each do |r1|
244 [21, '21', 'adf805632193'].each do |r1|
245 get :entry, :id => PRJ_ID,
245 get :entry, :id => PRJ_ID,
246 :path => repository_path_hash(['latin-1-dir', "test-#{@char_1}-2.txt"])[:param],
246 :path => repository_path_hash(['latin-1-dir', "test-#{@char_1}-2.txt"])[:param],
247 :rev => r1
247 :rev => r1
248 assert_response :success
248 assert_response :success
249 assert_template 'entry'
249 assert_template 'entry'
250 assert_tag :tag => 'th',
250 assert_tag :tag => 'th',
251 :content => '1',
251 :content => '1',
252 :attributes => { :class => 'line-num' },
252 :attributes => { :class => 'line-num' },
253 :sibling => { :tag => 'td',
253 :sibling => { :tag => 'td',
254 :content => /Mercurial is a distributed version control system/ }
254 :content => /Mercurial is a distributed version control system/ }
255 end
255 end
256 end
256 end
257
257
258 def test_entry_show_latin_1_contents
258 def test_entry_show_latin_1_contents
259 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
259 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
260 [27, '27', '7bbf4c738e71'].each do |r1|
260 [27, '27', '7bbf4c738e71'].each do |r1|
261 get :entry, :id => PRJ_ID,
261 get :entry, :id => PRJ_ID,
262 :path => repository_path_hash(['latin-1-dir', "test-#{@char_1}.txt"])[:param],
262 :path => repository_path_hash(['latin-1-dir', "test-#{@char_1}.txt"])[:param],
263 :rev => r1
263 :rev => r1
264 assert_response :success
264 assert_response :success
265 assert_template 'entry'
265 assert_template 'entry'
266 assert_tag :tag => 'th',
266 assert_tag :tag => 'th',
267 :content => '1',
267 :content => '1',
268 :attributes => { :class => 'line-num' },
268 :attributes => { :class => 'line-num' },
269 :sibling => { :tag => 'td',
269 :sibling => { :tag => 'td',
270 :content => /test-#{@char_1}.txt/ }
270 :content => /test-#{@char_1}.txt/ }
271 end
271 end
272 end
272 end
273 end
273 end
274
274
275 def test_entry_download
275 def test_entry_download
276 get :entry, :id => PRJ_ID,
276 get :entry, :id => PRJ_ID,
277 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param],
277 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param],
278 :format => 'raw'
278 :format => 'raw'
279 assert_response :success
279 assert_response :success
280 # File content
280 # File content
281 assert @response.body.include?('WITHOUT ANY WARRANTY')
281 assert @response.body.include?('WITHOUT ANY WARRANTY')
282 end
282 end
283
283
284 def test_entry_binary_force_download
284 def test_entry_binary_force_download
285 get :entry, :id => PRJ_ID, :rev => 1,
285 get :entry, :id => PRJ_ID, :rev => 1,
286 :path => repository_path_hash(['images', 'edit.png'])[:param]
286 :path => repository_path_hash(['images', 'edit.png'])[:param]
287 assert_response :success
287 assert_response :success
288 assert_equal 'image/png', @response.content_type
288 assert_equal 'image/png', @response.content_type
289 end
289 end
290
290
291 def test_directory_entry
291 def test_directory_entry
292 get :entry, :id => PRJ_ID,
292 get :entry, :id => PRJ_ID,
293 :path => repository_path_hash(['sources'])[:param]
293 :path => repository_path_hash(['sources'])[:param]
294 assert_response :success
294 assert_response :success
295 assert_template 'show'
295 assert_template 'show'
296 assert_not_nil assigns(:entry)
296 assert_not_nil assigns(:entry)
297 assert_equal 'sources', assigns(:entry).name
297 assert_equal 'sources', assigns(:entry).name
298 end
298 end
299
299
300 def test_diff
300 def test_diff
301 assert_equal 0, @repository.changesets.count
301 assert_equal 0, @repository.changesets.count
302 @repository.fetch_changesets
302 @repository.fetch_changesets
303 @project.reload
303 @project.reload
304 assert_equal NUM_REV, @repository.changesets.count
304 assert_equal NUM_REV, @repository.changesets.count
305 [4, '4', 'def6d2f1254a'].each do |r1|
305 [4, '4', 'def6d2f1254a'].each do |r1|
306 # Full diff of changeset 4
306 # Full diff of changeset 4
307 ['inline', 'sbs'].each do |dt|
307 ['inline', 'sbs'].each do |dt|
308 get :diff, :id => PRJ_ID, :rev => r1, :type => dt
308 get :diff, :id => PRJ_ID, :rev => r1, :type => dt
309 assert_response :success
309 assert_response :success
310 assert_template 'diff'
310 assert_template 'diff'
311 if @diff_c_support
311 if @diff_c_support
312 # Line 22 removed
312 # Line 22 removed
313 assert_tag :tag => 'th',
313 assert_tag :tag => 'th',
314 :content => '22',
314 :content => '22',
315 :sibling => { :tag => 'td',
315 :sibling => { :tag => 'td',
316 :attributes => { :class => /diff_out/ },
316 :attributes => { :class => /diff_out/ },
317 :content => /def remove/ }
317 :content => /def remove/ }
318 assert_tag :tag => 'h2', :content => /4:def6d2f1254a/
318 assert_tag :tag => 'h2', :content => /4:def6d2f1254a/
319 end
319 end
320 end
320 end
321 end
321 end
322 end
322 end
323
323
324 def test_diff_two_revs
324 def test_diff_two_revs
325 assert_equal 0, @repository.changesets.count
325 assert_equal 0, @repository.changesets.count
326 @repository.fetch_changesets
326 @repository.fetch_changesets
327 @project.reload
327 @project.reload
328 assert_equal NUM_REV, @repository.changesets.count
328 assert_equal NUM_REV, @repository.changesets.count
329 [2, '400bb8672109', '400', 400].each do |r1|
329 [2, '400bb8672109', '400', 400].each do |r1|
330 [4, 'def6d2f1254a'].each do |r2|
330 [4, 'def6d2f1254a'].each do |r2|
331 ['inline', 'sbs'].each do |dt|
331 ['inline', 'sbs'].each do |dt|
332 get :diff,
332 get :diff,
333 :id => PRJ_ID,
333 :id => PRJ_ID,
334 :rev => r1,
334 :rev => r1,
335 :rev_to => r2,
335 :rev_to => r2,
336 :type => dt
336 :type => dt
337 assert_response :success
337 assert_response :success
338 assert_template 'diff'
338 assert_template 'diff'
339 diff = assigns(:diff)
339 diff = assigns(:diff)
340 assert_not_nil diff
340 assert_not_nil diff
341 assert_tag :tag => 'h2',
341 assert_tag :tag => 'h2',
342 :content => /4:def6d2f1254a 2:400bb8672109/
342 :content => /4:def6d2f1254a 2:400bb8672109/
343 end
343 end
344 end
344 end
345 end
345 end
346 end
346 end
347
347
348 def test_diff_latin_1_path
348 def test_diff_latin_1_path
349 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
349 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
350 [21, 'adf805632193'].each do |r1|
350 [21, 'adf805632193'].each do |r1|
351 ['inline', 'sbs'].each do |dt|
351 ['inline', 'sbs'].each do |dt|
352 get :diff, :id => PRJ_ID, :rev => r1, :type => dt
352 get :diff, :id => PRJ_ID, :rev => r1, :type => dt
353 assert_response :success
353 assert_response :success
354 assert_template 'diff'
354 assert_template 'diff'
355 assert_tag :tag => 'thead',
355 assert_tag :tag => 'thead',
356 :descendant => {
356 :descendant => {
357 :tag => 'th',
357 :tag => 'th',
358 :attributes => { :class => 'filename' } ,
358 :attributes => { :class => 'filename' } ,
359 :content => /latin-1-dir\/test-#{@char_1}-2.txt/ ,
359 :content => /latin-1-dir\/test-#{@char_1}-2.txt/ ,
360 },
360 },
361 :sibling => {
361 :sibling => {
362 :tag => 'tbody',
362 :tag => 'tbody',
363 :descendant => {
363 :descendant => {
364 :tag => 'td',
364 :tag => 'td',
365 :attributes => { :class => /diff_in/ },
365 :attributes => { :class => /diff_in/ },
366 :content => /It is written in Python/
366 :content => /It is written in Python/
367 }
367 }
368 }
368 }
369 end
369 end
370 end
370 end
371 end
371 end
372 end
372 end
373
373
374 def test_diff_should_show_modified_filenames
374 def test_diff_should_show_modified_filenames
375 get :diff, :id => PRJ_ID, :rev => '400bb8672109', :type => 'inline'
375 get :diff, :id => PRJ_ID, :rev => '400bb8672109', :type => 'inline'
376 assert_response :success
376 assert_response :success
377 assert_template 'diff'
377 assert_template 'diff'
378 assert_select 'th.filename', :text => 'sources/watchers_controller.rb'
378 assert_select 'th.filename', :text => 'sources/watchers_controller.rb'
379 end
379 end
380
380
381 def test_diff_should_show_deleted_filenames
381 def test_diff_should_show_deleted_filenames
382 get :diff, :id => PRJ_ID, :rev => 'b3a615152df8', :type => 'inline'
382 get :diff, :id => PRJ_ID, :rev => 'b3a615152df8', :type => 'inline'
383 assert_response :success
383 assert_response :success
384 assert_template 'diff'
384 assert_template 'diff'
385 assert_select 'th.filename', :text => 'sources/welcome_controller.rb'
385 assert_select 'th.filename', :text => 'sources/welcome_controller.rb'
386 end
386 end
387
387
388 def test_annotate
388 def test_annotate
389 get :annotate, :id => PRJ_ID,
389 get :annotate, :id => PRJ_ID,
390 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param]
390 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param]
391 assert_response :success
391 assert_response :success
392 assert_template 'annotate'
392 assert_template 'annotate'
393
393
394 # Line 22, revision 4:def6d2f1254a
394 # Line 22, revision 4:def6d2f1254a
395 assert_select 'tr' do
395 assert_select 'tr' do
396 assert_select 'th.line-num', :text => '22'
396 assert_select 'th.line-num', :text => '22'
397 assert_select 'td.revision', :text => '4:def6d2f1254a'
397 assert_select 'td.revision', :text => '4:def6d2f1254a'
398 assert_select 'td.author', :text => 'jsmith'
398 assert_select 'td.author', :text => 'jsmith'
399 assert_select 'td', :text => /remove_watcher/
399 assert_select 'td', :text => /remove_watcher/
400 end
400 end
401 end
401 end
402
402
403 def test_annotate_not_in_tip
403 def test_annotate_not_in_tip
404 assert_equal 0, @repository.changesets.count
404 assert_equal 0, @repository.changesets.count
405 @repository.fetch_changesets
405 @repository.fetch_changesets
406 @project.reload
406 @project.reload
407 assert_equal NUM_REV, @repository.changesets.count
407 assert_equal NUM_REV, @repository.changesets.count
408 get :annotate, :id => PRJ_ID,
408 get :annotate, :id => PRJ_ID,
409 :path => repository_path_hash(['sources', 'welcome_controller.rb'])[:param]
409 :path => repository_path_hash(['sources', 'welcome_controller.rb'])[:param]
410 assert_response 404
410 assert_response 404
411 assert_error_tag :content => /was not found/
411 assert_error_tag :content => /was not found/
412 end
412 end
413
413
414 def test_annotate_at_given_revision
414 def test_annotate_at_given_revision
415 assert_equal 0, @repository.changesets.count
415 assert_equal 0, @repository.changesets.count
416 @repository.fetch_changesets
416 @repository.fetch_changesets
417 @project.reload
417 @project.reload
418 assert_equal NUM_REV, @repository.changesets.count
418 assert_equal NUM_REV, @repository.changesets.count
419 [2, '400bb8672109', '400', 400].each do |r1|
419 [2, '400bb8672109', '400', 400].each do |r1|
420 get :annotate, :id => PRJ_ID, :rev => r1,
420 get :annotate, :id => PRJ_ID, :rev => r1,
421 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param]
421 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param]
422 assert_response :success
422 assert_response :success
423 assert_template 'annotate'
423 assert_template 'annotate'
424 assert_tag :tag => 'h2', :content => /@ 2:400bb8672109/
424 assert_tag :tag => 'h2', :content => /@ 2:400bb8672109/
425 end
425 end
426 end
426 end
427
427
428 def test_annotate_latin_1_path
428 def test_annotate_latin_1_path
429 [21, '21', 'adf805632193'].each do |r1|
429 [21, '21', 'adf805632193'].each do |r1|
430 get :annotate, :id => PRJ_ID,
430 get :annotate, :id => PRJ_ID,
431 :path => repository_path_hash(['latin-1-dir', "test-#{@char_1}-2.txt"])[:param],
431 :path => repository_path_hash(['latin-1-dir', "test-#{@char_1}-2.txt"])[:param],
432 :rev => r1
432 :rev => r1
433 assert_response :success
433 assert_response :success
434 assert_template 'annotate'
434 assert_template 'annotate'
435 assert_tag :tag => 'th',
435 assert_tag :tag => 'th',
436 :content => '1',
436 :content => '1',
437 :attributes => { :class => 'line-num' },
437 :attributes => { :class => 'line-num' },
438 :sibling =>
438 :sibling =>
439 {
439 {
440 :tag => 'td',
440 :tag => 'td',
441 :attributes => { :class => 'revision' },
441 :attributes => { :class => 'revision' },
442 :child => { :tag => 'a', :content => '20:709858aafd1b' }
442 :child => { :tag => 'a', :content => '20:709858aafd1b' }
443 }
443 }
444 assert_tag :tag => 'th',
444 assert_tag :tag => 'th',
445 :content => '1',
445 :content => '1',
446 :attributes => { :class => 'line-num' },
446 :attributes => { :class => 'line-num' },
447 :sibling =>
447 :sibling =>
448 {
448 {
449 :tag => 'td' ,
449 :tag => 'td' ,
450 :content => 'jsmith' ,
450 :content => 'jsmith' ,
451 :attributes => { :class => 'author' },
451 :attributes => { :class => 'author' },
452 }
452 }
453 assert_tag :tag => 'th',
453 assert_tag :tag => 'th',
454 :content => '1',
454 :content => '1',
455 :attributes => { :class => 'line-num' },
455 :attributes => { :class => 'line-num' },
456 :sibling => { :tag => 'td',
456 :sibling => { :tag => 'td',
457 :content => /Mercurial is a distributed version control system/ }
457 :content => /Mercurial is a distributed version control system/ }
458
458
459 end
459 end
460 end
460 end
461
461
462 def test_annotate_latin_1_contents
462 def test_annotate_latin_1_contents
463 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
463 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
464 [27, '7bbf4c738e71'].each do |r1|
464 [27, '7bbf4c738e71'].each do |r1|
465 get :annotate, :id => PRJ_ID,
465 get :annotate, :id => PRJ_ID,
466 :path => repository_path_hash(['latin-1-dir', "test-#{@char_1}.txt"])[:param],
466 :path => repository_path_hash(['latin-1-dir', "test-#{@char_1}.txt"])[:param],
467 :rev => r1
467 :rev => r1
468 assert_tag :tag => 'th',
468 assert_tag :tag => 'th',
469 :content => '1',
469 :content => '1',
470 :attributes => { :class => 'line-num' },
470 :attributes => { :class => 'line-num' },
471 :sibling => { :tag => 'td',
471 :sibling => { :tag => 'td',
472 :content => /test-#{@char_1}.txt/ }
472 :content => /test-#{@char_1}.txt/ }
473 end
473 end
474 end
474 end
475 end
475 end
476
476
477 def test_revision
477 def test_revision
478 assert_equal 0, @repository.changesets.count
478 assert_equal 0, @repository.changesets.count
479 @repository.fetch_changesets
479 @repository.fetch_changesets
480 @project.reload
480 @project.reload
481 assert_equal NUM_REV, @repository.changesets.count
481 assert_equal NUM_REV, @repository.changesets.count
482 ['1', '9d5b5b', '9d5b5b004199'].each do |r|
482 ['1', '9d5b5b', '9d5b5b004199'].each do |r|
483 with_settings :default_language => "en" do
483 with_settings :default_language => "en" do
484 get :revision, :id => PRJ_ID, :rev => r
484 get :revision, :id => PRJ_ID, :rev => r
485 assert_response :success
485 assert_response :success
486 assert_template 'revision'
486 assert_template 'revision'
487 assert_select 'title',
487 assert_select 'title',
488 :text => 'Revision 1:9d5b5b004199 - eCookbook Subproject 1 - Redmine'
488 :text => 'Revision 1:9d5b5b004199 - Added 2 files and modified one. - eCookbook Subproject 1 - Redmine'
489 end
489 end
490 end
490 end
491 end
491 end
492
492
493 def test_empty_revision
493 def test_empty_revision
494 assert_equal 0, @repository.changesets.count
494 assert_equal 0, @repository.changesets.count
495 @repository.fetch_changesets
495 @repository.fetch_changesets
496 @project.reload
496 @project.reload
497 assert_equal NUM_REV, @repository.changesets.count
497 assert_equal NUM_REV, @repository.changesets.count
498 ['', ' ', nil].each do |r|
498 ['', ' ', nil].each do |r|
499 get :revision, :id => PRJ_ID, :rev => r
499 get :revision, :id => PRJ_ID, :rev => r
500 assert_response 404
500 assert_response 404
501 assert_error_tag :content => /was not found/
501 assert_error_tag :content => /was not found/
502 end
502 end
503 end
503 end
504
504
505 def test_destroy_valid_repository
505 def test_destroy_valid_repository
506 @request.session[:user_id] = 1 # admin
506 @request.session[:user_id] = 1 # admin
507 assert_equal 0, @repository.changesets.count
507 assert_equal 0, @repository.changesets.count
508 @repository.fetch_changesets
508 @repository.fetch_changesets
509 assert_equal NUM_REV, @repository.changesets.count
509 assert_equal NUM_REV, @repository.changesets.count
510
510
511 assert_difference 'Repository.count', -1 do
511 assert_difference 'Repository.count', -1 do
512 delete :destroy, :id => @repository.id
512 delete :destroy, :id => @repository.id
513 end
513 end
514 assert_response 302
514 assert_response 302
515 @project.reload
515 @project.reload
516 assert_nil @project.repository
516 assert_nil @project.repository
517 end
517 end
518
518
519 def test_destroy_invalid_repository
519 def test_destroy_invalid_repository
520 @request.session[:user_id] = 1 # admin
520 @request.session[:user_id] = 1 # admin
521 @project.repository.destroy
521 @project.repository.destroy
522 @repository = Repository::Mercurial.create!(
522 @repository = Repository::Mercurial.create!(
523 :project => Project.find(PRJ_ID),
523 :project => Project.find(PRJ_ID),
524 :url => "/invalid",
524 :url => "/invalid",
525 :path_encoding => 'ISO-8859-1'
525 :path_encoding => 'ISO-8859-1'
526 )
526 )
527 @repository.fetch_changesets
527 @repository.fetch_changesets
528 assert_equal 0, @repository.changesets.count
528 assert_equal 0, @repository.changesets.count
529
529
530 assert_difference 'Repository.count', -1 do
530 assert_difference 'Repository.count', -1 do
531 delete :destroy, :id => @repository.id
531 delete :destroy, :id => @repository.id
532 end
532 end
533 assert_response 302
533 assert_response 302
534 @project.reload
534 @project.reload
535 assert_nil @project.repository
535 assert_nil @project.repository
536 end
536 end
537 else
537 else
538 puts "Mercurial test repository NOT FOUND. Skipping functional tests !!!"
538 puts "Mercurial test repository NOT FOUND. Skipping functional tests !!!"
539 def test_fake; assert true end
539 def test_fake; assert true end
540 end
540 end
541 end
541 end
General Comments 0
You need to be logged in to leave comments. Login now