Revision 1297:0a574315af3e .svn/pristine/ba
| .svn/pristine/ba/ba17318dbb463f926062c32d7de0e2c9351f38c4.svn-base | ||
|---|---|---|
| 1 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> |
|
| 2 |
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> |
|
| 3 |
<head> |
|
| 4 |
<title>RedmineWikiFormatting</title> |
|
| 5 |
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> |
|
| 6 |
<style type="text/css"> |
|
| 7 |
body { font:80% Verdana,Tahoma,Arial,sans-serif; }
|
|
| 8 |
h1, h2, h3, h4 { font-family: Trebuchet MS,Georgia,"Times New Roman",serif; }
|
|
| 9 |
pre, code { font-size:120%; }
|
|
| 10 |
pre code { font-size:100%; }
|
|
| 11 |
pre {
|
|
| 12 |
margin: 1em 1em 1em 1.6em; |
|
| 13 |
padding: 2px; |
|
| 14 |
background-color: #fafafa; |
|
| 15 |
border: 1px solid #dadada; |
|
| 16 |
width:95%; |
|
| 17 |
overflow-x: auto; |
|
| 18 |
} |
|
| 19 |
a.new { color: #b73535; }
|
|
| 20 |
|
|
| 21 |
.syntaxhl .line-numbers { padding: 2px 4px 2px 4px; background-color: #eee; margin:0 }
|
|
| 22 |
.syntaxhl .comment { color:#666; }
|
|
| 23 |
|
|
| 24 |
.syntaxhl .class { color:#B06; font-weight:bold }
|
|
| 25 |
.syntaxhl .delimiter { color:black }
|
|
| 26 |
.syntaxhl .function { color:#06B; font-weight:bold }
|
|
| 27 |
|
|
| 28 |
.syntaxhl .inline { background: #eee }
|
|
| 29 |
.syntaxhl .inline .inline-delimiter { font-weight: bold; color: #888 }
|
|
| 30 |
|
|
| 31 |
.syntaxhl .instance-variable { color:#33B }
|
|
| 32 |
.syntaxhl .reserved { color:#080; font-weight:bold }
|
|
| 33 |
|
|
| 34 |
.syntaxhl .string { background-color:#fff0f0; color: #D20; }
|
|
| 35 |
.syntaxhl .string .delimiter { color:#710 }
|
|
| 36 |
|
|
| 37 |
</style> |
|
| 38 |
</head> |
|
| 39 |
|
|
| 40 |
<body> |
|
| 41 |
<h1><a name="1" class="wiki-page"></a>Wiki formatting</h1> |
|
| 42 |
|
|
| 43 |
<h2><a name="2" class="wiki-page"></a>Links</h2> |
|
| 44 |
|
|
| 45 |
<h3><a name="3" class="wiki-page"></a>Redmine links</h3> |
|
| 46 |
|
|
| 47 |
<p>Redmine allows hyperlinking between resources (issues, changesets, wiki pages...) from anywhere wiki formatting is used.</p> |
|
| 48 |
<ul> |
|
| 49 |
<li>Link to an issue: <strong>#124</strong> (displays <del><a href="#" class="issue" title="bulk edit doesn't change the category or fixed version properties (Closed)">#124</a></del>, link is striked-through if the issue is closed)</li> |
|
| 50 |
<li>Link to an issue note: <strong>#124-6</strong>, or <strong>#124#note-6</strong></li> |
|
| 51 |
</ul> |
|
| 52 |
|
|
| 53 |
<p>Wiki links:</p> |
|
| 54 |
|
|
| 55 |
<ul> |
|
| 56 |
<li><strong>[[Guide]]</strong> displays a link to the page named 'Guide': <a href="#" class="wiki-page">Guide</a></li> |
|
| 57 |
<li><strong>[[Guide#further-reading]]</strong> takes you to the anchor "further-reading". Headings get automatically assigned anchors so that you can refer to them: <a href="#" class="wiki-page">Guide</a></li> |
|
| 58 |
<li><strong>[[Guide|User manual]]</strong> displays a link to the same page but with a different text: <a href="#" class="wiki-page">User manual</a></li> |
|
| 59 |
</ul> |
|
| 60 |
|
|
| 61 |
<p>You can also link to pages of an other project wiki:</p> |
|
| 62 |
|
|
| 63 |
<ul> |
|
| 64 |
<li><strong>[[sandbox:some page]]</strong> displays a link to the page named 'Some page' of the Sandbox wiki</li> |
|
| 65 |
<li><strong>[[sandbox:]]</strong> displays a link to the Sandbox wiki main page</li> |
|
| 66 |
</ul> |
|
| 67 |
|
|
| 68 |
<p>Wiki links are displayed in red if the page doesn't exist yet, eg: <a href="#" class="wiki-page new">Nonexistent page</a>.</p> |
|
| 69 |
|
|
| 70 |
<p>Links to other resources:</p> |
|
| 71 |
|
|
| 72 |
<ul> |
|
| 73 |
<li>Documents: |
|
| 74 |
<ul> |
|
| 75 |
<li><strong>document#17</strong> (link to document with id 17)</li> |
|
| 76 |
<li><strong>document:Greetings</strong> (link to the document with title "Greetings")</li> |
|
| 77 |
<li><strong>document:"Some document"</strong> (double quotes can be used when document title contains spaces)</li> |
|
| 78 |
<li><strong>sandbox:document:"Some document"</strong> (link to a document with title "Some document" in other project "sandbox")</li> |
|
| 79 |
</ul></li> |
|
| 80 |
</ul> |
|
| 81 |
|
|
| 82 |
<ul> |
|
| 83 |
<li>Versions: |
|
| 84 |
<ul> |
|
| 85 |
<li><strong>version#3</strong> (link to version with id 3)</li> |
|
| 86 |
<li><strong>version:1.0.0</strong> (link to version named "1.0.0")</li> |
|
| 87 |
<li><strong>version:"1.0 beta 2"</strong></li> |
|
| 88 |
<li><strong>sandbox:version:1.0.0</strong> (link to version "1.0.0" in the project "sandbox")</li> |
|
| 89 |
</ul></li> |
|
| 90 |
</ul> |
|
| 91 |
|
|
| 92 |
<ul> |
|
| 93 |
<li>Attachments: |
|
| 94 |
<ul> |
|
| 95 |
<li><strong>attachment:file.zip</strong> (link to the attachment of the current object named file.zip)</li> |
|
| 96 |
<li>For now, attachments of the current object can be referenced only (if you're on an issue, it's possible to reference attachments of this issue only)</li> |
|
| 97 |
</ul></li> |
|
| 98 |
</ul> |
|
| 99 |
|
|
| 100 |
<ul> |
|
| 101 |
<li>Changesets: |
|
| 102 |
<ul> |
|
| 103 |
<li><strong>r758</strong> (link to a changeset)</li> |
|
| 104 |
<li><strong>commit:c6f4d0fd</strong> (link to a changeset with a non-numeric hash)</li> |
|
| 105 |
<li><strong>svn1|r758</strong> (link to a changeset of a specific repository, for projects with multiple repositories)</li> |
|
| 106 |
<li><strong>commit:hg|c6f4d0fd</strong> (link to a changeset with a non-numeric hash of a specific repository)</li> |
|
| 107 |
<li><strong>sandbox:r758</strong> (link to a changeset of another project)</li> |
|
| 108 |
<li><strong>sandbox:commit:c6f4d0fd</strong> (link to a changeset with a non-numeric hash of another project)</li> |
|
| 109 |
</ul></li> |
|
| 110 |
</ul> |
|
| 111 |
|
|
| 112 |
<ul> |
|
| 113 |
<li>Repository files: |
|
| 114 |
<ul> |
|
| 115 |
<li><strong>source:some/file</strong> (link to the file located at /some/file in the project's repository)</li> |
|
| 116 |
<li><strong>source:some/file@52</strong> (link to the file's revision 52)</li> |
|
| 117 |
<li><strong>source:some/file#L120</strong> (link to line 120 of the file)</li> |
|
| 118 |
<li><strong>source:some/file@52#L120</strong> (link to line 120 of the file's revision 52)</li> |
|
| 119 |
<li><strong>source:"some file@52#L120"</strong> (use double quotes when the URL contains spaces</li> |
|
| 120 |
<li><strong>export:some/file</strong> (force the download of the file)</li> |
|
| 121 |
<li><strong>source:svn1|some/file</strong> (link to a file of a specific repository, for projects with multiple repositories)</li> |
|
| 122 |
<li><strong>sandbox:source:some/file</strong> (link to the file located at /some/file in the repository of the project "sandbox")</li> |
|
| 123 |
<li><strong>sandbox:export:some/file</strong> (force the download of the file)</li> |
|
| 124 |
</ul></li> |
|
| 125 |
</ul> |
|
| 126 |
|
|
| 127 |
<ul> |
|
| 128 |
<li>Forum messages: |
|
| 129 |
<ul> |
|
| 130 |
<li><strong>message#1218</strong> (link to message with id 1218)</li> |
|
| 131 |
</ul></li> |
|
| 132 |
</ul> |
|
| 133 |
|
|
| 134 |
<ul> |
|
| 135 |
<li>Projects: |
|
| 136 |
<ul> |
|
| 137 |
<li><strong>project#3</strong> (link to project with id 3)</li> |
|
| 138 |
<li><strong>project:someproject</strong> (link to project named "someproject")</li> |
|
| 139 |
</ul></li> |
|
| 140 |
</ul> |
|
| 141 |
|
|
| 142 |
|
|
| 143 |
<p>Escaping:</p> |
|
| 144 |
|
|
| 145 |
<ul> |
|
| 146 |
<li>You can prevent Redmine links from being parsed by preceding them with an exclamation mark: !</li> |
|
| 147 |
</ul> |
|
| 148 |
|
|
| 149 |
|
|
| 150 |
<h3><a name="4" class="wiki-page"></a>External links</h3> |
|
| 151 |
|
|
| 152 |
<p>HTTP URLs and email addresses are automatically turned into clickable links:</p> |
|
| 153 |
|
|
| 154 |
<pre> |
|
| 155 |
http://www.redmine.org, someone@foo.bar |
|
| 156 |
</pre> |
|
| 157 |
|
|
| 158 |
<p>displays: <a class="external" href="http://www.redmine.org">http://www.redmine.org</a>, <a href="mailto:someone@foo.bar" class="email">someone@foo.bar</a></p> |
|
| 159 |
|
|
| 160 |
<p>If you want to display a specific text instead of the URL, you can use the standard textile syntax:</p> |
|
| 161 |
|
|
| 162 |
<pre> |
|
| 163 |
"Redmine web site":http://www.redmine.org |
|
| 164 |
</pre> |
|
| 165 |
|
|
| 166 |
<p>displays: <a href="http://www.redmine.org" class="external">Redmine web site</a></p> |
|
| 167 |
|
|
| 168 |
|
|
| 169 |
<h2><a name="5" class="wiki-page"></a>Text formatting</h2> |
|
| 170 |
|
|
| 171 |
|
|
| 172 |
<p>For things such as headlines, bold, tables, lists, Redmine supports Textile syntax. See <a class="external" href="http://en.wikipedia.org/wiki/Textile_%28markup_language%29">http://en.wikipedia.org/wiki/Textile_(markup_language)</a> for information on using any of these features. A few samples are included below, but the engine is capable of much more of that.</p> |
|
| 173 |
|
|
| 174 |
<h3><a name="6" class="wiki-page"></a>Font style</h3> |
|
| 175 |
|
|
| 176 |
<pre> |
|
| 177 |
* *bold* |
|
| 178 |
* _italic_ |
|
| 179 |
* _*bold italic*_ |
|
| 180 |
* +underline+ |
|
| 181 |
* -strike-through- |
|
| 182 |
</pre> |
|
| 183 |
|
|
| 184 |
<p>Display:</p> |
|
| 185 |
|
|
| 186 |
<ul> |
|
| 187 |
<li><strong>bold</strong></li> |
|
| 188 |
<li><em>italic</em></li> |
|
| 189 |
<li><em>*bold italic*</em></li> |
|
| 190 |
<li><ins>underline</ins></li> |
|
| 191 |
<li><del>strike-through</del></li> |
|
| 192 |
</ul> |
|
| 193 |
|
|
| 194 |
<h3><a name="7" class="wiki-page"></a>Inline images</h3> |
|
| 195 |
|
|
| 196 |
<ul> |
|
| 197 |
<li><strong>!image_url!</strong> displays an image located at image_url (textile syntax)</li> |
|
| 198 |
<li><strong>!>image_url!</strong> right floating image</li> |
|
| 199 |
<li>If you have an image attached to your wiki page, it can be displayed inline using its filename: <strong>!attached_image.png!</strong></li> |
|
| 200 |
</ul> |
|
| 201 |
|
|
| 202 |
<h3><a name="8" class="wiki-page"></a>Headings</h3> |
|
| 203 |
|
|
| 204 |
<pre> |
|
| 205 |
h1. Heading |
|
| 206 |
h2. Subheading |
|
| 207 |
h3. Subsubheading |
|
| 208 |
</pre> |
|
| 209 |
|
|
| 210 |
<p>Redmine assigns an anchor to each of those headings thus you can link to them with "#Heading", "#Subheading" and so forth.</p> |
|
| 211 |
|
|
| 212 |
|
|
| 213 |
<h3><a name="9" class="wiki-page"></a>Paragraphs</h3> |
|
| 214 |
|
|
| 215 |
<pre> |
|
| 216 |
p>. right aligned |
|
| 217 |
p=. centered |
|
| 218 |
</pre> |
|
| 219 |
|
|
| 220 |
<p style="text-align:center;">This is a centered paragraph.</p> |
|
| 221 |
|
|
| 222 |
|
|
| 223 |
<h3><a name="10" class="wiki-page"></a>Blockquotes</h3> |
|
| 224 |
|
|
| 225 |
<p>Start the paragraph with <strong>bq.</strong></p> |
|
| 226 |
|
|
| 227 |
<pre> |
|
| 228 |
bq. Rails is a full-stack framework for developing database-backed web applications according to the Model-View-Control pattern. |
|
| 229 |
To go live, all you need to add is a database and a web server. |
|
| 230 |
</pre> |
|
| 231 |
|
|
| 232 |
<p>Display:</p> |
|
| 233 |
|
|
| 234 |
<blockquote> |
|
| 235 |
<p>Rails is a full-stack framework for developing database-backed web applications according to the Model-View-Control pattern.<br />To go live, all you need to add is a database and a web server.</p> |
|
| 236 |
</blockquote> |
|
| 237 |
|
|
| 238 |
|
|
| 239 |
<h3><a name="11" class="wiki-page"></a>Table of content</h3> |
|
| 240 |
|
|
| 241 |
<pre> |
|
| 242 |
{{toc}} => left aligned toc
|
|
| 243 |
{{>toc}} => right aligned toc
|
|
| 244 |
</pre> |
|
| 245 |
|
|
| 246 |
<h2><a name="12" class="wiki-page"></a>Macros</h2> |
|
| 247 |
|
|
| 248 |
<p>Redmine has the following builtin macros:</p> |
|
| 249 |
|
|
| 250 |
<p><dl><dt><code>hello_world</code></dt><dd><p>Sample macro.</p></dd><dt><code>include</code></dt><dd><p>Include a wiki page. Example:</p> |
|
| 251 |
|
|
| 252 |
<pre><code>{{include(Foo)}}</code></pre></dd><dt><code>macro_list</code></dt><dd><p>Displays a list of all available macros, including description if available.</p></dd></dl></p>
|
|
| 253 |
|
|
| 254 |
|
|
| 255 |
<h2><a name="13" class="wiki-page"></a>Code highlighting</h2> |
|
| 256 |
|
|
| 257 |
<p>Default code highlightment relies on <a href="http://coderay.rubychan.de/" class="external">CodeRay</a>, a fast syntax highlighting library written completely in Ruby. It currently supports c, cpp, css, delphi, groovy, html, java, javascript, json, php, python, rhtml, ruby, scheme, sql, xml and yaml languages.</p> |
|
| 258 |
|
|
| 259 |
<p>You can highlight code in your wiki page using this syntax:</p> |
|
| 260 |
|
|
| 261 |
<pre> |
|
| 262 |
<pre><code class="ruby"> |
|
| 263 |
Place you code here. |
|
| 264 |
</code></pre> |
|
| 265 |
</pre> |
|
| 266 |
|
|
| 267 |
<p>Example:</p> |
|
| 268 |
|
|
| 269 |
<pre><code class="ruby syntaxhl"><span class="line-numbers"> 1</span> <span class="comment"># The Greeter class</span> |
|
| 270 |
<span class="line-numbers"> 2</span> <span class="reserved">class</span> <span class="class">Greeter</span> |
|
| 271 |
<span class="line-numbers"> 3</span> <span class="reserved">def</span> <span class="function">initialize</span>(name) |
|
| 272 |
<span class="line-numbers"> 4</span> <span class="instance-variable">@name</span> = name.capitalize |
|
| 273 |
<span class="line-numbers"> 5</span> <span class="reserved">end</span> |
|
| 274 |
<span class="line-numbers"> 6</span> |
|
| 275 |
<span class="line-numbers"> 7</span> <span class="reserved">def</span> <span class="function">salute</span> |
|
| 276 |
<span class="line-numbers"> 8</span> puts <span class="string"><span class="delimiter">"</span><span class="content">Hello </span><span class="inline"><span class="inline-delimiter">#{</span><span class="instance-variable">@name</span><span class="inline-delimiter">}</span></span><span class="content">!</span><span class="delimiter">"</span></span>
|
|
| 277 |
<span class="line-numbers"> 9</span> <span class="reserved">end</span> |
|
| 278 |
<span class="line-numbers"><strong>10</strong></span> <span class="reserved">end</span></code> |
|
| 279 |
</pre> |
|
| 280 |
</body> |
|
| 281 |
</html> |
|
| .svn/pristine/ba/ba4ceab8adc1717a11b6033a44e49578fa2b57be.svn-base | ||
|---|---|---|
| 1 |
<% if @membership.valid? %> |
|
| 2 |
$('#tab-content-memberships').html('<%= escape_javascript(render :partial => 'users/memberships') %>');
|
|
| 3 |
$("#member-<%= @membership.id %>").effect("highlight");
|
|
| 4 |
<% else %> |
|
| 5 |
alert('<%= raw(escape_javascript(l(:notice_failed_to_save_members, :errors => @membership.errors.full_messages.join(', ')))) %>');
|
|
| 6 |
<% end %> |
|
| .svn/pristine/ba/ba5d4789df17479bc2d584f1eb52a1d2b9bef079.svn-base | ||
|---|---|---|
| 1 |
<% if defined?(container) && container && container.saved_attachments %> |
|
| 2 |
<% container.saved_attachments.each_with_index do |attachment, i| %> |
|
| 3 |
<span class="icon icon-attachment" style="display:block; line-height:1.5em;"> |
|
| 4 |
<%= h(attachment.filename) %> (<%= number_to_human_size(attachment.filesize) %>) |
|
| 5 |
<%= hidden_field_tag "attachments[p#{i}][token]", "#{attachment.id}.#{attachment.digest}" %>
|
|
| 6 |
</span> |
|
| 7 |
<% end %> |
|
| 8 |
<% end %> |
|
| 9 |
<span id="attachments_fields"> |
|
| 10 |
<span> |
|
| 11 |
<%= file_field_tag 'attachments[1][file]', :id => nil, :class => 'file', |
|
| 12 |
:onchange => "checkFileSize(this, #{Setting.attachment_max_size.to_i.kilobytes}, '#{escape_javascript(l(:error_attachment_too_big, :max_size => number_to_human_size(Setting.attachment_max_size.to_i.kilobytes)))}');" -%>
|
|
| 13 |
<%= text_field_tag 'attachments[1][description]', '', :id => nil, :class => 'description', :maxlength => 255, :placeholder => l(:label_optional_description) %> |
|
| 14 |
<%= link_to_function(image_tag('delete.png'), 'removeFileField(this)', :title => (l(:button_delete))) %>
|
|
| 15 |
</span> |
|
| 16 |
</span> |
|
| 17 |
<span class="add_attachment"><%= link_to l(:label_add_another_file), '#', :onclick => 'addFileField(); return false;', :class => 'add_attachment' %> |
|
| 18 |
(<%= l(:label_max_size) %>: <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>)</span> |
|
| .svn/pristine/ba/ba82ac49cd0b917153196af22d8861848a66361d.svn-base | ||
|---|---|---|
| 1 |
$("#journal-<%= @journal.id %>-notes").hide();
|
|
| 2 |
|
|
| 3 |
if ($("form#journal-<%= @journal.id %>-form").length > 0) {
|
|
| 4 |
// journal edit form already loaded |
|
| 5 |
$("#journal-<%= @journal.id %>-form").show();
|
|
| 6 |
} else {
|
|
| 7 |
$("#journal-<%= @journal.id %>-notes").after('<%= escape_javascript(render :partial => 'notes_form') %>');
|
|
| 8 |
} |
|
| .svn/pristine/ba/bae5f43e87eacd9d199692aa578d1d741f75b33e.svn-base | ||
|---|---|---|
| 1 |
# Redmine - project management software |
|
| 2 |
# Copyright (C) 2006-2012 Jean-Philippe Lang |
|
| 3 |
# |
|
| 4 |
# This program is free software; you can redistribute it and/or |
|
| 5 |
# modify it under the terms of the GNU General Public License |
|
| 6 |
# as published by the Free Software Foundation; either version 2 |
|
| 7 |
# of the License, or (at your option) any later version. |
|
| 8 |
# |
|
| 9 |
# This program is distributed in the hope that it will be useful, |
|
| 10 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
| 11 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
| 12 |
# GNU General Public License for more details. |
|
| 13 |
# |
|
| 14 |
# You should have received a copy of the GNU General Public License |
|
| 15 |
# along with this program; if not, write to the Free Software |
|
| 16 |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
| 17 |
|
|
| 18 |
require File.expand_path('../../test_helper', __FILE__)
|
|
| 19 |
require 'trackers_controller' |
|
| 20 |
|
|
| 21 |
# Re-raise errors caught by the controller. |
|
| 22 |
class TrackersController; def rescue_action(e) raise e end; end |
|
| 23 |
|
|
| 24 |
class TrackersControllerTest < ActionController::TestCase |
|
| 25 |
fixtures :trackers, :projects, :projects_trackers, :users, :issues, :custom_fields |
|
| 26 |
|
|
| 27 |
def setup |
|
| 28 |
@controller = TrackersController.new |
|
| 29 |
@request = ActionController::TestRequest.new |
|
| 30 |
@response = ActionController::TestResponse.new |
|
| 31 |
User.current = nil |
|
| 32 |
@request.session[:user_id] = 1 # admin |
|
| 33 |
end |
|
| 34 |
|
|
| 35 |
def test_index |
|
| 36 |
get :index |
|
| 37 |
assert_response :success |
|
| 38 |
assert_template 'index' |
|
| 39 |
end |
|
| 40 |
|
|
| 41 |
def test_index_by_anonymous_should_redirect_to_login_form |
|
| 42 |
@request.session[:user_id] = nil |
|
| 43 |
get :index |
|
| 44 |
assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Ftrackers' |
|
| 45 |
end |
|
| 46 |
|
|
| 47 |
def test_index_by_user_should_respond_with_406 |
|
| 48 |
@request.session[:user_id] = 2 |
|
| 49 |
get :index |
|
| 50 |
assert_response 406 |
|
| 51 |
end |
|
| 52 |
|
|
| 53 |
def test_new |
|
| 54 |
get :new |
|
| 55 |
assert_response :success |
|
| 56 |
assert_template 'new' |
|
| 57 |
end |
|
| 58 |
|
|
| 59 |
def test_create |
|
| 60 |
assert_difference 'Tracker.count' do |
|
| 61 |
post :create, :tracker => { :name => 'New tracker', :project_ids => ['1', '', ''], :custom_field_ids => ['1', '6', ''] }
|
|
| 62 |
end |
|
| 63 |
assert_redirected_to :action => 'index' |
|
| 64 |
tracker = Tracker.first(:order => 'id DESC') |
|
| 65 |
assert_equal 'New tracker', tracker.name |
|
| 66 |
assert_equal [1], tracker.project_ids.sort |
|
| 67 |
assert_equal Tracker::CORE_FIELDS, tracker.core_fields |
|
| 68 |
assert_equal [1, 6], tracker.custom_field_ids.sort |
|
| 69 |
assert_equal 0, tracker.workflow_rules.count |
|
| 70 |
end |
|
| 71 |
|
|
| 72 |
def create_with_disabled_core_fields |
|
| 73 |
assert_difference 'Tracker.count' do |
|
| 74 |
post :create, :tracker => { :name => 'New tracker', :core_fields => ['assigned_to_id', 'fixed_version_id', ''] }
|
|
| 75 |
end |
|
| 76 |
assert_redirected_to :action => 'index' |
|
| 77 |
tracker = Tracker.first(:order => 'id DESC') |
|
| 78 |
assert_equal 'New tracker', tracker.name |
|
| 79 |
assert_equal %w(assigned_to_id fixed_version_id), tracker.core_fields |
|
| 80 |
end |
|
| 81 |
|
|
| 82 |
def test_create_new_with_workflow_copy |
|
| 83 |
assert_difference 'Tracker.count' do |
|
| 84 |
post :create, :tracker => { :name => 'New tracker' }, :copy_workflow_from => 1
|
|
| 85 |
end |
|
| 86 |
assert_redirected_to :action => 'index' |
|
| 87 |
tracker = Tracker.find_by_name('New tracker')
|
|
| 88 |
assert_equal 0, tracker.projects.count |
|
| 89 |
assert_equal Tracker.find(1).workflow_rules.count, tracker.workflow_rules.count |
|
| 90 |
end |
|
| 91 |
|
|
| 92 |
def test_create_with_failure |
|
| 93 |
assert_no_difference 'Tracker.count' do |
|
| 94 |
post :create, :tracker => { :name => '', :project_ids => ['1', '', ''], :custom_field_ids => ['1', '6', ''] }
|
|
| 95 |
end |
|
| 96 |
assert_response :success |
|
| 97 |
assert_template 'new' |
|
| 98 |
assert_error_tag :content => /name can't be blank/i |
|
| 99 |
end |
|
| 100 |
|
|
| 101 |
def test_edit |
|
| 102 |
Tracker.find(1).project_ids = [1, 3] |
|
| 103 |
|
|
| 104 |
get :edit, :id => 1 |
|
| 105 |
assert_response :success |
|
| 106 |
assert_template 'edit' |
|
| 107 |
|
|
| 108 |
assert_tag :input, :attributes => { :name => 'tracker[project_ids][]',
|
|
| 109 |
:value => '1', |
|
| 110 |
:checked => 'checked' } |
|
| 111 |
|
|
| 112 |
assert_tag :input, :attributes => { :name => 'tracker[project_ids][]',
|
|
| 113 |
:value => '2', |
|
| 114 |
:checked => nil } |
|
| 115 |
|
|
| 116 |
assert_tag :input, :attributes => { :name => 'tracker[project_ids][]',
|
|
| 117 |
:value => '', |
|
| 118 |
:type => 'hidden'} |
|
| 119 |
end |
|
| 120 |
|
|
| 121 |
def test_edit_should_check_core_fields |
|
| 122 |
tracker = Tracker.find(1) |
|
| 123 |
tracker.core_fields = %w(assigned_to_id fixed_version_id) |
|
| 124 |
tracker.save! |
|
| 125 |
|
|
| 126 |
get :edit, :id => 1 |
|
| 127 |
assert_response :success |
|
| 128 |
assert_template 'edit' |
|
| 129 |
|
|
| 130 |
assert_select 'input[name=?][value=assigned_to_id][checked=checked]', 'tracker[core_fields][]' |
|
| 131 |
assert_select 'input[name=?][value=fixed_version_id][checked=checked]', 'tracker[core_fields][]' |
|
| 132 |
|
|
| 133 |
assert_select 'input[name=?][value=category_id]', 'tracker[core_fields][]' |
|
| 134 |
assert_select 'input[name=?][value=category_id][checked=checked]', 'tracker[core_fields][]', 0 |
|
| 135 |
|
|
| 136 |
assert_select 'input[name=?][value=][type=hidden]', 'tracker[core_fields][]' |
|
| 137 |
end |
|
| 138 |
|
|
| 139 |
def test_update |
|
| 140 |
put :update, :id => 1, :tracker => { :name => 'Renamed',
|
|
| 141 |
:project_ids => ['1', '2', ''] } |
|
| 142 |
assert_redirected_to :action => 'index' |
|
| 143 |
assert_equal [1, 2], Tracker.find(1).project_ids.sort |
|
| 144 |
end |
|
| 145 |
|
|
| 146 |
def test_update_without_projects |
|
| 147 |
put :update, :id => 1, :tracker => { :name => 'Renamed',
|
|
| 148 |
:project_ids => [''] } |
|
| 149 |
assert_redirected_to :action => 'index' |
|
| 150 |
assert Tracker.find(1).project_ids.empty? |
|
| 151 |
end |
|
| 152 |
|
|
| 153 |
def test_update_without_core_fields |
|
| 154 |
put :update, :id => 1, :tracker => { :name => 'Renamed', :core_fields => [''] }
|
|
| 155 |
assert_redirected_to :action => 'index' |
|
| 156 |
assert Tracker.find(1).core_fields.empty? |
|
| 157 |
end |
|
| 158 |
|
|
| 159 |
def test_update_with_failure |
|
| 160 |
put :update, :id => 1, :tracker => { :name => '' }
|
|
| 161 |
assert_response :success |
|
| 162 |
assert_template 'edit' |
|
| 163 |
assert_error_tag :content => /name can't be blank/i |
|
| 164 |
end |
|
| 165 |
|
|
| 166 |
def test_move_lower |
|
| 167 |
tracker = Tracker.find_by_position(1) |
|
| 168 |
put :update, :id => 1, :tracker => { :move_to => 'lower' }
|
|
| 169 |
assert_equal 2, tracker.reload.position |
|
| 170 |
end |
|
| 171 |
|
|
| 172 |
def test_destroy |
|
| 173 |
tracker = Tracker.create!(:name => 'Destroyable') |
|
| 174 |
assert_difference 'Tracker.count', -1 do |
|
| 175 |
delete :destroy, :id => tracker.id |
|
| 176 |
end |
|
| 177 |
assert_redirected_to :action => 'index' |
|
| 178 |
assert_nil flash[:error] |
|
| 179 |
end |
|
| 180 |
|
|
| 181 |
def test_destroy_tracker_in_use |
|
| 182 |
assert_no_difference 'Tracker.count' do |
|
| 183 |
delete :destroy, :id => 1 |
|
| 184 |
end |
|
| 185 |
assert_redirected_to :action => 'index' |
|
| 186 |
assert_not_nil flash[:error] |
|
| 187 |
end |
|
| 188 |
|
|
| 189 |
def test_get_fields |
|
| 190 |
get :fields |
|
| 191 |
assert_response :success |
|
| 192 |
assert_template 'fields' |
|
| 193 |
|
|
| 194 |
assert_select 'form' do |
|
| 195 |
assert_select 'input[type=checkbox][name=?][value=assigned_to_id]', 'trackers[1][core_fields][]' |
|
| 196 |
assert_select 'input[type=checkbox][name=?][value=2]', 'trackers[1][custom_field_ids][]' |
|
| 197 |
|
|
| 198 |
assert_select 'input[type=hidden][name=?][value=]', 'trackers[1][core_fields][]' |
|
| 199 |
assert_select 'input[type=hidden][name=?][value=]', 'trackers[1][custom_field_ids][]' |
|
| 200 |
end |
|
| 201 |
end |
|
| 202 |
|
|
| 203 |
def test_post_fields |
|
| 204 |
post :fields, :trackers => {
|
|
| 205 |
'1' => {'core_fields' => ['assigned_to_id', 'due_date', ''], 'custom_field_ids' => ['1', '2']},
|
|
| 206 |
'2' => {'core_fields' => [''], 'custom_field_ids' => ['']}
|
|
| 207 |
} |
|
| 208 |
assert_redirected_to '/trackers/fields' |
|
| 209 |
|
|
| 210 |
tracker = Tracker.find(1) |
|
| 211 |
assert_equal %w(assigned_to_id due_date), tracker.core_fields |
|
| 212 |
assert_equal [1, 2], tracker.custom_field_ids.sort |
|
| 213 |
|
|
| 214 |
tracker = Tracker.find(2) |
|
| 215 |
assert_equal [], tracker.core_fields |
|
| 216 |
assert_equal [], tracker.custom_field_ids.sort |
|
| 217 |
end |
|
| 218 |
end |
|
Also available in: Unified diff