OSDN Git Service

Adds missing native eol properties.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 20 Sep 2009 14:06:57 +0000 (14:06 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 20 Sep 2009 14:06:57 +0000 (14:06 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2895 e93f8b46-1217-0410-a6f0-8f06a7374b81

51 files changed:
app/models/principal.rb
app/views/my/blocks/_issueswatched.rhtml
app/views/queries/new.rhtml
app/views/repositories/stats.rhtml
app/views/search/index.rhtml
app/views/timelog/details.rhtml
app/views/timelog/edit.rhtml
config/locales/bs.yml
config/locales/el.yml
test/fixtures/attachments.yml
test/fixtures/auth_sources.yml
test/fixtures/boards.yml
test/fixtures/changes.yml
test/fixtures/changesets.yml
test/fixtures/custom_fields.yml
test/fixtures/custom_fields_projects.yml
test/fixtures/custom_fields_trackers.yml
test/fixtures/custom_values.yml
test/fixtures/documents.yml
test/fixtures/enumerations.yml
test/fixtures/issue_categories.yml
test/fixtures/issue_statuses.yml
test/fixtures/issues.yml
test/fixtures/journal_details.yml
test/fixtures/journals.yml
test/fixtures/members.yml
test/fixtures/messages.yml
test/fixtures/news.yml
test/fixtures/projects.yml
test/fixtures/queries.yml
test/fixtures/repositories.yml
test/fixtures/roles.yml
test/fixtures/time_entries.yml
test/fixtures/tokens.yml
test/fixtures/trackers.yml
test/fixtures/users.yml
test/fixtures/versions.yml
test/fixtures/wiki_content_versions.yml
test/fixtures/wiki_contents.yml
test/fixtures/wiki_pages.yml
test/fixtures/wikis.yml
test/fixtures/workflows.yml
test/functional/custom_fields_controller_test.rb
test/functional/projects_controller_test.rb
test/unit/helpers/sort_helper_test.rb
test/unit/member_test.rb
test/unit/project_test.rb
test/unit/repository_test.rb
test/unit/user_test.rb
test/unit/wiki_page_test.rb
test/unit/wiki_test.rb

index a4a946d..f83cdd0 100644 (file)
@@ -1,38 +1,38 @@
-# Redmine - project management software\r
-# Copyright (C) 2006-2009  Jean-Philippe Lang\r
-#\r
-# This program is free software; you can redistribute it and/or\r
-# modify it under the terms of the GNU General Public License\r
-# as published by the Free Software Foundation; either version 2\r
-# of the License, or (at your option) any later version.\r
-# \r
-# This program is distributed in the hope that it will be useful,\r
-# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-# GNU General Public License for more details.\r
-# \r
-# You should have received a copy of the GNU General Public License\r
-# along with this program; if not, write to the Free Software\r
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
-\r
-class Principal < ActiveRecord::Base\r
-  set_table_name 'users'\r
-\r
-  has_many :members, :foreign_key => 'user_id', :dependent => :destroy\r
-  has_many :memberships, :class_name => 'Member', :foreign_key => 'user_id', :include => [ :project, :roles ], :conditions => "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}", :order => "#{Project.table_name}.name"\r
-  has_many :projects, :through => :memberships\r
-\r
-  # Groups and active users\r
-  named_scope :active, :conditions => "#{Principal.table_name}.type='Group' OR (#{Principal.table_name}.type='User' AND #{Principal.table_name}.status = 1)"\r
-  \r
-  named_scope :like, lambda {|q| \r
-    s = "%#{q.to_s.strip.downcase}%"\r
-    {:conditions => ["LOWER(login) LIKE ? OR LOWER(firstname) LIKE ? OR LOWER(lastname) LIKE ?", s, s, s],\r
-     :order => 'type, login, lastname, firstname'\r
-    }\r
-  }\r
-  \r
-  def <=>(principal)\r
-    self.to_s.downcase <=> principal.to_s.downcase\r
-  end\r
-end\r
+# Redmine - project management software
+# Copyright (C) 2006-2009  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+class Principal < ActiveRecord::Base
+  set_table_name 'users'
+
+  has_many :members, :foreign_key => 'user_id', :dependent => :destroy
+  has_many :memberships, :class_name => 'Member', :foreign_key => 'user_id', :include => [ :project, :roles ], :conditions => "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}", :order => "#{Project.table_name}.name"
+  has_many :projects, :through => :memberships
+
+  # Groups and active users
+  named_scope :active, :conditions => "#{Principal.table_name}.type='Group' OR (#{Principal.table_name}.type='User' AND #{Principal.table_name}.status = 1)"
+  
+  named_scope :like, lambda {|q| 
+    s = "%#{q.to_s.strip.downcase}%"
+    {:conditions => ["LOWER(login) LIKE ? OR LOWER(firstname) LIKE ? OR LOWER(lastname) LIKE ?", s, s, s],
+     :order => 'type, login, lastname, firstname'
+    }
+  }
+  
+  def <=>(principal)
+    self.to_s.downcase <=> principal.to_s.downcase
+  end
+end
index 37f96f1..04f326c 100644 (file)
@@ -1,16 +1,16 @@
-<h3><%=l(:label_watched_issues)%> (<%= Issue.visible.count(:include => :watchers,\r
-                                                                                                                                                                                                                                        :conditions => ["#{Watcher.table_name}.user_id = ?", user.id]) %>)</h3>\r
-<% watched_issues = Issue.visible.find(:all, \r
-                               :include => [:status, :project, :tracker, :watchers],\r
-                               :limit => 10, \r
-                               :conditions => ["#{Watcher.table_name}.user_id = ?", user.id],\r
-                               :order => "#{Issue.table_name}.updated_on DESC") %>\r
-\r
-<%= render :partial => 'issues/list_simple', :locals => { :issues => watched_issues } %>\r
-<% if watched_issues.length > 0 %>\r
-<p class="small"><%= link_to l(:label_issue_view_all), :controller => 'issues',\r
-                                                                                                                                                                                                                        :action => 'index',\r
-                                                                                                                                                                                                                        :set_filter => 1,\r
-                                                                                                                                                                                                                        :watcher_id => 'me',\r
-                                                                                                                                                                                                                        :sort => 'updated_on:desc' %></p>\r
-<% end %>\r
+<h3><%=l(:label_watched_issues)%> (<%= Issue.visible.count(:include => :watchers,
+                                                                                                                                                                                                                                        :conditions => ["#{Watcher.table_name}.user_id = ?", user.id]) %>)</h3>
+<% watched_issues = Issue.visible.find(:all, 
+                               :include => [:status, :project, :tracker, :watchers],
+                               :limit => 10, 
+                               :conditions => ["#{Watcher.table_name}.user_id = ?", user.id],
+                               :order => "#{Issue.table_name}.updated_on DESC") %>
+
+<%= render :partial => 'issues/list_simple', :locals => { :issues => watched_issues } %>
+<% if watched_issues.length > 0 %>
+<p class="small"><%= link_to l(:label_issue_view_all), :controller => 'issues',
+                                                                                                                                                                                                                        :action => 'index',
+                                                                                                                                                                                                                        :set_filter => 1,
+                                                                                                                                                                                                                        :watcher_id => 'me',
+                                                                                                                                                                                                                        :sort => 'updated_on:desc' %></p>
+<% end %>
index 631fd6c..a980d04 100644 (file)
@@ -1,6 +1,6 @@
-<h2><%= l(:label_query_new) %></h2>\r
-\r
-<% form_tag({:action => 'new', :project_id => @query.project}, :onsubmit => 'selectAllOptions("selected_columns");') do %>\r
-  <%= render :partial => 'form', :locals => {:query => @query} %>\r
-  <%= submit_tag l(:button_save) %>\r
-<% end %>\r
+<h2><%= l(:label_query_new) %></h2>
+
+<% form_tag({:action => 'new', :project_id => @query.project}, :onsubmit => 'selectAllOptions("selected_columns");') do %>
+  <%= render :partial => 'form', :locals => {:query => @query} %>
+  <%= submit_tag l(:button_save) %>
+<% end %>
index 1e61757..e5e7375 100644 (file)
@@ -1,12 +1,12 @@
-<h2><%= l(:label_statistics) %></h2>\r
-\r
-<p>\r
-<%= tag("embed", :width => 800, :height => 300, :type => "image/svg+xml", :src => url_for(:controller => 'repositories', :action => 'graph', :id => @project, :graph => "commits_per_month")) %>\r
-</p>\r
-<p>\r
-<%= tag("embed", :width => 800, :height => 400, :type => "image/svg+xml", :src => url_for(:controller => 'repositories', :action => 'graph', :id => @project, :graph => "commits_per_author")) %>\r
-</p>\r
-\r
-<p><%= link_to l(:button_back), :action => 'show', :id => @project %></p>\r
-\r
-<% html_title(l(:label_repository), l(:label_statistics)) -%>\r
+<h2><%= l(:label_statistics) %></h2>
+
+<p>
+<%= tag("embed", :width => 800, :height => 300, :type => "image/svg+xml", :src => url_for(:controller => 'repositories', :action => 'graph', :id => @project, :graph => "commits_per_month")) %>
+</p>
+<p>
+<%= tag("embed", :width => 800, :height => 400, :type => "image/svg+xml", :src => url_for(:controller => 'repositories', :action => 'graph', :id => @project, :graph => "commits_per_author")) %>
+</p>
+
+<p><%= link_to l(:button_back), :action => 'show', :id => @project %></p>
+
+<% html_title(l(:label_repository), l(:label_statistics)) -%>
index 1289372..348421d 100644 (file)
@@ -1,51 +1,51 @@
-<h2><%= l(:label_search) %></h2>\r
-\r
-<div class="box">\r
-<% form_tag({}, :method => :get) do %>\r
-<p><%= text_field_tag 'q', @question, :size => 60, :id => 'search-input' %>\r
-<%= javascript_tag "Field.focus('search-input')" %>\r
-<%= project_select_tag %>\r
-<label><%= check_box_tag 'all_words', 1, @all_words %> <%= l(:label_all_words) %></label>\r
-<label><%= check_box_tag 'titles_only', 1, @titles_only %> <%= l(:label_search_titles_only) %></label>\r
-</p>\r
-<p>\r
-<% @object_types.each do |t| %>\r
-<label><%= check_box_tag t, 1, @scope.include?(t) %> <%= type_label(t) %></label>\r
-<% end %>\r
-</p>\r
-\r
-<p><%= submit_tag l(:button_submit), :name => 'submit' %></p>\r
-<% end %>\r
-</div>\r
-\r
-<% if @results %>\r
-    <div id="search-results-counts">\r
-    <%= render_results_by_type(@results_by_type) unless @scope.size == 1 %>\r
-    </div>\r
-    \r
-    <h3><%= l(:label_result_plural) %> (<%= @results_by_type.values.sum %>)</h3>\r
-    <dl id="search-results">\r
-      <% @results.each do |e| %>\r
-        <dt class="<%= e.event_type %>"><%= content_tag('span', h(e.project), :class => 'project') unless @project == e.project %> <%= link_to highlight_tokens(truncate(e.event_title, :length => 255), @tokens), e.event_url %></dt>\r
-        <dd><span class="description"><%= highlight_tokens(e.event_description, @tokens) %></span>\r
-        <span class="author"><%= format_time(e.event_datetime) %></span></dd>\r
-      <% end %>\r
-    </dl>\r
-<% end %>\r
-\r
-<p><center>\r
-<% if @pagination_previous_date %>\r
-<%= link_to_remote ('&#171; ' + l(:label_previous)),\r
-                   {:update => :content,\r
-                    :url => params.merge(:previous => 1, :offset => @pagination_previous_date.strftime("%Y%m%d%H%M%S"))\r
-                   }, :href => url_for(params.merge(:previous => 1, :offset => @pagination_previous_date.strftime("%Y%m%d%H%M%S"))) %>&nbsp;\r
-<% end %>\r
-<% if @pagination_next_date %>\r
-<%= link_to_remote (l(:label_next) + ' &#187;'),\r
-                   {:update => :content,\r
-                    :url => params.merge(:previous => nil, :offset => @pagination_next_date.strftime("%Y%m%d%H%M%S"))\r
-                   }, :href => url_for(params.merge(:previous => nil, :offset => @pagination_next_date.strftime("%Y%m%d%H%M%S"))) %>\r
-<% end %>\r
-</center></p>\r
-\r
-<% html_title(l(:label_search)) -%>\r
+<h2><%= l(:label_search) %></h2>
+
+<div class="box">
+<% form_tag({}, :method => :get) do %>
+<p><%= text_field_tag 'q', @question, :size => 60, :id => 'search-input' %>
+<%= javascript_tag "Field.focus('search-input')" %>
+<%= project_select_tag %>
+<label><%= check_box_tag 'all_words', 1, @all_words %> <%= l(:label_all_words) %></label>
+<label><%= check_box_tag 'titles_only', 1, @titles_only %> <%= l(:label_search_titles_only) %></label>
+</p>
+<p>
+<% @object_types.each do |t| %>
+<label><%= check_box_tag t, 1, @scope.include?(t) %> <%= type_label(t) %></label>
+<% end %>
+</p>
+
+<p><%= submit_tag l(:button_submit), :name => 'submit' %></p>
+<% end %>
+</div>
+
+<% if @results %>
+    <div id="search-results-counts">
+    <%= render_results_by_type(@results_by_type) unless @scope.size == 1 %>
+    </div>
+    
+    <h3><%= l(:label_result_plural) %> (<%= @results_by_type.values.sum %>)</h3>
+    <dl id="search-results">
+      <% @results.each do |e| %>
+        <dt class="<%= e.event_type %>"><%= content_tag('span', h(e.project), :class => 'project') unless @project == e.project %> <%= link_to highlight_tokens(truncate(e.event_title, :length => 255), @tokens), e.event_url %></dt>
+        <dd><span class="description"><%= highlight_tokens(e.event_description, @tokens) %></span>
+        <span class="author"><%= format_time(e.event_datetime) %></span></dd>
+      <% end %>
+    </dl>
+<% end %>
+
+<p><center>
+<% if @pagination_previous_date %>
+<%= link_to_remote ('&#171; ' + l(:label_previous)),
+                   {:update => :content,
+                    :url => params.merge(:previous => 1, :offset => @pagination_previous_date.strftime("%Y%m%d%H%M%S"))
+                   }, :href => url_for(params.merge(:previous => 1, :offset => @pagination_previous_date.strftime("%Y%m%d%H%M%S"))) %>&nbsp;
+<% end %>
+<% if @pagination_next_date %>
+<%= link_to_remote (l(:label_next) + ' &#187;'),
+                   {:update => :content,
+                    :url => params.merge(:previous => nil, :offset => @pagination_next_date.strftime("%Y%m%d%H%M%S"))
+                   }, :href => url_for(params.merge(:previous => nil, :offset => @pagination_next_date.strftime("%Y%m%d%H%M%S"))) %>
+<% end %>
+</center></p>
+
+<% html_title(l(:label_search)) -%>
index eecfec2..a17c06e 100644 (file)
@@ -1,35 +1,35 @@
-<div class="contextual">\r
-<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %>\r
-</div>\r
-\r
-<%= render_timelog_breadcrumb %>\r
-\r
-<h2><%= l(:label_spent_time) %></h2>\r
-\r
-<% form_remote_tag( :url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content' ) do %>\r
-<%# TOOD: remove the project_id and issue_id hidden fields, that information is\r
-already in the URI %>\r
-<%= hidden_field_tag('project_id', params[:project_id]) if @project %>\r
-<%= hidden_field_tag 'issue_id', params[:issue_id] if @issue %>\r
-<%= render :partial => 'date_range' %>\r
-<% end %>\r
-\r
-<div class="total-hours">\r
-<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p>\r
-</div>\r
-\r
-<% unless @entries.empty? %>\r
-<%= render :partial => 'list', :locals => { :entries => @entries }%>\r
-<p class="pagination"><%= pagination_links_full @entry_pages, @entry_count %></p>\r
-\r
-<% other_formats_links do |f| %>\r
-       <%= f.link_to 'Atom', :url => params.merge({:issue_id => @issue, :key => User.current.rss_key}) %>\r
-       <%= f.link_to 'CSV', :url => params %>\r
-<% end %>\r
-<% end %>\r
-\r
-<% html_title l(:label_spent_time), l(:label_details) %>\r
-\r
-<% content_for :header_tags do %>\r
-    <%= auto_discovery_link_tag(:atom, {:issue_id => @issue, :format => 'atom', :key => User.current.rss_key}, :title => l(:label_spent_time)) %>\r
-<% end %>\r
+<div class="contextual">
+<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %>
+</div>
+
+<%= render_timelog_breadcrumb %>
+
+<h2><%= l(:label_spent_time) %></h2>
+
+<% form_remote_tag( :url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content' ) do %>
+<%# TOOD: remove the project_id and issue_id hidden fields, that information is
+already in the URI %>
+<%= hidden_field_tag('project_id', params[:project_id]) if @project %>
+<%= hidden_field_tag 'issue_id', params[:issue_id] if @issue %>
+<%= render :partial => 'date_range' %>
+<% end %>
+
+<div class="total-hours">
+<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p>
+</div>
+
+<% unless @entries.empty? %>
+<%= render :partial => 'list', :locals => { :entries => @entries }%>
+<p class="pagination"><%= pagination_links_full @entry_pages, @entry_count %></p>
+
+<% other_formats_links do |f| %>
+       <%= f.link_to 'Atom', :url => params.merge({:issue_id => @issue, :key => User.current.rss_key}) %>
+       <%= f.link_to 'CSV', :url => params %>
+<% end %>
+<% end %>
+
+<% html_title l(:label_spent_time), l(:label_details) %>
+
+<% content_for :header_tags do %>
+    <%= auto_discovery_link_tag(:atom, {:issue_id => @issue, :format => 'atom', :key => User.current.rss_key}, :title => l(:label_spent_time)) %>
+<% end %>
index 085f3d8..a0ff860 100644 (file)
@@ -1,21 +1,21 @@
-<h2><%= l(:label_spent_time) %></h2>\r
-\r
-<% labelled_tabular_form_for :time_entry, @time_entry, :url => {:action => 'edit', :id => @time_entry, :project_id => @time_entry.project} do |f| %>\r
-<%= error_messages_for 'time_entry' %>\r
-<%= back_url_hidden_field_tag %>\r
-\r
-<div class="box">\r
-<p><%= f.text_field :issue_id, :size => 6 %> <em><%= h("#{@time_entry.issue.tracker.name} ##{@time_entry.issue.id}: #{@time_entry.issue.subject}") if @time_entry.issue %></em></p>\r
-<p><%= f.text_field :spent_on, :size => 10, :required => true %><%= calendar_for('time_entry_spent_on') %></p>\r
-<p><%= f.text_field :hours, :size => 6, :required => true %></p>\r
-<p><%= f.text_field :comments, :size => 100 %></p>\r
-<p><%= f.select :activity_id, activity_collection_for_select_options, :required => true %></p>\r
-<% @time_entry.custom_field_values.each do |value| %>\r
-       <p><%= custom_field_tag_with_label :time_entry, value %></p>\r
-<% end %>\r
-<%= call_hook(:view_timelog_edit_form_bottom, { :time_entry => @time_entry, :form => f }) %>\r
-</div>\r
-\r
-<%= submit_tag l(:button_save) %>\r
-\r
-<% end %>\r
+<h2><%= l(:label_spent_time) %></h2>
+
+<% labelled_tabular_form_for :time_entry, @time_entry, :url => {:action => 'edit', :id => @time_entry, :project_id => @time_entry.project} do |f| %>
+<%= error_messages_for 'time_entry' %>
+<%= back_url_hidden_field_tag %>
+
+<div class="box">
+<p><%= f.text_field :issue_id, :size => 6 %> <em><%= h("#{@time_entry.issue.tracker.name} ##{@time_entry.issue.id}: #{@time_entry.issue.subject}") if @time_entry.issue %></em></p>
+<p><%= f.text_field :spent_on, :size => 10, :required => true %><%= calendar_for('time_entry_spent_on') %></p>
+<p><%= f.text_field :hours, :size => 6, :required => true %></p>
+<p><%= f.text_field :comments, :size => 100 %></p>
+<p><%= f.select :activity_id, activity_collection_for_select_options, :required => true %></p>
+<% @time_entry.custom_field_values.each do |value| %>
+       <p><%= custom_field_tag_with_label :time_entry, value %></p>
+<% end %>
+<%= call_hook(:view_timelog_edit_form_bottom, { :time_entry => @time_entry, :form => f }) %>
+</div>
+
+<%= submit_tag l(:button_save) %>
+
+<% end %>
index 0a5536b..9526087 100644 (file)
@@ -821,20 +821,20 @@ bs:
   label_descending: Opadajuće
   label_greater_or_equal: ">="
   label_less_or_equal: <=
-  text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do?\r
-  text_wiki_page_reassign_children: Reassign child pages to this parent page\r
-  text_wiki_page_nullify_children: Keep child pages as root pages\r
-  text_wiki_page_destroy_children: Delete child pages and all their descendants\r
-  setting_password_min_length: Minimum password length\r
-  field_group_by: Group results by\r
-  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"\r
-  label_wiki_content_added: Wiki page added\r
-  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"\r
-  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.\r
-  label_wiki_content_updated: Wiki page updated\r
-  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.\r
-  permission_add_project: Create project\r
-  setting_new_project_user_role_id: Role given to a non-admin user who creates a project\r
+  text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do?
+  text_wiki_page_reassign_children: Reassign child pages to this parent page
+  text_wiki_page_nullify_children: Keep child pages as root pages
+  text_wiki_page_destroy_children: Delete child pages and all their descendants
+  setting_password_min_length: Minimum password length
+  field_group_by: Group results by
+  mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
+  label_wiki_content_added: Wiki page added
+  mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
+  mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
+  label_wiki_content_updated: Wiki page updated
+  mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
+  permission_add_project: Create project
+  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
   label_view_all_revisions: View all revisions
   label_tag: Tag
   label_branch: Branch
@@ -843,7 +843,7 @@ bs:
   text_journal_changed: "{{label}} changed from {{old}} to {{new}}"
   text_journal_set_to: "{{label}} set to {{value}}"
   text_journal_deleted: "{{label}} deleted"
-  label_group_plural: Groups\r
-  label_group: Group\r
-  label_group_new: New group\r
-  label_time_entry_plural: Spent time\r
+  label_group_plural: Groups
+  label_group: Group
+  label_group_new: New group
+  label_time_entry_plural: Spent time
index 479b440..ae7a663 100644 (file)
@@ -825,7 +825,7 @@ el:
   text_journal_changed: "{{label}} changed from {{old}} to {{new}}"
   text_journal_set_to: "{{label}} set to {{value}}"
   text_journal_deleted: "{{label}} deleted"
-  label_group_plural: Groups\r
-  label_group: Group\r
-  label_group_new: New group\r
-  label_time_entry_plural: Spent time\r
+  label_group_plural: Groups
+  label_group: Group
+  label_group_new: New group
+  label_time_entry_plural: Spent time
index 94c118f..62d5b38 100644 (file)
---- \r
-attachments_001: \r
-  created_on: 2006-07-19 21:07:27 +02:00\r
-  downloads: 0\r
-  content_type: text/plain\r
-  disk_filename: 060719210727_error281.txt\r
-  container_id: 3\r
-  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2\r
-  id: 1\r
-  container_type: Issue\r
-  filesize: 28\r
-  filename: error281.txt\r
-  author_id: 2\r
-attachments_002: \r
-  created_on: 2006-07-19 21:07:27 +02:00\r
-  downloads: 0\r
-  content_type: text/plain\r
-  disk_filename: 060719210727_document.txt\r
-  container_id: 1\r
-  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2\r
-  id: 2\r
-  container_type: Document\r
-  filesize: 28\r
-  filename: document.txt\r
-  author_id: 2\r
-attachments_003: \r
-  created_on: 2006-07-19 21:07:27 +02:00\r
-  downloads: 0\r
-  content_type: image/gif\r
-  disk_filename: 060719210727_logo.gif\r
-  container_id: 4\r
-  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2\r
-  id: 3\r
-  container_type: WikiPage\r
-  filesize: 280\r
-  filename: logo.gif\r
-  description: This is a logo\r
-  author_id: 2\r
-attachments_004: \r
-  created_on: 2006-07-19 21:07:27 +02:00\r
-  container_type: Issue\r
-  container_id: 3\r
-  downloads: 0\r
-  disk_filename: 060719210727_source.rb\r
-  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2\r
-  id: 4\r
-  filesize: 153\r
-  filename: source.rb\r
-  author_id: 2\r
-  description: This is a Ruby source file\r
-  content_type: application/x-ruby\r
-attachments_005: \r
-  created_on: 2006-07-19 21:07:27 +02:00\r
-  container_type: Issue\r
-  container_id: 3\r
-  downloads: 0\r
-  disk_filename: 060719210727_changeset.diff\r
-  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2\r
-  id: 5\r
-  filesize: 687\r
-  filename: changeset.diff\r
-  author_id: 2\r
-  content_type: text/x-diff\r
-attachments_006: \r
-  created_on: 2006-07-19 21:07:27 +02:00\r
-  container_type: Issue\r
-  container_id: 3\r
-  downloads: 0\r
-  disk_filename: 060719210727_archive.zip\r
-  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2\r
-  id: 6\r
-  filesize: 157\r
-  filename: archive.zip\r
-  author_id: 2\r
-  content_type: application/octet-stream\r
-attachments_007: \r
-  created_on: 2006-07-19 21:07:27 +02:00\r
-  container_type: Issue\r
-  container_id: 4\r
-  downloads: 0\r
-  disk_filename: 060719210727_archive.zip\r
-  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2\r
-  id: 7\r
-  filesize: 157\r
-  filename: archive.zip\r
-  author_id: 1\r
-  content_type: application/octet-stream\r
-attachments_008: \r
-  created_on: 2006-07-19 21:07:27 +02:00\r
-  container_type: Project\r
-  container_id: 1\r
-  downloads: 0\r
-  disk_filename: 060719210727_project_file.zip\r
-  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2\r
-  id: 8\r
-  filesize: 320\r
-  filename: project_file.zip\r
-  author_id: 2\r
-  content_type: application/octet-stream\r
-attachments_009: \r
-  created_on: 2006-07-19 21:07:27 +02:00\r
-  container_type: Version\r
-  container_id: 1\r
-  downloads: 0\r
-  disk_filename: 060719210727_version_file.zip\r
-  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2\r
-  id: 9\r
-  filesize: 452\r
-  filename: version_file.zip\r
-  author_id: 2\r
-  content_type: application/octet-stream\r
-attachments_010: \r
-  created_on: 2006-07-19 21:07:27 +02:00\r
-  container_type: Issue\r
-  container_id: 2\r
-  downloads: 0\r
-  disk_filename: 060719210727_picture.jpg\r
-  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2\r
-  id: 10\r
-  filesize: 452\r
-  filename: picture.jpg\r
-  author_id: 2\r
-  content_type: image/jpeg\r
+--- 
+attachments_001: 
+  created_on: 2006-07-19 21:07:27 +02:00
+  downloads: 0
+  content_type: text/plain
+  disk_filename: 060719210727_error281.txt
+  container_id: 3
+  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
+  id: 1
+  container_type: Issue
+  filesize: 28
+  filename: error281.txt
+  author_id: 2
+attachments_002: 
+  created_on: 2006-07-19 21:07:27 +02:00
+  downloads: 0
+  content_type: text/plain
+  disk_filename: 060719210727_document.txt
+  container_id: 1
+  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
+  id: 2
+  container_type: Document
+  filesize: 28
+  filename: document.txt
+  author_id: 2
+attachments_003: 
+  created_on: 2006-07-19 21:07:27 +02:00
+  downloads: 0
+  content_type: image/gif
+  disk_filename: 060719210727_logo.gif
+  container_id: 4
+  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
+  id: 3
+  container_type: WikiPage
+  filesize: 280
+  filename: logo.gif
+  description: This is a logo
+  author_id: 2
+attachments_004: 
+  created_on: 2006-07-19 21:07:27 +02:00
+  container_type: Issue
+  container_id: 3
+  downloads: 0
+  disk_filename: 060719210727_source.rb
+  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
+  id: 4
+  filesize: 153
+  filename: source.rb
+  author_id: 2
+  description: This is a Ruby source file
+  content_type: application/x-ruby
+attachments_005: 
+  created_on: 2006-07-19 21:07:27 +02:00
+  container_type: Issue
+  container_id: 3
+  downloads: 0
+  disk_filename: 060719210727_changeset.diff
+  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
+  id: 5
+  filesize: 687
+  filename: changeset.diff
+  author_id: 2
+  content_type: text/x-diff
+attachments_006: 
+  created_on: 2006-07-19 21:07:27 +02:00
+  container_type: Issue
+  container_id: 3
+  downloads: 0
+  disk_filename: 060719210727_archive.zip
+  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
+  id: 6
+  filesize: 157
+  filename: archive.zip
+  author_id: 2
+  content_type: application/octet-stream
+attachments_007: 
+  created_on: 2006-07-19 21:07:27 +02:00
+  container_type: Issue
+  container_id: 4
+  downloads: 0
+  disk_filename: 060719210727_archive.zip
+  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
+  id: 7
+  filesize: 157
+  filename: archive.zip
+  author_id: 1
+  content_type: application/octet-stream
+attachments_008: 
+  created_on: 2006-07-19 21:07:27 +02:00
+  container_type: Project
+  container_id: 1
+  downloads: 0
+  disk_filename: 060719210727_project_file.zip
+  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
+  id: 8
+  filesize: 320
+  filename: project_file.zip
+  author_id: 2
+  content_type: application/octet-stream
+attachments_009: 
+  created_on: 2006-07-19 21:07:27 +02:00
+  container_type: Version
+  container_id: 1
+  downloads: 0
+  disk_filename: 060719210727_version_file.zip
+  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
+  id: 9
+  filesize: 452
+  filename: version_file.zip
+  author_id: 2
+  content_type: application/octet-stream
+attachments_010: 
+  created_on: 2006-07-19 21:07:27 +02:00
+  container_type: Issue
+  container_id: 2
+  downloads: 0
+  disk_filename: 060719210727_picture.jpg
+  digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
+  id: 10
+  filesize: 452
+  filename: picture.jpg
+  author_id: 2
+  content_type: image/jpeg
   
\ No newline at end of file
index a4795c2..0d61358 100644 (file)
@@ -1,19 +1,19 @@
---- \r
-boards_001: \r
-  name: Help\r
-  project_id: 1\r
-  topics_count: 2\r
-  id: 1\r
-  description: Help board\r
-  position: 1\r
-  last_message_id: 6\r
-  messages_count: 6\r
-boards_002: \r
-  name: Discussion\r
-  project_id: 1\r
-  topics_count: 0\r
-  id: 2\r
-  description: Discussion board\r
-  position: 2\r
-  last_message_id: \r
-  messages_count: 0\r
+--- 
+boards_001: 
+  name: Help
+  project_id: 1
+  topics_count: 2
+  id: 1
+  description: Help board
+  position: 1
+  last_message_id: 6
+  messages_count: 6
+boards_002: 
+  name: Discussion
+  project_id: 1
+  topics_count: 0
+  id: 2
+  description: Discussion board
+  position: 2
+  last_message_id: 
+  messages_count: 0
index 56d9362..ae606f2 100644 (file)
@@ -1,23 +1,23 @@
---- \r
-changes_001: \r
-  id: 1\r
-  changeset_id: 100\r
-  action: A\r
-  path: /test/some/path/in/the/repo\r
-  from_path:\r
-  from_revision:\r
-changes_002: \r
-  id: 2\r
-  changeset_id: 100\r
-  action: A\r
-  path: /test/some/path/elsewhere/in/the/repo\r
-  from_path:\r
-  from_revision:\r
-changes_003: \r
-  id: 3\r
-  changeset_id: 101\r
-  action: M\r
-  path: /test/some/path/in/the/repo\r
-  from_path:\r
-  from_revision:\r
+--- 
+changes_001: 
+  id: 1
+  changeset_id: 100
+  action: A
+  path: /test/some/path/in/the/repo
+  from_path:
+  from_revision:
+changes_002: 
+  id: 2
+  changeset_id: 100
+  action: A
+  path: /test/some/path/elsewhere/in/the/repo
+  from_path:
+  from_revision:
+changes_003: 
+  id: 3
+  changeset_id: 101
+  action: M
+  path: /test/some/path/in/the/repo
+  from_path:
+  from_revision:
   
\ No newline at end of file
index 6c13d37..3eda7c5 100644 (file)
@@ -1,84 +1,84 @@
---- \r
-changesets_001: \r
-  commit_date: 2007-04-11\r
-  committed_on: 2007-04-11 15:14:44 +02:00\r
-  revision: 1\r
-  id: 100\r
-  comments: My very first commit\r
-  repository_id: 10\r
-  committer: dlopper\r
-  user_id: 3\r
-changesets_002: \r
-  commit_date: 2007-04-12\r
-  committed_on: 2007-04-12 15:14:44 +02:00\r
-  revision: 2\r
-  id: 101\r
-  comments: 'This commit fixes #1, #2 and references #1 & #3'\r
-  repository_id: 10\r
-  committer: dlopper\r
-  user_id: 3\r
-changesets_003: \r
-  commit_date: 2007-04-12\r
-  committed_on: 2007-04-12 15:14:44 +02:00\r
-  revision: 3\r
-  id: 102\r
-  comments: |-\r
-    A commit with wrong issue ids\r
-    IssueID 666 3\r
-  repository_id: 10\r
-  committer: dlopper\r
-  user_id: 3\r
-changesets_004: \r
-  commit_date: 2007-04-12\r
-  committed_on: 2007-04-12 15:14:44 +02:00\r
-  revision: 4\r
-  id: 103\r
-  comments: |-\r
-    A commit with an issue id of an other project\r
-    IssueID 4 2\r
-  repository_id: 10\r
-  committer: dlopper\r
-  user_id: 3\r
-changesets_005: \r
-  commit_date: "2007-09-10"\r
-  comments: Modified one file in the folder.\r
-  committed_on: 2007-09-10 19:01:08\r
-  revision: "5"\r
-  id: 104\r
-  scmid:\r
-  user_id: 3\r
-  repository_id: 10\r
-  committer: dlopper\r
-changesets_006: \r
-  commit_date: "2007-09-10"\r
-  comments: Moved helloworld.rb from / to /folder.\r
-  committed_on: 2007-09-10 19:01:47\r
-  revision: "6"\r
-  id: 105\r
-  scmid:\r
-  user_id: 3\r
-  repository_id: 10\r
-  committer: dlopper\r
-changesets_007: \r
-  commit_date: "2007-09-10"\r
-  comments: Removed one file.\r
-  committed_on: 2007-09-10 19:02:16\r
-  revision: "7"\r
-  id: 106\r
-  scmid:\r
-  user_id: 3\r
-  repository_id: 10\r
-  committer: dlopper\r
-changesets_008: \r
-  commit_date: "2007-09-10"\r
-  comments: |-\r
-    This commits references an issue.\r
-    Refs #2\r
-  committed_on: 2007-09-10 19:04:35\r
-  revision: "8"\r
-  id: 107\r
-  scmid:\r
-  user_id: 3\r
-  repository_id: 10\r
-  committer: dlopper\r
+--- 
+changesets_001: 
+  commit_date: 2007-04-11
+  committed_on: 2007-04-11 15:14:44 +02:00
+  revision: 1
+  id: 100
+  comments: My very first commit
+  repository_id: 10
+  committer: dlopper
+  user_id: 3
+changesets_002: 
+  commit_date: 2007-04-12
+  committed_on: 2007-04-12 15:14:44 +02:00
+  revision: 2
+  id: 101
+  comments: 'This commit fixes #1, #2 and references #1 & #3'
+  repository_id: 10
+  committer: dlopper
+  user_id: 3
+changesets_003: 
+  commit_date: 2007-04-12
+  committed_on: 2007-04-12 15:14:44 +02:00
+  revision: 3
+  id: 102
+  comments: |-
+    A commit with wrong issue ids
+    IssueID 666 3
+  repository_id: 10
+  committer: dlopper
+  user_id: 3
+changesets_004: 
+  commit_date: 2007-04-12
+  committed_on: 2007-04-12 15:14:44 +02:00
+  revision: 4
+  id: 103
+  comments: |-
+    A commit with an issue id of an other project
+    IssueID 4 2
+  repository_id: 10
+  committer: dlopper
+  user_id: 3
+changesets_005: 
+  commit_date: "2007-09-10"
+  comments: Modified one file in the folder.
+  committed_on: 2007-09-10 19:01:08
+  revision: "5"
+  id: 104
+  scmid:
+  user_id: 3
+  repository_id: 10
+  committer: dlopper
+changesets_006: 
+  commit_date: "2007-09-10"
+  comments: Moved helloworld.rb from / to /folder.
+  committed_on: 2007-09-10 19:01:47
+  revision: "6"
+  id: 105
+  scmid:
+  user_id: 3
+  repository_id: 10
+  committer: dlopper
+changesets_007: 
+  commit_date: "2007-09-10"
+  comments: Removed one file.
+  committed_on: 2007-09-10 19:02:16
+  revision: "7"
+  id: 106
+  scmid:
+  user_id: 3
+  repository_id: 10
+  committer: dlopper
+changesets_008: 
+  commit_date: "2007-09-10"
+  comments: |-
+    This commits references an issue.
+    Refs #2
+  committed_on: 2007-09-10 19:04:35
+  revision: "8"
+  id: 107
+  scmid:
+  user_id: 3
+  repository_id: 10
+  committer: dlopper
   
\ No newline at end of file
index a178274..b4b58c4 100644 (file)
@@ -1,90 +1,90 @@
---- \r
-custom_fields_001: \r
-  name: Database\r
-  min_length: 0\r
-  regexp: ""\r
-  is_for_all: true\r
-  is_filter: true\r
-  type: IssueCustomField\r
-  max_length: 0\r
-  possible_values: \r
-  - MySQL\r
-  - PostgreSQL\r
-  - Oracle\r
-  id: 1\r
-  is_required: false\r
-  field_format: list\r
-  default_value: ""\r
-  editable: true\r
-custom_fields_002: \r
-  name: Searchable field\r
-  min_length: 1\r
-  regexp: ""\r
-  is_for_all: true\r
-  type: IssueCustomField\r
-  max_length: 100\r
-  possible_values: ""\r
-  id: 2\r
-  is_required: false\r
-  field_format: string\r
-  searchable: true\r
-  default_value: "Default string"\r
-  editable: true\r
-custom_fields_003: \r
-  name: Development status\r
-  min_length: 0\r
-  regexp: ""\r
-  is_for_all: false\r
-  is_filter: true\r
-  type: ProjectCustomField\r
-  max_length: 0\r
-  possible_values: \r
-  - Stable\r
-  - Beta\r
-  - Alpha\r
-  - Planning\r
-  id: 3\r
-  is_required: true\r
-  field_format: list\r
-  default_value: ""\r
-  editable: true\r
-custom_fields_004: \r
-  name: Phone number\r
-  min_length: 0\r
-  regexp: ""\r
-  is_for_all: false\r
-  type: UserCustomField\r
-  max_length: 0\r
-  possible_values: ""\r
-  id: 4\r
-  is_required: false\r
-  field_format: string\r
-  default_value: ""\r
-  editable: true\r
-custom_fields_005: \r
-  name: Money\r
-  min_length: 0\r
-  regexp: ""\r
-  is_for_all: false\r
-  type: UserCustomField\r
-  max_length: 0\r
-  possible_values: ""\r
-  id: 5\r
-  is_required: false\r
-  field_format: float\r
-  default_value: ""\r
-  editable: true\r
-custom_fields_006: \r
-  name: Float field\r
-  min_length: 0\r
-  regexp: ""\r
-  is_for_all: true\r
-  type: IssueCustomField\r
-  max_length: 0\r
-  possible_values: ""\r
-  id: 6\r
-  is_required: false\r
-  field_format: float\r
-  default_value: ""\r
-  editable: true\r
+--- 
+custom_fields_001: 
+  name: Database
+  min_length: 0
+  regexp: ""
+  is_for_all: true
+  is_filter: true
+  type: IssueCustomField
+  max_length: 0
+  possible_values: 
+  - MySQL
+  - PostgreSQL
+  - Oracle
+  id: 1
+  is_required: false
+  field_format: list
+  default_value: ""
+  editable: true
+custom_fields_002: 
+  name: Searchable field
+  min_length: 1
+  regexp: ""
+  is_for_all: true
+  type: IssueCustomField
+  max_length: 100
+  possible_values: ""
+  id: 2
+  is_required: false
+  field_format: string
+  searchable: true
+  default_value: "Default string"
+  editable: true
+custom_fields_003: 
+  name: Development status
+  min_length: 0
+  regexp: ""
+  is_for_all: false
+  is_filter: true
+  type: ProjectCustomField
+  max_length: 0
+  possible_values: 
+  - Stable
+  - Beta
+  - Alpha
+  - Planning
+  id: 3
+  is_required: true
+  field_format: list
+  default_value: ""
+  editable: true
+custom_fields_004: 
+  name: Phone number
+  min_length: 0
+  regexp: ""
+  is_for_all: false
+  type: UserCustomField
+  max_length: 0
+  possible_values: ""
+  id: 4
+  is_required: false
+  field_format: string
+  default_value: ""
+  editable: true
+custom_fields_005: 
+  name: Money
+  min_length: 0
+  regexp: ""
+  is_for_all: false
+  type: UserCustomField
+  max_length: 0
+  possible_values: ""
+  id: 5
+  is_required: false
+  field_format: float
+  default_value: ""
+  editable: true
+custom_fields_006: 
+  name: Float field
+  min_length: 0
+  regexp: ""
+  is_for_all: true
+  type: IssueCustomField
+  max_length: 0
+  possible_values: ""
+  id: 6
+  is_required: false
+  field_format: float
+  default_value: ""
+  editable: true
   
\ No newline at end of file
index bfbe0d2..a356e4b 100644 (file)
@@ -1,19 +1,19 @@
---- \r
-custom_fields_trackers_001: \r
-  custom_field_id: 1\r
-  tracker_id: 1\r
-custom_fields_trackers_002: \r
-  custom_field_id: 2\r
-  tracker_id: 1\r
-custom_fields_trackers_003: \r
-  custom_field_id: 2\r
-  tracker_id: 3\r
-custom_fields_trackers_004: \r
-  custom_field_id: 6\r
-  tracker_id: 1\r
-custom_fields_trackers_005: \r
-  custom_field_id: 6\r
-  tracker_id: 2\r
-custom_fields_trackers_006: \r
-  custom_field_id: 6\r
-  tracker_id: 3\r
+--- 
+custom_fields_trackers_001: 
+  custom_field_id: 1
+  tracker_id: 1
+custom_fields_trackers_002: 
+  custom_field_id: 2
+  tracker_id: 1
+custom_fields_trackers_003: 
+  custom_field_id: 2
+  tracker_id: 3
+custom_fields_trackers_004: 
+  custom_field_id: 6
+  tracker_id: 1
+custom_fields_trackers_005: 
+  custom_field_id: 6
+  tracker_id: 2
+custom_fields_trackers_006: 
+  custom_field_id: 6
+  tracker_id: 3
index 0e2b454..4e3eee4 100644 (file)
@@ -1,86 +1,86 @@
---- \r
-custom_values_006: \r
-  customized_type: Issue\r
-  custom_field_id: 2\r
-  customized_id: 3\r
-  id: 6\r
-  value: "125"\r
-custom_values_007: \r
-  customized_type: Project\r
-  custom_field_id: 3\r
-  customized_id: 1\r
-  id: 7\r
-  value: Stable\r
-custom_values_001: \r
-  customized_type: User\r
-  custom_field_id: 4\r
-  customized_id: 3\r
-  id: 1\r
-  value: ""\r
-custom_values_002: \r
-  customized_type: User\r
-  custom_field_id: 4\r
-  customized_id: 4\r
-  id: 2\r
-  value: 01 23 45 67 89\r
-custom_values_003: \r
-  customized_type: User\r
-  custom_field_id: 4\r
-  customized_id: 2\r
-  id: 3\r
-  value: ""\r
-custom_values_004: \r
-  customized_type: Issue\r
-  custom_field_id: 2\r
-  customized_id: 1\r
-  id: 4\r
-  value: "125"\r
-custom_values_005: \r
-  customized_type: Issue\r
-  custom_field_id: 2\r
-  customized_id: 2\r
-  id: 5\r
-  value: ""\r
-custom_values_008: \r
-  customized_type: Issue\r
-  custom_field_id: 1\r
-  customized_id: 3\r
-  id: 8\r
-  value: "MySQL"\r
-custom_values_009: \r
-  customized_type: Issue\r
-  custom_field_id: 2\r
-  customized_id: 3\r
-  id: 9\r
-  value: "this is a stringforcustomfield search"\r
-custom_values_010: \r
-  customized_type: Issue\r
-  custom_field_id: 6\r
-  customized_id: 1\r
-  id: 10\r
-  value: "2.1"\r
-custom_values_011: \r
-  customized_type: Issue\r
-  custom_field_id: 6\r
-  customized_id: 2\r
-  id: 11\r
-  value: "2.05"\r
-custom_values_012: \r
-  customized_type: Issue\r
-  custom_field_id: 6\r
-  customized_id: 3\r
-  id: 12\r
-  value: "11.65"\r
-custom_values_013: \r
-  customized_type: Issue\r
-  custom_field_id: 6\r
-  customized_id: 7\r
-  id: 13\r
-  value: ""\r
-custom_values_014: \r
-  customized_type: Issue\r
-  custom_field_id: 6\r
-  customized_id: 5\r
-  id: 14\r
-  value: "-7.6"\r
+--- 
+custom_values_006: 
+  customized_type: Issue
+  custom_field_id: 2
+  customized_id: 3
+  id: 6
+  value: "125"
+custom_values_007: 
+  customized_type: Project
+  custom_field_id: 3
+  customized_id: 1
+  id: 7
+  value: Stable
+custom_values_001: 
+  customized_type: User
+  custom_field_id: 4
+  customized_id: 3
+  id: 1
+  value: ""
+custom_values_002: 
+  customized_type: User
+  custom_field_id: 4
+  customized_id: 4
+  id: 2
+  value: 01 23 45 67 89
+custom_values_003: 
+  customized_type: User
+  custom_field_id: 4
+  customized_id: 2
+  id: 3
+  value: ""
+custom_values_004: 
+  customized_type: Issue
+  custom_field_id: 2
+  customized_id: 1
+  id: 4
+  value: "125"
+custom_values_005: 
+  customized_type: Issue
+  custom_field_id: 2
+  customized_id: 2
+  id: 5
+  value: ""
+custom_values_008: 
+  customized_type: Issue
+  custom_field_id: 1
+  customized_id: 3
+  id: 8
+  value: "MySQL"
+custom_values_009: 
+  customized_type: Issue
+  custom_field_id: 2
+  customized_id: 3
+  id: 9
+  value: "this is a stringforcustomfield search"
+custom_values_010: 
+  customized_type: Issue
+  custom_field_id: 6
+  customized_id: 1
+  id: 10
+  value: "2.1"
+custom_values_011: 
+  customized_type: Issue
+  custom_field_id: 6
+  customized_id: 2
+  id: 11
+  value: "2.05"
+custom_values_012: 
+  customized_type: Issue
+  custom_field_id: 6
+  customized_id: 3
+  id: 12
+  value: "11.65"
+custom_values_013: 
+  customized_type: Issue
+  custom_field_id: 6
+  customized_id: 7
+  id: 13
+  value: ""
+custom_values_014: 
+  customized_type: Issue
+  custom_field_id: 6
+  customized_id: 5
+  id: 14
+  value: "-7.6"
   
\ No newline at end of file
index 0dbca2a..137cbcc 100644 (file)
@@ -1,7 +1,7 @@
-documents_001: \r
-  created_on: 2007-01-27 15:08:27 +01:00\r
-  project_id: 1\r
-  title: "Test document"\r
-  id: 1\r
-  description: "Document description"\r
+documents_001: 
+  created_on: 2007-01-27 15:08:27 +01:00
+  project_id: 1
+  title: "Test document"
+  id: 1
+  description: "Document description"
   category_id: 1
\ No newline at end of file
index 6e7983e..c9d619e 100644 (file)
@@ -1,69 +1,69 @@
---- \r
-enumerations_001: \r
-  name: Uncategorized\r
-  id: 1\r
-  opt: DCAT\r
-  type: DocumentCategory\r
-enumerations_002: \r
-  name: User documentation\r
-  id: 2\r
-  opt: DCAT\r
-  type: DocumentCategory\r
-enumerations_003: \r
-  name: Technical documentation\r
-  id: 3\r
-  opt: DCAT\r
-  type: DocumentCategory\r
-enumerations_004: \r
-  name: Low\r
-  id: 4\r
-  opt: IPRI\r
-  type: IssuePriority\r
-enumerations_005: \r
-  name: Normal\r
-  id: 5\r
-  opt: IPRI\r
-  type: IssuePriority\r
-  is_default: true\r
-enumerations_006: \r
-  name: High\r
-  id: 6\r
-  opt: IPRI\r
-  type: IssuePriority\r
-enumerations_007: \r
-  name: Urgent\r
-  id: 7\r
-  opt: IPRI\r
-  type: IssuePriority\r
-enumerations_008: \r
-  name: Immediate\r
-  id: 8\r
-  opt: IPRI\r
-  type: IssuePriority\r
-enumerations_009: \r
-  name: Design\r
-  id: 9\r
-  opt: ACTI\r
-  type: TimeEntryActivity\r
-enumerations_010: \r
-  name: Development\r
-  id: 10\r
-  opt: ACTI\r
-  type: TimeEntryActivity\r
-  is_default: true\r
-enumerations_011: \r
-  name: QA\r
-  id: 11\r
-  opt: ACTI\r
-  type: TimeEntryActivity\r
-enumerations_012:\r
-  name: Default Enumeration\r
-  id: 12\r
-  opt: ''\r
-  type: Enumeration\r
-  is_default: true\r
-enumerations_013:\r
-  name: Another Enumeration\r
-  id: 13\r
-  opt: ''\r
-  type: Enumeration\r
+--- 
+enumerations_001: 
+  name: Uncategorized
+  id: 1
+  opt: DCAT
+  type: DocumentCategory
+enumerations_002: 
+  name: User documentation
+  id: 2
+  opt: DCAT
+  type: DocumentCategory
+enumerations_003: 
+  name: Technical documentation
+  id: 3
+  opt: DCAT
+  type: DocumentCategory
+enumerations_004: 
+  name: Low
+  id: 4
+  opt: IPRI
+  type: IssuePriority
+enumerations_005: 
+  name: Normal
+  id: 5
+  opt: IPRI
+  type: IssuePriority
+  is_default: true
+enumerations_006: 
+  name: High
+  id: 6
+  opt: IPRI
+  type: IssuePriority
+enumerations_007: 
+  name: Urgent
+  id: 7
+  opt: IPRI
+  type: IssuePriority
+enumerations_008: 
+  name: Immediate
+  id: 8
+  opt: IPRI
+  type: IssuePriority
+enumerations_009: 
+  name: Design
+  id: 9
+  opt: ACTI
+  type: TimeEntryActivity
+enumerations_010: 
+  name: Development
+  id: 10
+  opt: ACTI
+  type: TimeEntryActivity
+  is_default: true
+enumerations_011: 
+  name: QA
+  id: 11
+  opt: ACTI
+  type: TimeEntryActivity
+enumerations_012:
+  name: Default Enumeration
+  id: 12
+  opt: ''
+  type: Enumeration
+  is_default: true
+enumerations_013:
+  name: Another Enumeration
+  id: 13
+  opt: ''
+  type: Enumeration
index aa2f703..bb68b5f 100644 (file)
@@ -1,22 +1,22 @@
---- \r
-issue_categories_001: \r
-  name: Printing\r
-  project_id: 1\r
-  assigned_to_id: 2\r
-  id: 1\r
-issue_categories_002: \r
-  name: Recipes\r
-  project_id: 1\r
-  assigned_to_id: \r
-  id: 2\r
-issue_categories_003: \r
-  name: Stock management\r
-  project_id: 2\r
-  assigned_to_id: \r
-  id: 3\r
-issue_categories_004: \r
-  name: Printing\r
-  project_id: 2\r
-  assigned_to_id: \r
-  id: 4\r
+--- 
+issue_categories_001: 
+  name: Printing
+  project_id: 1
+  assigned_to_id: 2
+  id: 1
+issue_categories_002: 
+  name: Recipes
+  project_id: 1
+  assigned_to_id: 
+  id: 2
+issue_categories_003: 
+  name: Stock management
+  project_id: 2
+  assigned_to_id: 
+  id: 3
+issue_categories_004: 
+  name: Printing
+  project_id: 2
+  assigned_to_id: 
+  id: 4
   
\ No newline at end of file
index c7b10ba..098ac96 100644 (file)
@@ -1,31 +1,31 @@
---- \r
-issue_statuses_006: \r
-  name: Rejected\r
-  is_default: false\r
-  is_closed: true\r
-  id: 6\r
-issue_statuses_001: \r
-  name: New\r
-  is_default: true\r
-  is_closed: false\r
-  id: 1\r
-issue_statuses_002: \r
-  name: Assigned\r
-  is_default: false\r
-  is_closed: false\r
-  id: 2\r
-issue_statuses_003: \r
-  name: Resolved\r
-  is_default: false\r
-  is_closed: false\r
-  id: 3\r
-issue_statuses_004: \r
-  name: Feedback\r
-  is_default: false\r
-  is_closed: false\r
-  id: 4\r
-issue_statuses_005: \r
-  name: Closed\r
-  is_default: false\r
-  is_closed: true\r
-  id: 5\r
+--- 
+issue_statuses_006: 
+  name: Rejected
+  is_default: false
+  is_closed: true
+  id: 6
+issue_statuses_001: 
+  name: New
+  is_default: true
+  is_closed: false
+  id: 1
+issue_statuses_002: 
+  name: Assigned
+  is_default: false
+  is_closed: false
+  id: 2
+issue_statuses_003: 
+  name: Resolved
+  is_default: false
+  is_closed: false
+  id: 3
+issue_statuses_004: 
+  name: Feedback
+  is_default: false
+  is_closed: false
+  id: 4
+issue_statuses_005: 
+  name: Closed
+  is_default: false
+  is_closed: true
+  id: 5
index 8c8cfbd..f791763 100644 (file)
---- \r
-issues_001: \r
-  created_on: <%= 3.days.ago.to_date.to_s(:db) %>\r
-  project_id: 1\r
-  updated_on: <%= 1.day.ago.to_date.to_s(:db) %>\r
-  priority_id: 4\r
-  subject: Can't print recipes\r
-  id: 1\r
-  fixed_version_id: \r
-  category_id: 1\r
-  description: Unable to print recipes\r
-  tracker_id: 1\r
-  assigned_to_id: \r
-  author_id: 2\r
-  status_id: 1\r
-  start_date: <%= 1.day.ago.to_date.to_s(:db) %>\r
-  due_date: <%= 10.day.from_now.to_date.to_s(:db) %>\r
-issues_002: \r
-  created_on: 2006-07-19 21:04:21 +02:00\r
-  project_id: 1\r
-  updated_on: 2006-07-19 21:09:50 +02:00\r
-  priority_id: 5\r
-  subject: Add ingredients categories\r
-  id: 2\r
-  fixed_version_id: 2\r
-  category_id: \r
-  description: Ingredients of the recipe should be classified by categories\r
-  tracker_id: 2\r
-  assigned_to_id: 3\r
-  author_id: 2\r
-  status_id: 2\r
-  start_date: <%= 2.day.ago.to_date.to_s(:db) %>\r
-  due_date: \r
-issues_003: \r
-  created_on: 2006-07-19 21:07:27 +02:00\r
-  project_id: 1\r
-  updated_on: 2006-07-19 21:07:27 +02:00\r
-  priority_id: 4\r
-  subject: Error 281 when updating a recipe\r
-  id: 3\r
-  fixed_version_id: \r
-  category_id: \r
-  description: Error 281 is encountered when saving a recipe\r
-  tracker_id: 1\r
-  assigned_to_id: 3\r
-  author_id: 2\r
-  status_id: 1\r
-  start_date: <%= 1.day.from_now.to_date.to_s(:db) %>\r
-  due_date: <%= 40.day.ago.to_date.to_s(:db) %>\r
-issues_004: \r
-  created_on: <%= 5.days.ago.to_date.to_s(:db) %>\r
-  project_id: 2\r
-  updated_on: <%= 2.days.ago.to_date.to_s(:db) %>\r
-  priority_id: 4\r
-  subject: Issue on project 2\r
-  id: 4\r
-  fixed_version_id: \r
-  category_id: \r
-  description: Issue on project 2\r
-  tracker_id: 1\r
-  assigned_to_id: 2\r
-  author_id: 2\r
-  status_id: 1\r
-issues_005: \r
-  created_on: <%= 5.days.ago.to_date.to_s(:db) %>\r
-  project_id: 3\r
-  updated_on: <%= 2.days.ago.to_date.to_s(:db) %>\r
-  priority_id: 4\r
-  subject: Subproject issue\r
-  id: 5\r
-  fixed_version_id: \r
-  category_id: \r
-  description: This is an issue on a cookbook subproject\r
-  tracker_id: 1\r
-  assigned_to_id: \r
-  author_id: 2\r
-  status_id: 1\r
-issues_006: \r
-  created_on: <%= 1.minute.ago.to_date.to_s(:db) %>\r
-  project_id: 5\r
-  updated_on: <%= 1.minute.ago.to_date.to_s(:db) %>\r
-  priority_id: 4\r
-  subject: Issue of a private subproject\r
-  id: 6\r
-  fixed_version_id: \r
-  category_id: \r
-  description: This is an issue of a private subproject of cookbook\r
-  tracker_id: 1\r
-  assigned_to_id: \r
-  author_id: 2\r
-  status_id: 1\r
-  start_date: <%= Date.today.to_s(:db) %>\r
-  due_date: <%= 1.days.from_now.to_date.to_s(:db) %>\r
-issues_007: \r
-  created_on: <%= 10.days.ago.to_date.to_s(:db) %>\r
-  project_id: 1\r
-  updated_on: <%= 10.days.ago.to_date.to_s(:db) %>\r
-  priority_id: 5\r
-  subject: Issue due today\r
-  id: 7\r
-  fixed_version_id: \r
-  category_id: \r
-  description: This is an issue that is due today\r
-  tracker_id: 1\r
-  assigned_to_id: \r
-  author_id: 2\r
-  status_id: 1\r
-  start_date: <%= 10.days.ago.to_s(:db) %>\r
-  due_date: <%= Date.today.to_s(:db) %>\r
-  lock_version: 0\r
-issues_008: \r
-  created_on: <%= 10.days.ago.to_date.to_s(:db) %>\r
-  project_id: 1\r
-  updated_on: <%= 10.days.ago.to_date.to_s(:db) %>\r
-  priority_id: 5\r
-  subject: Closed issue\r
-  id: 8\r
-  fixed_version_id: \r
-  category_id: \r
-  description: This is a closed issue.\r
-  tracker_id: 1\r
-  assigned_to_id: \r
-  author_id: 2\r
-  status_id: 5\r
-  start_date: \r
-  due_date: \r
-  lock_version: 0\r
-issues_009: \r
-  created_on: <%= 1.minute.ago.to_date.to_s(:db) %>\r
-  project_id: 5\r
-  updated_on: <%= 1.minute.ago.to_date.to_s(:db) %>\r
-  priority_id: 5\r
-  subject: Blocked Issue\r
-  id: 9\r
-  fixed_version_id: \r
-  category_id: \r
-  description: This is an issue that is blocked by issue #10\r
-  tracker_id: 1\r
-  assigned_to_id: \r
-  author_id: 2\r
-  status_id: 1\r
-  start_date: <%= Date.today.to_s(:db) %>\r
-  due_date: <%= 1.days.from_now.to_date.to_s(:db) %>\r
-issues_010: \r
-  created_on: <%= 1.minute.ago.to_date.to_s(:db) %>\r
-  project_id: 5\r
-  updated_on: <%= 1.minute.ago.to_date.to_s(:db) %>\r
-  priority_id: 5\r
-  subject: Issue Doing the Blocking\r
-  id: 10\r
-  fixed_version_id: \r
-  category_id: \r
-  description: This is an issue that blocks issue #9\r
-  tracker_id: 1\r
-  assigned_to_id: \r
-  author_id: 2\r
-  status_id: 1\r
-  start_date: <%= Date.today.to_s(:db) %>\r
-  due_date: <%= 1.days.from_now.to_date.to_s(:db) %>\r
+--- 
+issues_001: 
+  created_on: <%= 3.days.ago.to_date.to_s(:db) %>
+  project_id: 1
+  updated_on: <%= 1.day.ago.to_date.to_s(:db) %>
+  priority_id: 4
+  subject: Can't print recipes
+  id: 1
+  fixed_version_id: 
+  category_id: 1
+  description: Unable to print recipes
+  tracker_id: 1
+  assigned_to_id: 
+  author_id: 2
+  status_id: 1
+  start_date: <%= 1.day.ago.to_date.to_s(:db) %>
+  due_date: <%= 10.day.from_now.to_date.to_s(:db) %>
+issues_002: 
+  created_on: 2006-07-19 21:04:21 +02:00
+  project_id: 1
+  updated_on: 2006-07-19 21:09:50 +02:00
+  priority_id: 5
+  subject: Add ingredients categories
+  id: 2
+  fixed_version_id: 2
+  category_id: 
+  description: Ingredients of the recipe should be classified by categories
+  tracker_id: 2
+  assigned_to_id: 3
+  author_id: 2
+  status_id: 2
+  start_date: <%= 2.day.ago.to_date.to_s(:db) %>
+  due_date: 
+issues_003: 
+  created_on: 2006-07-19 21:07:27 +02:00
+  project_id: 1
+  updated_on: 2006-07-19 21:07:27 +02:00
+  priority_id: 4
+  subject: Error 281 when updating a recipe
+  id: 3
+  fixed_version_id: 
+  category_id: 
+  description: Error 281 is encountered when saving a recipe
+  tracker_id: 1
+  assigned_to_id: 3
+  author_id: 2
+  status_id: 1
+  start_date: <%= 1.day.from_now.to_date.to_s(:db) %>
+  due_date: <%= 40.day.ago.to_date.to_s(:db) %>
+issues_004: 
+  created_on: <%= 5.days.ago.to_date.to_s(:db) %>
+  project_id: 2
+  updated_on: <%= 2.days.ago.to_date.to_s(:db) %>
+  priority_id: 4
+  subject: Issue on project 2
+  id: 4
+  fixed_version_id: 
+  category_id: 
+  description: Issue on project 2
+  tracker_id: 1
+  assigned_to_id: 2
+  author_id: 2
+  status_id: 1
+issues_005: 
+  created_on: <%= 5.days.ago.to_date.to_s(:db) %>
+  project_id: 3
+  updated_on: <%= 2.days.ago.to_date.to_s(:db) %>
+  priority_id: 4
+  subject: Subproject issue
+  id: 5
+  fixed_version_id: 
+  category_id: 
+  description: This is an issue on a cookbook subproject
+  tracker_id: 1
+  assigned_to_id: 
+  author_id: 2
+  status_id: 1
+issues_006: 
+  created_on: <%= 1.minute.ago.to_date.to_s(:db) %>
+  project_id: 5
+  updated_on: <%= 1.minute.ago.to_date.to_s(:db) %>
+  priority_id: 4
+  subject: Issue of a private subproject
+  id: 6
+  fixed_version_id: 
+  category_id: 
+  description: This is an issue of a private subproject of cookbook
+  tracker_id: 1
+  assigned_to_id: 
+  author_id: 2
+  status_id: 1
+  start_date: <%= Date.today.to_s(:db) %>
+  due_date: <%= 1.days.from_now.to_date.to_s(:db) %>
+issues_007: 
+  created_on: <%= 10.days.ago.to_date.to_s(:db) %>
+  project_id: 1
+  updated_on: <%= 10.days.ago.to_date.to_s(:db) %>
+  priority_id: 5
+  subject: Issue due today
+  id: 7
+  fixed_version_id: 
+  category_id: 
+  description: This is an issue that is due today
+  tracker_id: 1
+  assigned_to_id: 
+  author_id: 2
+  status_id: 1
+  start_date: <%= 10.days.ago.to_s(:db) %>
+  due_date: <%= Date.today.to_s(:db) %>
+  lock_version: 0
+issues_008: 
+  created_on: <%= 10.days.ago.to_date.to_s(:db) %>
+  project_id: 1
+  updated_on: <%= 10.days.ago.to_date.to_s(:db) %>
+  priority_id: 5
+  subject: Closed issue
+  id: 8
+  fixed_version_id: 
+  category_id: 
+  description: This is a closed issue.
+  tracker_id: 1
+  assigned_to_id: 
+  author_id: 2
+  status_id: 5
+  start_date: 
+  due_date: 
+  lock_version: 0
+issues_009: 
+  created_on: <%= 1.minute.ago.to_date.to_s(:db) %>
+  project_id: 5
+  updated_on: <%= 1.minute.ago.to_date.to_s(:db) %>
+  priority_id: 5
+  subject: Blocked Issue
+  id: 9
+  fixed_version_id: 
+  category_id: 
+  description: This is an issue that is blocked by issue #10
+  tracker_id: 1
+  assigned_to_id: 
+  author_id: 2
+  status_id: 1
+  start_date: <%= Date.today.to_s(:db) %>
+  due_date: <%= 1.days.from_now.to_date.to_s(:db) %>
+issues_010: 
+  created_on: <%= 1.minute.ago.to_date.to_s(:db) %>
+  project_id: 5
+  updated_on: <%= 1.minute.ago.to_date.to_s(:db) %>
+  priority_id: 5
+  subject: Issue Doing the Blocking
+  id: 10
+  fixed_version_id: 
+  category_id: 
+  description: This is an issue that blocks issue #9
+  tracker_id: 1
+  assigned_to_id: 
+  author_id: 2
+  status_id: 1
+  start_date: <%= Date.today.to_s(:db) %>
+  due_date: <%= 1.days.from_now.to_date.to_s(:db) %>
index 058abd1..38e6bf1 100644 (file)
@@ -1,15 +1,15 @@
---- \r
-journal_details_001: \r
-  old_value: "1"\r
-  property: attr\r
-  id: 1\r
-  value: "2"\r
-  prop_key: status_id\r
-  journal_id: 1\r
-journal_details_002: \r
-  old_value: "40"\r
-  property: attr\r
-  id: 2\r
-  value: "30"\r
-  prop_key: done_ratio\r
-  journal_id: 1\r
+--- 
+journal_details_001: 
+  old_value: "1"
+  property: attr
+  id: 1
+  value: "2"
+  prop_key: status_id
+  journal_id: 1
+journal_details_002: 
+  old_value: "40"
+  property: attr
+  id: 2
+  value: "30"
+  prop_key: done_ratio
+  journal_id: 1
index 3ee66ae..5c0b702 100644 (file)
@@ -1,23 +1,23 @@
---- \r
-journals_001: \r
-  created_on: <%= 2.days.ago.to_date.to_s(:db) %>\r
-  notes: "Journal notes"\r
-  id: 1\r
-  journalized_type: Issue\r
-  user_id: 1\r
-  journalized_id: 1\r
-journals_002: \r
-  created_on: <%= 1.days.ago.to_date.to_s(:db) %>\r
-  notes: "Some notes with Redmine links: #2, r2."\r
-  id: 2\r
-  journalized_type: Issue\r
-  user_id: 2\r
-  journalized_id: 1\r
-journals_003: \r
-  created_on: <%= 1.days.ago.to_date.to_s(:db) %>\r
-  notes: "A comment with inline image: !picture.jpg!"\r
-  id: 3\r
-  journalized_type: Issue\r
-  user_id: 2\r
-  journalized_id: 2\r
+--- 
+journals_001: 
+  created_on: <%= 2.days.ago.to_date.to_s(:db) %>
+  notes: "Journal notes"
+  id: 1
+  journalized_type: Issue
+  user_id: 1
+  journalized_id: 1
+journals_002: 
+  created_on: <%= 1.days.ago.to_date.to_s(:db) %>
+  notes: "Some notes with Redmine links: #2, r2."
+  id: 2
+  journalized_type: Issue
+  user_id: 2
+  journalized_id: 1
+journals_003: 
+  created_on: <%= 1.days.ago.to_date.to_s(:db) %>
+  notes: "A comment with inline image: !picture.jpg!"
+  id: 3
+  journalized_type: Issue
+  user_id: 2
+  journalized_id: 2
   
\ No newline at end of file
index 3fd785b..65e3fd6 100644 (file)
@@ -1,45 +1,45 @@
---- \r
-members_001: \r
-  created_on: 2006-07-19 19:35:33 +02:00\r
-  project_id: 1\r
-  id: 1\r
-  user_id: 2\r
-  mail_notification: true\r
-members_002: \r
-  created_on: 2006-07-19 19:35:36 +02:00\r
-  project_id: 1\r
-  id: 2\r
-  user_id: 3\r
-  mail_notification: true\r
-members_003: \r
-  created_on: 2006-07-19 19:35:36 +02:00\r
-  project_id: 2\r
-  id: 3\r
-  user_id: 2\r
-  mail_notification: true\r
-members_004: \r
-  id: 4\r
-  created_on: 2006-07-19 19:35:36 +02:00\r
-  project_id: 1\r
-  # Locked user\r
-  user_id: 5\r
-  mail_notification: true\r
-members_005: \r
-  id: 5\r
-  created_on: 2006-07-19 19:35:33 +02:00\r
-  project_id: 5\r
-  user_id: 2\r
-  mail_notification: true\r
-members_006: \r
-  id: 6\r
-  created_on: 2006-07-19 19:35:33 +02:00\r
-  project_id: 5\r
-  user_id: 10\r
-  mail_notification: false\r
-members_007: \r
-  id: 7\r
-  created_on: 2006-07-19 19:35:33 +02:00\r
-  project_id: 5\r
-  user_id: 8\r
-  mail_notification: false\r
+--- 
+members_001: 
+  created_on: 2006-07-19 19:35:33 +02:00
+  project_id: 1
+  id: 1
+  user_id: 2
+  mail_notification: true
+members_002: 
+  created_on: 2006-07-19 19:35:36 +02:00
+  project_id: 1
+  id: 2
+  user_id: 3
+  mail_notification: true
+members_003: 
+  created_on: 2006-07-19 19:35:36 +02:00
+  project_id: 2
+  id: 3
+  user_id: 2
+  mail_notification: true
+members_004: 
+  id: 4
+  created_on: 2006-07-19 19:35:36 +02:00
+  project_id: 1
+  # Locked user
+  user_id: 5
+  mail_notification: true
+members_005: 
+  id: 5
+  created_on: 2006-07-19 19:35:33 +02:00
+  project_id: 5
+  user_id: 2
+  mail_notification: true
+members_006: 
+  id: 6
+  created_on: 2006-07-19 19:35:33 +02:00
+  project_id: 5
+  user_id: 10
+  mail_notification: false
+members_007: 
+  id: 7
+  created_on: 2006-07-19 19:35:33 +02:00
+  project_id: 5
+  user_id: 8
+  mail_notification: false
   
\ No newline at end of file
index 8ed376e..b1c5977 100644 (file)
@@ -1,68 +1,68 @@
---- \r
-messages_001: \r
-  created_on: 2007-05-12 17:15:32 +02:00\r
-  updated_on: 2007-05-12 17:15:32 +02:00\r
-  subject: First post\r
-  id: 1\r
-  replies_count: 2\r
-  last_reply_id: 3\r
-  content: "This is the very first post\n\\r
-    in the forum"\r
-  author_id: 1\r
-  parent_id: \r
-  board_id: 1\r
-messages_002: \r
-  created_on: 2007-05-12 17:18:00 +02:00\r
-  updated_on: 2007-05-12 17:18:00 +02:00\r
-  subject: First reply\r
-  id: 2\r
-  replies_count: 0\r
-  last_reply_id: \r
-  content: "Reply to the first post"\r
-  author_id: 1\r
-  parent_id: 1\r
-  board_id: 1\r
-messages_003: \r
-  created_on: 2007-05-12 17:18:02 +02:00\r
-  updated_on: 2007-05-12 17:18:02 +02:00\r
-  subject: "RE: First post"\r
-  id: 3\r
-  replies_count: 0\r
-  last_reply_id: \r
-  content: "An other reply"\r
-  author_id: 2\r
-  parent_id: 1\r
-  board_id: 1\r
-messages_004: \r
-  created_on: 2007-08-12 17:15:32 +02:00\r
-  updated_on: 2007-08-12 17:15:32 +02:00\r
-  subject: Post 2\r
-  id: 4\r
-  replies_count: 2\r
-  last_reply_id: 6\r
-  content: "This is an other post"\r
-  author_id: \r
-  parent_id: \r
-  board_id: 1\r
-messages_005: \r
-  created_on: <%= 3.days.ago.to_date.to_s(:db) %>\r
-  updated_on: <%= 3.days.ago.to_date.to_s(:db) %>\r
-  subject: 'RE: post 2'\r
-  id: 5\r
-  replies_count: 0\r
-  last_reply_id: \r
-  content: "Reply to the second post"\r
-  author_id: 1\r
-  parent_id: 4\r
-  board_id: 1\r
-messages_006: \r
-  created_on: <%= 2.days.ago.to_date.to_s(:db) %>\r
-  updated_on: <%= 2.days.ago.to_date.to_s(:db) %>\r
-  subject: 'RE: post 2'\r
-  id: 6\r
-  replies_count: 0\r
-  last_reply_id: \r
-  content: "Another reply to the second post"\r
-  author_id: 3\r
-  parent_id: 4\r
-  board_id: 1\r
+--- 
+messages_001: 
+  created_on: 2007-05-12 17:15:32 +02:00
+  updated_on: 2007-05-12 17:15:32 +02:00
+  subject: First post
+  id: 1
+  replies_count: 2
+  last_reply_id: 3
+  content: "This is the very first post\n\
+    in the forum"
+  author_id: 1
+  parent_id: 
+  board_id: 1
+messages_002: 
+  created_on: 2007-05-12 17:18:00 +02:00
+  updated_on: 2007-05-12 17:18:00 +02:00
+  subject: First reply
+  id: 2
+  replies_count: 0
+  last_reply_id: 
+  content: "Reply to the first post"
+  author_id: 1
+  parent_id: 1
+  board_id: 1
+messages_003: 
+  created_on: 2007-05-12 17:18:02 +02:00
+  updated_on: 2007-05-12 17:18:02 +02:00
+  subject: "RE: First post"
+  id: 3
+  replies_count: 0
+  last_reply_id: 
+  content: "An other reply"
+  author_id: 2
+  parent_id: 1
+  board_id: 1
+messages_004: 
+  created_on: 2007-08-12 17:15:32 +02:00
+  updated_on: 2007-08-12 17:15:32 +02:00
+  subject: Post 2
+  id: 4
+  replies_count: 2
+  last_reply_id: 6
+  content: "This is an other post"
+  author_id: 
+  parent_id: 
+  board_id: 1
+messages_005: 
+  created_on: <%= 3.days.ago.to_date.to_s(:db) %>
+  updated_on: <%= 3.days.ago.to_date.to_s(:db) %>
+  subject: 'RE: post 2'
+  id: 5
+  replies_count: 0
+  last_reply_id: 
+  content: "Reply to the second post"
+  author_id: 1
+  parent_id: 4
+  board_id: 1
+messages_006: 
+  created_on: <%= 2.days.ago.to_date.to_s(:db) %>
+  updated_on: <%= 2.days.ago.to_date.to_s(:db) %>
+  subject: 'RE: post 2'
+  id: 6
+  replies_count: 0
+  last_reply_id: 
+  content: "Another reply to the second post"
+  author_id: 3
+  parent_id: 4
+  board_id: 1
index 2c2e2c1..1819095 100644 (file)
@@ -1,22 +1,22 @@
---- \r
-news_001: \r
-  created_on: 2006-07-19 22:40:26 +02:00\r
-  project_id: 1\r
-  title: eCookbook first release !\r
-  id: 1\r
-  description: |-\r
-    eCookbook 1.0 has been released.\r
-    \r
-    Visit http://ecookbook.somenet.foo/\r
-  summary: First version was released...\r
-  author_id: 2\r
-  comments_count: 1\r
-news_002: \r
-  created_on: 2006-07-19 22:42:58 +02:00\r
-  project_id: 1\r
-  title: 100,000 downloads for eCookbook\r
-  id: 2\r
-  description: eCookbook 1.0 have downloaded 100,000 times\r
-  summary: eCookbook 1.0 have downloaded 100,000 times\r
-  author_id: 2\r
-  comments_count: 0\r
+--- 
+news_001: 
+  created_on: 2006-07-19 22:40:26 +02:00
+  project_id: 1
+  title: eCookbook first release !
+  id: 1
+  description: |-
+    eCookbook 1.0 has been released.
+    
+    Visit http://ecookbook.somenet.foo/
+  summary: First version was released...
+  author_id: 2
+  comments_count: 1
+news_002: 
+  created_on: 2006-07-19 22:42:58 +02:00
+  project_id: 1
+  title: 100,000 downloads for eCookbook
+  id: 2
+  description: eCookbook 1.0 have downloaded 100,000 times
+  summary: eCookbook 1.0 have downloaded 100,000 times
+  author_id: 2
+  comments_count: 0
index de692af..6ecc8ad 100644 (file)
@@ -1,74 +1,74 @@
---- \r
-projects_001: \r
-  created_on: 2006-07-19 19:13:59 +02:00\r
-  name: eCookbook\r
-  updated_on: 2006-07-19 22:53:01 +02:00\r
-  id: 1\r
-  description: Recipes management application\r
-  homepage: http://ecookbook.somenet.foo/\r
-  is_public: true\r
-  identifier: ecookbook\r
-  parent_id: \r
-  lft: 1\r
-  rgt: 10\r
-projects_002: \r
-  created_on: 2006-07-19 19:14:19 +02:00\r
-  name: OnlineStore\r
-  updated_on: 2006-07-19 19:14:19 +02:00\r
-  id: 2\r
-  description: E-commerce web site\r
-  homepage: ""\r
-  is_public: false\r
-  identifier: onlinestore\r
-  parent_id: \r
-  lft: 11\r
-  rgt: 12\r
-projects_003: \r
-  created_on: 2006-07-19 19:15:21 +02:00\r
-  name: eCookbook Subproject 1\r
-  updated_on: 2006-07-19 19:18:12 +02:00\r
-  id: 3\r
-  description: eCookBook Subproject 1\r
-  homepage: ""\r
-  is_public: true\r
-  identifier: subproject1\r
-  parent_id: 1\r
-  lft: 6\r
-  rgt: 7\r
-projects_004: \r
-  created_on: 2006-07-19 19:15:51 +02:00\r
-  name: eCookbook Subproject 2\r
-  updated_on: 2006-07-19 19:17:07 +02:00\r
-  id: 4\r
-  description: eCookbook Subproject 2\r
-  homepage: ""\r
-  is_public: true\r
-  identifier: subproject2\r
-  parent_id: 1\r
-  lft: 8\r
-  rgt: 9\r
-projects_005: \r
-  created_on: 2006-07-19 19:15:51 +02:00\r
-  name: Private child of eCookbook\r
-  updated_on: 2006-07-19 19:17:07 +02:00\r
-  id: 5\r
-  description: This is a private subproject of a public project\r
-  homepage: ""\r
-  is_public: false\r
-  identifier: private-child\r
-  parent_id: 1\r
-  lft: 2\r
-  rgt: 5\r
-projects_006: \r
-  created_on: 2006-07-19 19:15:51 +02:00\r
-  name: Child of private child\r
-  updated_on: 2006-07-19 19:17:07 +02:00\r
-  id: 6\r
-  description: This is a public subproject of a private project\r
-  homepage: ""\r
-  is_public: true\r
-  identifier: project6\r
-  parent_id: 5\r
-  lft: 3\r
-  rgt: 4\r
+--- 
+projects_001: 
+  created_on: 2006-07-19 19:13:59 +02:00
+  name: eCookbook
+  updated_on: 2006-07-19 22:53:01 +02:00
+  id: 1
+  description: Recipes management application
+  homepage: http://ecookbook.somenet.foo/
+  is_public: true
+  identifier: ecookbook
+  parent_id: 
+  lft: 1
+  rgt: 10
+projects_002: 
+  created_on: 2006-07-19 19:14:19 +02:00
+  name: OnlineStore
+  updated_on: 2006-07-19 19:14:19 +02:00
+  id: 2
+  description: E-commerce web site
+  homepage: ""
+  is_public: false
+  identifier: onlinestore
+  parent_id: 
+  lft: 11
+  rgt: 12
+projects_003: 
+  created_on: 2006-07-19 19:15:21 +02:00
+  name: eCookbook Subproject 1
+  updated_on: 2006-07-19 19:18:12 +02:00
+  id: 3
+  description: eCookBook Subproject 1
+  homepage: ""
+  is_public: true
+  identifier: subproject1
+  parent_id: 1
+  lft: 6
+  rgt: 7
+projects_004: 
+  created_on: 2006-07-19 19:15:51 +02:00
+  name: eCookbook Subproject 2
+  updated_on: 2006-07-19 19:17:07 +02:00
+  id: 4
+  description: eCookbook Subproject 2
+  homepage: ""
+  is_public: true
+  identifier: subproject2
+  parent_id: 1
+  lft: 8
+  rgt: 9
+projects_005: 
+  created_on: 2006-07-19 19:15:51 +02:00
+  name: Private child of eCookbook
+  updated_on: 2006-07-19 19:17:07 +02:00
+  id: 5
+  description: This is a private subproject of a public project
+  homepage: ""
+  is_public: false
+  identifier: private-child
+  parent_id: 1
+  lft: 2
+  rgt: 5
+projects_006: 
+  created_on: 2006-07-19 19:15:51 +02:00
+  name: Child of private child
+  updated_on: 2006-07-19 19:17:07 +02:00
+  id: 6
+  description: This is a public subproject of a private project
+  homepage: ""
+  is_public: true
+  identifier: project6
+  parent_id: 5
+  lft: 3
+  rgt: 4
   
\ No newline at end of file
index 563bf58..3299f96 100644 (file)
---- \r
-queries_001: \r
-  id: 1\r
-  project_id: 1\r
-  is_public: true\r
-  name: Multiple custom fields query\r
-  filters: |\r
-    --- \r
-    cf_1: \r
-      :values: \r
-      - MySQL\r
-      :operator: "="\r
-    status_id: \r
-      :values: \r
-      - "1"\r
-      :operator: o\r
-    cf_2: \r
-      :values: \r
-      - "125"\r
-      :operator: "="\r
-\r
-  user_id: 1\r
-  column_names: \r
-queries_002: \r
-  id: 2\r
-  project_id: 1\r
-  is_public: false\r
-  name: Private query for cookbook\r
-  filters: |\r
-    --- \r
-    tracker_id: \r
-      :values: \r
-      - "3"\r
-      :operator: "="\r
-    status_id: \r
-      :values: \r
-      - "1"\r
-      :operator: o\r
-\r
-  user_id: 3\r
-  column_names: \r
-queries_003: \r
-  id: 3\r
-  project_id: \r
-  is_public: false\r
-  name: Private query for all projects\r
-  filters: |\r
-    --- \r
-    tracker_id: \r
-      :values: \r
-      - "3"\r
-      :operator: "="\r
-\r
-  user_id: 3\r
-  column_names: \r
-queries_004: \r
-  id: 4\r
-  project_id: \r
-  is_public: true\r
-  name: Public query for all projects\r
-  filters: |\r
-    --- \r
-    tracker_id: \r
-      :values: \r
-      - "3"\r
-      :operator: "="\r
-\r
-  user_id: 2\r
-  column_names: \r
-queries_005: \r
-  id: 5\r
-  project_id: \r
-  is_public: true\r
-  name: Open issues by priority and tracker\r
-  filters: |\r
-    --- \r
-    status_id: \r
-      :values: \r
-      - "1"\r
-      :operator: o\r
-\r
-  user_id: 1\r
-  column_names: \r
-  sort_criteria: |\r
-    --- \r
-    - - priority\r
-      - desc\r
-    - - tracker\r
-      - asc\r
-queries_006: \r
-  id: 6\r
-  project_id: \r
-  is_public: true\r
-  name: Open issues grouped by tracker\r
-  filters: |\r
-    --- \r
-    status_id: \r
-      :values: \r
-      - "1"\r
-      :operator: o\r
-\r
-  user_id: 1\r
-  column_names: \r
-  group_by: tracker\r
-  sort_criteria: |\r
-    --- \r
-    - - priority\r
-      - desc\r
-queries_007: \r
-  id: 7\r
-  project_id: 2\r
-  is_public: true\r
-  name: Public query for project 2\r
-  filters: |\r
-    --- \r
-    tracker_id: \r
-      :values: \r
-      - "3"\r
-      :operator: "="\r
-\r
-  user_id: 2\r
-  column_names: \r
-queries_008: \r
-  id: 8\r
-  project_id: 2\r
-  is_public: false\r
-  name: Private query for project 2\r
-  filters: |\r
-    --- \r
-    tracker_id: \r
-      :values: \r
-      - "3"\r
-      :operator: "="\r
-\r
-  user_id: 2\r
-  column_names: \r
+--- 
+queries_001: 
+  id: 1
+  project_id: 1
+  is_public: true
+  name: Multiple custom fields query
+  filters: |
+    --- 
+    cf_1: 
+      :values: 
+      - MySQL
+      :operator: "="
+    status_id: 
+      :values: 
+      - "1"
+      :operator: o
+    cf_2: 
+      :values: 
+      - "125"
+      :operator: "="
+
+  user_id: 1
+  column_names: 
+queries_002: 
+  id: 2
+  project_id: 1
+  is_public: false
+  name: Private query for cookbook
+  filters: |
+    --- 
+    tracker_id: 
+      :values: 
+      - "3"
+      :operator: "="
+    status_id: 
+      :values: 
+      - "1"
+      :operator: o
+
+  user_id: 3
+  column_names: 
+queries_003: 
+  id: 3
+  project_id: 
+  is_public: false
+  name: Private query for all projects
+  filters: |
+    --- 
+    tracker_id: 
+      :values: 
+      - "3"
+      :operator: "="
+
+  user_id: 3
+  column_names: 
+queries_004: 
+  id: 4
+  project_id: 
+  is_public: true
+  name: Public query for all projects
+  filters: |
+    --- 
+    tracker_id: 
+      :values: 
+      - "3"
+      :operator: "="
+
+  user_id: 2
+  column_names: 
+queries_005: 
+  id: 5
+  project_id: 
+  is_public: true
+  name: Open issues by priority and tracker
+  filters: |
+    --- 
+    status_id: 
+      :values: 
+      - "1"
+      :operator: o
+
+  user_id: 1
+  column_names: 
+  sort_criteria: |
+    --- 
+    - - priority
+      - desc
+    - - tracker
+      - asc
+queries_006: 
+  id: 6
+  project_id: 
+  is_public: true
+  name: Open issues grouped by tracker
+  filters: |
+    --- 
+    status_id: 
+      :values: 
+      - "1"
+      :operator: o
+
+  user_id: 1
+  column_names: 
+  group_by: tracker
+  sort_criteria: |
+    --- 
+    - - priority
+      - desc
+queries_007: 
+  id: 7
+  project_id: 2
+  is_public: true
+  name: Public query for project 2
+  filters: |
+    --- 
+    tracker_id: 
+      :values: 
+      - "3"
+      :operator: "="
+
+  user_id: 2
+  column_names: 
+queries_008: 
+  id: 8
+  project_id: 2
+  is_public: false
+  name: Private query for project 2
+  filters: |
+    --- 
+    tracker_id: 
+      :values: 
+      - "3"
+      :operator: "="
+
+  user_id: 2
+  column_names: 
 
index d86e301..c551058 100644 (file)
@@ -1,17 +1,17 @@
---- \r
-repositories_001: \r
-  project_id: 1\r
-  url: file:///<%= RAILS_ROOT.gsub(%r{config\/\.\.}, '') %>/tmp/test/subversion_repository\r
-  id: 10\r
-  root_url: file:///<%= RAILS_ROOT.gsub(%r{config\/\.\.}, '') %>/tmp/test/subversion_repository\r
-  password: ""\r
-  login: ""\r
-  type: Subversion\r
-repositories_002: \r
-  project_id: 2\r
-  url: svn://localhost/test\r
-  id: 11\r
-  root_url: svn://localhost\r
-  password: ""\r
-  login: ""\r
-  type: Subversion\r
+--- 
+repositories_001: 
+  project_id: 1
+  url: file:///<%= RAILS_ROOT.gsub(%r{config\/\.\.}, '') %>/tmp/test/subversion_repository
+  id: 10
+  root_url: file:///<%= RAILS_ROOT.gsub(%r{config\/\.\.}, '') %>/tmp/test/subversion_repository
+  password: ""
+  login: ""
+  type: Subversion
+repositories_002: 
+  project_id: 2
+  url: svn://localhost/test
+  id: 11
+  root_url: svn://localhost
+  password: ""
+  login: ""
+  type: Subversion
index 0bd0784..b8881fa 100644 (file)
---- \r
-roles_001: \r
-  name: Manager\r
-  id: 1\r
-  builtin: 0\r
-  permissions: |\r
-    --- \r
-    - :add_project\r
-    - :edit_project\r
-    - :manage_members\r
-    - :manage_versions\r
-    - :manage_categories\r
-    - :add_issues\r
-    - :edit_issues\r
-    - :manage_issue_relations\r
-    - :add_issue_notes\r
-    - :move_issues\r
-    - :delete_issues\r
-    - :view_issue_watchers\r
-    - :add_issue_watchers\r
-    - :manage_public_queries\r
-    - :save_queries\r
-    - :view_gantt\r
-    - :view_calendar\r
-    - :log_time\r
-    - :view_time_entries\r
-    - :edit_time_entries\r
-    - :delete_time_entries\r
-    - :manage_news\r
-    - :comment_news\r
-    - :view_documents\r
-    - :manage_documents\r
-    - :view_wiki_pages\r
-    - :view_wiki_edits\r
-    - :edit_wiki_pages\r
-    - :delete_wiki_pages_attachments\r
-    - :protect_wiki_pages\r
-    - :delete_wiki_pages\r
-    - :rename_wiki_pages\r
-    - :add_messages\r
-    - :edit_messages\r
-    - :delete_messages\r
-    - :manage_boards\r
-    - :view_files\r
-    - :manage_files\r
-    - :browse_repository\r
-    - :manage_repository\r
-    - :view_changesets\r
-\r
-  position: 1\r
-roles_002: \r
-  name: Developer\r
-  id: 2\r
-  builtin: 0\r
-  permissions: |\r
-    --- \r
-    - :edit_project\r
-    - :manage_members\r
-    - :manage_versions\r
-    - :manage_categories\r
-    - :add_issues\r
-    - :edit_issues\r
-    - :manage_issue_relations\r
-    - :add_issue_notes\r
-    - :move_issues\r
-    - :delete_issues\r
-    - :view_issue_watchers\r
-    - :save_queries\r
-    - :view_gantt\r
-    - :view_calendar\r
-    - :log_time\r
-    - :view_time_entries\r
-    - :edit_own_time_entries\r
-    - :manage_news\r
-    - :comment_news\r
-    - :view_documents\r
-    - :manage_documents\r
-    - :view_wiki_pages\r
-    - :view_wiki_edits\r
-    - :edit_wiki_pages\r
-    - :protect_wiki_pages\r
-    - :delete_wiki_pages\r
-    - :add_messages\r
-    - :edit_own_messages\r
-    - :delete_own_messages\r
-    - :manage_boards\r
-    - :view_files\r
-    - :manage_files\r
-    - :browse_repository\r
-    - :view_changesets\r
-\r
-  position: 2\r
-roles_003: \r
-  name: Reporter\r
-  id: 3\r
-  builtin: 0\r
-  permissions: |\r
-    --- \r
-    - :edit_project\r
-    - :manage_members\r
-    - :manage_versions\r
-    - :manage_categories\r
-    - :add_issues\r
-    - :edit_issues\r
-    - :manage_issue_relations\r
-    - :add_issue_notes\r
-    - :move_issues\r
-    - :view_issue_watchers\r
-    - :save_queries\r
-    - :view_gantt\r
-    - :view_calendar\r
-    - :log_time\r
-    - :view_time_entries\r
-    - :manage_news\r
-    - :comment_news\r
-    - :view_documents\r
-    - :manage_documents\r
-    - :view_wiki_pages\r
-    - :view_wiki_edits\r
-    - :edit_wiki_pages\r
-    - :delete_wiki_pages\r
-    - :add_messages\r
-    - :manage_boards\r
-    - :view_files\r
-    - :manage_files\r
-    - :browse_repository\r
-    - :view_changesets\r
-\r
-  position: 3\r
-roles_004: \r
-  name: Non member\r
-  id: 4\r
-  builtin: 1\r
-  permissions: |\r
-    --- \r
-    - :add_issues\r
-    - :edit_issues\r
-    - :manage_issue_relations\r
-    - :add_issue_notes\r
-    - :move_issues\r
-    - :save_queries\r
-    - :view_gantt\r
-    - :view_calendar\r
-    - :log_time\r
-    - :view_time_entries\r
-    - :comment_news\r
-    - :view_documents\r
-    - :manage_documents\r
-    - :view_wiki_pages\r
-    - :view_wiki_edits\r
-    - :edit_wiki_pages\r
-    - :add_messages\r
-    - :view_files\r
-    - :manage_files\r
-    - :browse_repository\r
-    - :view_changesets\r
-\r
-  position: 4\r
-roles_005: \r
-  name: Anonymous\r
-  id: 5\r
-  builtin: 2\r
-  permissions: |\r
-    --- \r
-    - :add_issue_notes\r
-    - :view_gantt\r
-    - :view_calendar\r
-    - :view_time_entries\r
-    - :view_documents\r
-    - :view_wiki_pages\r
-    - :view_wiki_edits\r
-    - :view_files\r
-    - :browse_repository\r
-    - :view_changesets\r
-\r
-  position: 5\r
+--- 
+roles_001: 
+  name: Manager
+  id: 1
+  builtin: 0
+  permissions: |
+    --- 
+    - :add_project
+    - :edit_project
+    - :manage_members
+    - :manage_versions
+    - :manage_categories
+    - :add_issues
+    - :edit_issues
+    - :manage_issue_relations
+    - :add_issue_notes
+    - :move_issues
+    - :delete_issues
+    - :view_issue_watchers
+    - :add_issue_watchers
+    - :manage_public_queries
+    - :save_queries
+    - :view_gantt
+    - :view_calendar
+    - :log_time
+    - :view_time_entries
+    - :edit_time_entries
+    - :delete_time_entries
+    - :manage_news
+    - :comment_news
+    - :view_documents
+    - :manage_documents
+    - :view_wiki_pages
+    - :view_wiki_edits
+    - :edit_wiki_pages
+    - :delete_wiki_pages_attachments
+    - :protect_wiki_pages
+    - :delete_wiki_pages
+    - :rename_wiki_pages
+    - :add_messages
+    - :edit_messages
+    - :delete_messages
+    - :manage_boards
+    - :view_files
+    - :manage_files
+    - :browse_repository
+    - :manage_repository
+    - :view_changesets
+
+  position: 1
+roles_002: 
+  name: Developer
+  id: 2
+  builtin: 0
+  permissions: |
+    --- 
+    - :edit_project
+    - :manage_members
+    - :manage_versions
+    - :manage_categories
+    - :add_issues
+    - :edit_issues
+    - :manage_issue_relations
+    - :add_issue_notes
+    - :move_issues
+    - :delete_issues
+    - :view_issue_watchers
+    - :save_queries
+    - :view_gantt
+    - :view_calendar
+    - :log_time
+    - :view_time_entries
+    - :edit_own_time_entries
+    - :manage_news
+    - :comment_news
+    - :view_documents
+    - :manage_documents
+    - :view_wiki_pages
+    - :view_wiki_edits
+    - :edit_wiki_pages
+    - :protect_wiki_pages
+    - :delete_wiki_pages
+    - :add_messages
+    - :edit_own_messages
+    - :delete_own_messages
+    - :manage_boards
+    - :view_files
+    - :manage_files
+    - :browse_repository
+    - :view_changesets
+
+  position: 2
+roles_003: 
+  name: Reporter
+  id: 3
+  builtin: 0
+  permissions: |
+    --- 
+    - :edit_project
+    - :manage_members
+    - :manage_versions
+    - :manage_categories
+    - :add_issues
+    - :edit_issues
+    - :manage_issue_relations
+    - :add_issue_notes
+    - :move_issues
+    - :view_issue_watchers
+    - :save_queries
+    - :view_gantt
+    - :view_calendar
+    - :log_time
+    - :view_time_entries
+    - :manage_news
+    - :comment_news
+    - :view_documents
+    - :manage_documents
+    - :view_wiki_pages
+    - :view_wiki_edits
+    - :edit_wiki_pages
+    - :delete_wiki_pages
+    - :add_messages
+    - :manage_boards
+    - :view_files
+    - :manage_files
+    - :browse_repository
+    - :view_changesets
+
+  position: 3
+roles_004: 
+  name: Non member
+  id: 4
+  builtin: 1
+  permissions: |
+    --- 
+    - :add_issues
+    - :edit_issues
+    - :manage_issue_relations
+    - :add_issue_notes
+    - :move_issues
+    - :save_queries
+    - :view_gantt
+    - :view_calendar
+    - :log_time
+    - :view_time_entries
+    - :comment_news
+    - :view_documents
+    - :manage_documents
+    - :view_wiki_pages
+    - :view_wiki_edits
+    - :edit_wiki_pages
+    - :add_messages
+    - :view_files
+    - :manage_files
+    - :browse_repository
+    - :view_changesets
+
+  position: 4
+roles_005: 
+  name: Anonymous
+  id: 5
+  builtin: 2
+  permissions: |
+    --- 
+    - :add_issue_notes
+    - :view_gantt
+    - :view_calendar
+    - :view_time_entries
+    - :view_documents
+    - :view_wiki_pages
+    - :view_wiki_edits
+    - :view_files
+    - :browse_repository
+    - :view_changesets
+
+  position: 5
   
\ No newline at end of file
index 4a8a4a2..a44c093 100644 (file)
@@ -1,58 +1,58 @@
---- \r
-time_entries_001: \r
-  created_on: 2007-03-23 12:54:18 +01:00\r
-  tweek: 12\r
-  tmonth: 3\r
-  project_id: 1\r
-  comments: My hours\r
-  updated_on: 2007-03-23 12:54:18 +01:00\r
-  activity_id: 9\r
-  spent_on: 2007-03-23\r
-  issue_id: 1\r
-  id: 1\r
-  hours: 4.25\r
-  user_id: 2\r
-  tyear: 2007\r
-time_entries_002: \r
-  created_on: 2007-03-23 14:11:04 +01:00\r
-  tweek: 11\r
-  tmonth: 3\r
-  project_id: 1\r
-  comments: ""\r
-  updated_on: 2007-03-23 14:11:04 +01:00\r
-  activity_id: 9\r
-  spent_on: 2007-03-12\r
-  issue_id: 1\r
-  id: 2\r
-  hours: 150.0\r
-  user_id: 1\r
-  tyear: 2007\r
-time_entries_003: \r
-  created_on: 2007-04-21 12:20:48 +02:00\r
-  tweek: 16\r
-  tmonth: 4\r
-  project_id: 1\r
-  comments: ""\r
-  updated_on: 2007-04-21 12:20:48 +02:00\r
-  activity_id: 9\r
-  spent_on: 2007-04-21\r
-  issue_id: 3\r
-  id: 3\r
-  hours: 1.0\r
-  user_id: 1\r
-  tyear: 2007\r
-time_entries_004: \r
-  created_on: 2007-04-22 12:20:48 +02:00\r
-  tweek: 16\r
-  tmonth: 4\r
-  project_id: 3\r
-  comments: Time spent on a subproject\r
-  updated_on: 2007-04-22 12:20:48 +02:00\r
-  activity_id: 10\r
-  spent_on: 2007-04-22\r
-  issue_id: \r
-  id: 4\r
-  hours: 7.65\r
-  user_id: 1\r
-  tyear: 2007\r
+--- 
+time_entries_001: 
+  created_on: 2007-03-23 12:54:18 +01:00
+  tweek: 12
+  tmonth: 3
+  project_id: 1
+  comments: My hours
+  updated_on: 2007-03-23 12:54:18 +01:00
+  activity_id: 9
+  spent_on: 2007-03-23
+  issue_id: 1
+  id: 1
+  hours: 4.25
+  user_id: 2
+  tyear: 2007
+time_entries_002: 
+  created_on: 2007-03-23 14:11:04 +01:00
+  tweek: 11
+  tmonth: 3
+  project_id: 1
+  comments: ""
+  updated_on: 2007-03-23 14:11:04 +01:00
+  activity_id: 9
+  spent_on: 2007-03-12
+  issue_id: 1
+  id: 2
+  hours: 150.0
+  user_id: 1
+  tyear: 2007
+time_entries_003: 
+  created_on: 2007-04-21 12:20:48 +02:00
+  tweek: 16
+  tmonth: 4
+  project_id: 1
+  comments: ""
+  updated_on: 2007-04-21 12:20:48 +02:00
+  activity_id: 9
+  spent_on: 2007-04-21
+  issue_id: 3
+  id: 3
+  hours: 1.0
+  user_id: 1
+  tyear: 2007
+time_entries_004: 
+  created_on: 2007-04-22 12:20:48 +02:00
+  tweek: 16
+  tmonth: 4
+  project_id: 3
+  comments: Time spent on a subproject
+  updated_on: 2007-04-22 12:20:48 +02:00
+  activity_id: 10
+  spent_on: 2007-04-22
+  issue_id: 
+  id: 4
+  hours: 7.65
+  user_id: 1
+  tyear: 2007
   
\ No newline at end of file
index e040a39..166d37e 100644 (file)
@@ -1,13 +1,13 @@
---- \r
-tokens_001: \r
-  created_on: 2007-01-21 00:39:12 +01:00\r
-  action: register\r
-  id: 1\r
-  value: DwMJ2yIxBNeAk26znMYzYmz5dAiIina0GFrPnGTM\r
-  user_id: 1\r
-tokens_002: \r
-  created_on: 2007-01-21 00:39:52 +01:00\r
-  action: recovery\r
-  id: 2\r
-  value: sahYSIaoYrsZUef86sTHrLISdznW6ApF36h5WSnm\r
-  user_id: 2\r
+--- 
+tokens_001: 
+  created_on: 2007-01-21 00:39:12 +01:00
+  action: register
+  id: 1
+  value: DwMJ2yIxBNeAk26znMYzYmz5dAiIina0GFrPnGTM
+  user_id: 1
+tokens_002: 
+  created_on: 2007-01-21 00:39:52 +01:00
+  action: recovery
+  id: 2
+  value: sahYSIaoYrsZUef86sTHrLISdznW6ApF36h5WSnm
+  user_id: 2
index 2643e8d..43395a2 100644 (file)
@@ -1,16 +1,16 @@
---- \r
-trackers_001: \r
-  name: Bug\r
-  id: 1\r
-  is_in_chlog: true\r
-  position: 1\r
-trackers_002: \r
-  name: Feature request\r
-  id: 2\r
-  is_in_chlog: true\r
-  position: 2\r
-trackers_003: \r
-  name: Support request\r
-  id: 3\r
-  is_in_chlog: false\r
-  position: 3\r
+--- 
+trackers_001: 
+  name: Bug
+  id: 1
+  is_in_chlog: true
+  position: 1
+trackers_002: 
+  name: Feature request
+  id: 2
+  is_in_chlog: true
+  position: 2
+trackers_003: 
+  name: Support request
+  id: 3
+  is_in_chlog: false
+  position: 3
index 442ddc1..29d4f15 100644 (file)
---- \r
-users_004: \r
-  created_on: 2006-07-19 19:34:07 +02:00\r
-  status: 1\r
-  last_login_on: \r
-  language: en\r
-  hashed_password: 4e4aeb7baaf0706bd670263fef42dad15763b608\r
-  updated_on: 2006-07-19 19:34:07 +02:00\r
-  admin: false\r
-  mail: rhill@somenet.foo\r
-  lastname: Hill\r
-  firstname: Robert\r
-  id: 4\r
-  auth_source_id: \r
-  mail_notification: true\r
-  login: rhill\r
-  type: User\r
-users_001: \r
-  created_on: 2006-07-19 19:12:21 +02:00\r
-  status: 1\r
-  last_login_on: 2006-07-19 22:57:52 +02:00\r
-  language: en\r
-  hashed_password: d033e22ae348aeb5660fc2140aec35850c4da997\r
-  updated_on: 2006-07-19 22:57:52 +02:00\r
-  admin: true\r
-  mail: admin@somenet.foo\r
-  lastname: Admin\r
-  firstname: redMine\r
-  id: 1\r
-  auth_source_id: \r
-  mail_notification: true\r
-  login: admin\r
-  type: User\r
-users_002: \r
-  created_on: 2006-07-19 19:32:09 +02:00\r
-  status: 1\r
-  last_login_on: 2006-07-19 22:42:15 +02:00\r
-  language: en\r
-  hashed_password: a9a653d4151fa2c081ba1ffc2c2726f3b80b7d7d\r
-  updated_on: 2006-07-19 22:42:15 +02:00\r
-  admin: false\r
-  mail: jsmith@somenet.foo\r
-  lastname: Smith\r
-  firstname: John\r
-  id: 2\r
-  auth_source_id: \r
-  mail_notification: true\r
-  login: jsmith\r
-  type: User\r
-users_003: \r
-  created_on: 2006-07-19 19:33:19 +02:00\r
-  status: 1\r
-  last_login_on: \r
-  language: en\r
-  hashed_password: 7feb7657aa7a7bf5aef3414a5084875f27192415\r
-  updated_on: 2006-07-19 19:33:19 +02:00\r
-  admin: false\r
-  mail: dlopper@somenet.foo\r
-  lastname: Lopper\r
-  firstname: Dave\r
-  id: 3\r
-  auth_source_id: \r
-  mail_notification: true\r
-  login: dlopper\r
-  type: User\r
-users_005: \r
-  id: 5\r
-  created_on: 2006-07-19 19:33:19 +02:00\r
-  # Locked\r
-  status: 3\r
-  last_login_on: \r
-  language: en\r
-  hashed_password: 7feb7657aa7a7bf5aef3414a5084875f27192415\r
-  updated_on: 2006-07-19 19:33:19 +02:00\r
-  admin: false\r
-  mail: dlopper2@somenet.foo\r
-  lastname: Lopper2\r
-  firstname: Dave2\r
-  auth_source_id: \r
-  mail_notification: true\r
-  login: dlopper2\r
-  type: User\r
-users_006: \r
-  id: 6\r
-  created_on: 2006-07-19 19:33:19 +02:00\r
-  status: 1\r
-  last_login_on: \r
-  language: ''\r
-  hashed_password: 1\r
-  updated_on: 2006-07-19 19:33:19 +02:00\r
-  admin: false\r
-  mail: ''\r
-  lastname: Anonymous\r
-  firstname: ''\r
-  auth_source_id: \r
-  mail_notification: false\r
-  login: ''\r
-  type: AnonymousUser\r
-users_007: \r
-  id: 7\r
-  created_on: 2006-07-19 19:33:19 +02:00\r
-  status: 1\r
-  last_login_on: \r
-  language: ''\r
-  hashed_password: 1\r
-  updated_on: 2006-07-19 19:33:19 +02:00\r
-  admin: false\r
-  mail: someone@foo.bar\r
-  lastname: One\r
-  firstname: Some\r
-  auth_source_id: \r
-  mail_notification: false\r
-  login: someone\r
-  type: User\r
-users_008: \r
-  id: 8\r
-  created_on: 2006-07-19 19:33:19 +02:00\r
-  status: 1\r
-  last_login_on: \r
-  language: 'it'\r
-  hashed_password: 1\r
-  updated_on: 2006-07-19 19:33:19 +02:00\r
-  admin: false\r
-  mail: miscuser8@foo.bar\r
-  lastname: Misc\r
-  firstname: User\r
-  auth_source_id: \r
-  mail_notification: false\r
-  login: miscuser8\r
-  type: User\r
-users_009: \r
-  id: 9\r
-  created_on: 2006-07-19 19:33:19 +02:00\r
-  status: 1\r
-  last_login_on: \r
-  language: 'it'\r
-  hashed_password: 1\r
-  updated_on: 2006-07-19 19:33:19 +02:00\r
-  admin: false\r
-  mail: miscuser9@foo.bar\r
-  lastname: Misc\r
-  firstname: User\r
-  auth_source_id: \r
-  mail_notification: false\r
-  login: miscuser9\r
-  type: User\r
-groups_010: \r
-  id: 10\r
-  lastname: A Team\r
-  type: Group\r
-groups_011: \r
-  id: 11\r
-  lastname: B Team\r
-  type: Group\r
-\r
+--- 
+users_004: 
+  created_on: 2006-07-19 19:34:07 +02:00
+  status: 1
+  last_login_on: 
+  language: en
+  hashed_password: 4e4aeb7baaf0706bd670263fef42dad15763b608
+  updated_on: 2006-07-19 19:34:07 +02:00
+  admin: false
+  mail: rhill@somenet.foo
+  lastname: Hill
+  firstname: Robert
+  id: 4
+  auth_source_id: 
+  mail_notification: true
+  login: rhill
+  type: User
+users_001: 
+  created_on: 2006-07-19 19:12:21 +02:00
+  status: 1
+  last_login_on: 2006-07-19 22:57:52 +02:00
+  language: en
+  hashed_password: d033e22ae348aeb5660fc2140aec35850c4da997
+  updated_on: 2006-07-19 22:57:52 +02:00
+  admin: true
+  mail: admin@somenet.foo
+  lastname: Admin
+  firstname: redMine
+  id: 1
+  auth_source_id: 
+  mail_notification: true
+  login: admin
+  type: User
+users_002: 
+  created_on: 2006-07-19 19:32:09 +02:00
+  status: 1
+  last_login_on: 2006-07-19 22:42:15 +02:00
+  language: en
+  hashed_password: a9a653d4151fa2c081ba1ffc2c2726f3b80b7d7d
+  updated_on: 2006-07-19 22:42:15 +02:00
+  admin: false
+  mail: jsmith@somenet.foo
+  lastname: Smith
+  firstname: John
+  id: 2
+  auth_source_id: 
+  mail_notification: true
+  login: jsmith
+  type: User
+users_003: 
+  created_on: 2006-07-19 19:33:19 +02:00
+  status: 1
+  last_login_on: 
+  language: en
+  hashed_password: 7feb7657aa7a7bf5aef3414a5084875f27192415
+  updated_on: 2006-07-19 19:33:19 +02:00
+  admin: false
+  mail: dlopper@somenet.foo
+  lastname: Lopper
+  firstname: Dave
+  id: 3
+  auth_source_id: 
+  mail_notification: true
+  login: dlopper
+  type: User
+users_005: 
+  id: 5
+  created_on: 2006-07-19 19:33:19 +02:00
+  # Locked
+  status: 3
+  last_login_on: 
+  language: en
+  hashed_password: 7feb7657aa7a7bf5aef3414a5084875f27192415
+  updated_on: 2006-07-19 19:33:19 +02:00
+  admin: false
+  mail: dlopper2@somenet.foo
+  lastname: Lopper2
+  firstname: Dave2
+  auth_source_id: 
+  mail_notification: true
+  login: dlopper2
+  type: User
+users_006: 
+  id: 6
+  created_on: 2006-07-19 19:33:19 +02:00
+  status: 1
+  last_login_on: 
+  language: ''
+  hashed_password: 1
+  updated_on: 2006-07-19 19:33:19 +02:00
+  admin: false
+  mail: ''
+  lastname: Anonymous
+  firstname: ''
+  auth_source_id: 
+  mail_notification: false
+  login: ''
+  type: AnonymousUser
+users_007: 
+  id: 7
+  created_on: 2006-07-19 19:33:19 +02:00
+  status: 1
+  last_login_on: 
+  language: ''
+  hashed_password: 1
+  updated_on: 2006-07-19 19:33:19 +02:00
+  admin: false
+  mail: someone@foo.bar
+  lastname: One
+  firstname: Some
+  auth_source_id: 
+  mail_notification: false
+  login: someone
+  type: User
+users_008: 
+  id: 8
+  created_on: 2006-07-19 19:33:19 +02:00
+  status: 1
+  last_login_on: 
+  language: 'it'
+  hashed_password: 1
+  updated_on: 2006-07-19 19:33:19 +02:00
+  admin: false
+  mail: miscuser8@foo.bar
+  lastname: Misc
+  firstname: User
+  auth_source_id: 
+  mail_notification: false
+  login: miscuser8
+  type: User
+users_009: 
+  id: 9
+  created_on: 2006-07-19 19:33:19 +02:00
+  status: 1
+  last_login_on: 
+  language: 'it'
+  hashed_password: 1
+  updated_on: 2006-07-19 19:33:19 +02:00
+  admin: false
+  mail: miscuser9@foo.bar
+  lastname: Misc
+  firstname: User
+  auth_source_id: 
+  mail_notification: false
+  login: miscuser9
+  type: User
+groups_010: 
+  id: 10
+  lastname: A Team
+  type: Group
+groups_011: 
+  id: 11
+  lastname: B Team
+  type: Group
+
   
\ No newline at end of file
index 62c5e6f..9306811 100644 (file)
@@ -1,26 +1,26 @@
---- \r
-versions_001: \r
-  created_on: 2006-07-19 21:00:07 +02:00\r
-  name: "0.1"\r
-  project_id: 1\r
-  updated_on: 2006-07-19 21:00:07 +02:00\r
-  id: 1\r
-  description: Beta\r
-  effective_date: 2006-07-01\r
-versions_002: \r
-  created_on: 2006-07-19 21:00:33 +02:00\r
-  name: "1.0"\r
-  project_id: 1\r
-  updated_on: 2006-07-19 21:00:33 +02:00\r
-  id: 2\r
-  description: Stable release\r
-  effective_date: <%= 20.day.from_now.to_date.to_s(:db) %>\r
-versions_003: \r
-  created_on: 2006-07-19 21:00:33 +02:00\r
-  name: "2.0"\r
-  project_id: 1\r
-  updated_on: 2006-07-19 21:00:33 +02:00\r
-  id: 3\r
-  description: Future version\r
-  effective_date: \r
+--- 
+versions_001: 
+  created_on: 2006-07-19 21:00:07 +02:00
+  name: "0.1"
+  project_id: 1
+  updated_on: 2006-07-19 21:00:07 +02:00
+  id: 1
+  description: Beta
+  effective_date: 2006-07-01
+versions_002: 
+  created_on: 2006-07-19 21:00:33 +02:00
+  name: "1.0"
+  project_id: 1
+  updated_on: 2006-07-19 21:00:33 +02:00
+  id: 2
+  description: Stable release
+  effective_date: <%= 20.day.from_now.to_date.to_s(:db) %>
+versions_003: 
+  created_on: 2006-07-19 21:00:33 +02:00
+  name: "2.0"
+  project_id: 1
+  updated_on: 2006-07-19 21:00:33 +02:00
+  id: 3
+  description: Future version
+  effective_date: 
   
\ No newline at end of file
index 2601490..652f0fb 100644 (file)
@@ -1,52 +1,56 @@
---- \r
-wiki_content_versions_001: \r
-  updated_on: 2007-03-07 00:08:07 +01:00\r
-  page_id: 1\r
-  id: 1\r
-  version: 1\r
-  author_id: 2\r
-  comments: Page creation\r
-  wiki_content_id: 1\r
-  compression: ""\r
-  data: |-\r
-    h1. CookBook documentation\r\r
-    \r\r
-    Some [[documentation]] here...\r
-wiki_content_versions_002: \r
-  updated_on: 2007-03-07 00:08:34 +01:00\r
-  page_id: 1\r
-  id: 2\r
-  version: 2\r
-  author_id: 1\r
-  comments: Small update\r
-  wiki_content_id: 1\r
-  compression: ""\r
-  data: |-\r
-    h1. CookBook documentation\r\r
-    \r\r
-    Some updated [[documentation]] here...\r
-wiki_content_versions_003: \r
-  updated_on: 2007-03-07 00:10:51 +01:00\r
-  page_id: 1\r
-  id: 3\r
-  version: 3\r
-  author_id: 1\r
-  comments: ""\r
-  wiki_content_id: 1\r
-  compression: ""\r
-  data: |-\r
-    h1. CookBook documentation\r
-    Some updated [[documentation]] here...\r
-wiki_content_versions_004: \r
-  data: |-\r
-    h1. Another page\r
-    \r
-    This is a link to a ticket: #2\r
-  updated_on: 2007-03-08 00:18:07 +01:00\r
-  page_id: 2\r
-  wiki_content_id: 2\r
-  id: 4\r
-  version: 1\r
-  author_id: 1\r
-  comments: \r
-  \r
+--- 
+wiki_content_versions_001: 
+  updated_on: 2007-03-07 00:08:07 +01:00
+  page_id: 1
+  id: 1
+  version: 1
+  author_id: 2
+  comments: Page creation
+  wiki_content_id: 1
+  compression: ""
+  data: |-
+    h1. CookBook documentation
+
+    
+
+    Some [[documentation]] here...
+wiki_content_versions_002: 
+  updated_on: 2007-03-07 00:08:34 +01:00
+  page_id: 1
+  id: 2
+  version: 2
+  author_id: 1
+  comments: Small update
+  wiki_content_id: 1
+  compression: ""
+  data: |-
+    h1. CookBook documentation
+
+    
+
+    Some updated [[documentation]] here...
+wiki_content_versions_003: 
+  updated_on: 2007-03-07 00:10:51 +01:00
+  page_id: 1
+  id: 3
+  version: 3
+  author_id: 1
+  comments: ""
+  wiki_content_id: 1
+  compression: ""
+  data: |-
+    h1. CookBook documentation
+    Some updated [[documentation]] here...
+wiki_content_versions_004: 
+  data: |-
+    h1. Another page
+    
+    This is a link to a ticket: #2
+  updated_on: 2007-03-08 00:18:07 +01:00
+  page_id: 2
+  wiki_content_id: 2
+  id: 4
+  version: 1
+  author_id: 1
+  comments: 
+  
index 8798ff2..96aa2cc 100644 (file)
@@ -1,72 +1,74 @@
---- \r
-wiki_contents_001: \r
-  text: |-\r
-    h1. CookBook documentation\r\r
-    {{child_pages}}\r\r
-    Some updated [[documentation]] here with gzipped history\r
-  updated_on: 2007-03-07 00:10:51 +01:00\r
-  page_id: 1\r
-  id: 1\r
-  version: 3\r
-  author_id: 1\r
-  comments: Gzip compression activated\r
-wiki_contents_002: \r
-  text: |-\r
-    h1. Another page\r
-    \r
-    This is a link to a ticket: #2\r
-    And this is an included page:\r
-    {{include(Page with an inline image)}}\r
-  updated_on: 2007-03-08 00:18:07 +01:00\r
-  page_id: 2\r
-  id: 2\r
-  version: 1\r
-  author_id: 1\r
-  comments: \r
-wiki_contents_003: \r
-  text: |-\r
-    h1. Start page\r
-    \r
-    E-commerce web site start page\r
-  updated_on: 2007-03-08 00:18:07 +01:00\r
-  page_id: 3\r
-  id: 3\r
-  version: 1\r
-  author_id: 1\r
-  comments: \r
-wiki_contents_004: \r
-  text: |-\r
-    h1. Page with an inline image\r
-    \r
-    This is an inline image:\r
-    \r
-    !logo.gif!\r
-  updated_on: 2007-03-08 00:18:07 +01:00\r
-  page_id: 4\r
-  id: 4\r
-  version: 1\r
-  author_id: 1\r
-  comments: \r
-wiki_contents_005: \r
-  text: |-\r
-    h1. Child page 1\r
-    \r
-    This is a child page\r
-  updated_on: 2007-03-08 00:18:07 +01:00\r
-  page_id: 5\r
-  id: 5\r
-  version: 1\r
-  author_id: 1\r
-  comments: \r
-wiki_contents_006: \r
-  text: |-\r
-    h1. Child page 2\r
-    \r
-    This is a child page\r
-  updated_on: 2007-03-08 00:18:07 +01:00\r
-  page_id: 6\r
-  id: 6\r
-  version: 1\r
-  author_id: 1\r
-  comments: \r
+--- 
+wiki_contents_001: 
+  text: |-
+    h1. CookBook documentation
+
+    {{child_pages}}
+
+    Some updated [[documentation]] here with gzipped history
+  updated_on: 2007-03-07 00:10:51 +01:00
+  page_id: 1
+  id: 1
+  version: 3
+  author_id: 1
+  comments: Gzip compression activated
+wiki_contents_002: 
+  text: |-
+    h1. Another page
+    
+    This is a link to a ticket: #2
+    And this is an included page:
+    {{include(Page with an inline image)}}
+  updated_on: 2007-03-08 00:18:07 +01:00
+  page_id: 2
+  id: 2
+  version: 1
+  author_id: 1
+  comments: 
+wiki_contents_003: 
+  text: |-
+    h1. Start page
+    
+    E-commerce web site start page
+  updated_on: 2007-03-08 00:18:07 +01:00
+  page_id: 3
+  id: 3
+  version: 1
+  author_id: 1
+  comments: 
+wiki_contents_004: 
+  text: |-
+    h1. Page with an inline image
+    
+    This is an inline image:
+    
+    !logo.gif!
+  updated_on: 2007-03-08 00:18:07 +01:00
+  page_id: 4
+  id: 4
+  version: 1
+  author_id: 1
+  comments: 
+wiki_contents_005: 
+  text: |-
+    h1. Child page 1
+    
+    This is a child page
+  updated_on: 2007-03-08 00:18:07 +01:00
+  page_id: 5
+  id: 5
+  version: 1
+  author_id: 1
+  comments: 
+wiki_contents_006: 
+  text: |-
+    h1. Child page 2
+    
+    This is a child page
+  updated_on: 2007-03-08 00:18:07 +01:00
+  page_id: 6
+  id: 6
+  version: 1
+  author_id: 1
+  comments: 
   
\ No newline at end of file
index 8d29c2f..a0b8b79 100644 (file)
@@ -1,44 +1,44 @@
---- \r
-wiki_pages_001: \r
-  created_on: 2007-03-07 00:08:07 +01:00\r
-  title: CookBook_documentation\r
-  id: 1\r
-  wiki_id: 1\r
-  protected: true\r
-  parent_id: \r
-wiki_pages_002: \r
-  created_on: 2007-03-08 00:18:07 +01:00\r
-  title: Another_page\r
-  id: 2\r
-  wiki_id: 1\r
-  protected: false\r
-  parent_id: \r
-wiki_pages_003: \r
-  created_on: 2007-03-08 00:18:07 +01:00\r
-  title: Start_page\r
-  id: 3\r
-  wiki_id: 2\r
-  protected: false\r
-  parent_id: \r
-wiki_pages_004: \r
-  created_on: 2007-03-08 00:18:07 +01:00\r
-  title: Page_with_an_inline_image\r
-  id: 4\r
-  wiki_id: 1\r
-  protected: false\r
-  parent_id: 1\r
-wiki_pages_005: \r
-  created_on: 2007-03-08 00:18:07 +01:00\r
-  title: Child_1\r
-  id: 5\r
-  wiki_id: 1\r
-  protected: false\r
-  parent_id: 2\r
-wiki_pages_006: \r
-  created_on: 2007-03-08 00:18:07 +01:00\r
-  title: Child_2\r
-  id: 6\r
-  wiki_id: 1\r
-  protected: false\r
-  parent_id: 2\r
+--- 
+wiki_pages_001: 
+  created_on: 2007-03-07 00:08:07 +01:00
+  title: CookBook_documentation
+  id: 1
+  wiki_id: 1
+  protected: true
+  parent_id: 
+wiki_pages_002: 
+  created_on: 2007-03-08 00:18:07 +01:00
+  title: Another_page
+  id: 2
+  wiki_id: 1
+  protected: false
+  parent_id: 
+wiki_pages_003: 
+  created_on: 2007-03-08 00:18:07 +01:00
+  title: Start_page
+  id: 3
+  wiki_id: 2
+  protected: false
+  parent_id: 
+wiki_pages_004: 
+  created_on: 2007-03-08 00:18:07 +01:00
+  title: Page_with_an_inline_image
+  id: 4
+  wiki_id: 1
+  protected: false
+  parent_id: 1
+wiki_pages_005: 
+  created_on: 2007-03-08 00:18:07 +01:00
+  title: Child_1
+  id: 5
+  wiki_id: 1
+  protected: false
+  parent_id: 2
+wiki_pages_006: 
+  created_on: 2007-03-08 00:18:07 +01:00
+  title: Child_2
+  id: 6
+  wiki_id: 1
+  protected: false
+  parent_id: 2
   
\ No newline at end of file
index dd1c55c..1e74039 100644 (file)
@@ -1,12 +1,12 @@
---- \r
-wikis_001: \r
-  status: 1\r
-  start_page: CookBook documentation\r
-  project_id: 1\r
-  id: 1\r
-wikis_002: \r
-  status: 1\r
-  start_page: Start page\r
-  project_id: 2\r
-  id: 2\r
+--- 
+wikis_001: 
+  status: 1
+  start_page: CookBook documentation
+  project_id: 1
+  id: 1
+wikis_002: 
+  status: 1
+  start_page: Start page
+  project_id: 2
+  id: 2
   
\ No newline at end of file
index bef5ae0..6126055 100644 (file)
---- \r
-workflows_189: \r
-  new_status_id: 5\r
-  role_id: 1\r
-  old_status_id: 2\r
-  id: 189\r
-  tracker_id: 3\r
-workflows_001: \r
-  new_status_id: 2\r
-  role_id: 1\r
-  old_status_id: 1\r
-  id: 1\r
-  tracker_id: 1\r
-workflows_002: \r
-  new_status_id: 3\r
-  role_id: 1\r
-  old_status_id: 1\r
-  id: 2\r
-  tracker_id: 1\r
-workflows_003: \r
-  new_status_id: 4\r
-  role_id: 1\r
-  old_status_id: 1\r
-  id: 3\r
-  tracker_id: 1\r
-workflows_110: \r
-  new_status_id: 6\r
-  role_id: 1\r
-  old_status_id: 4\r
-  id: 110\r
-  tracker_id: 2\r
-workflows_004: \r
-  new_status_id: 5\r
-  role_id: 1\r
-  old_status_id: 1\r
-  id: 4\r
-  tracker_id: 1\r
-workflows_030: \r
-  new_status_id: 5\r
-  role_id: 1\r
-  old_status_id: 6\r
-  id: 30\r
-  tracker_id: 1\r
-workflows_111: \r
-  new_status_id: 1\r
-  role_id: 1\r
-  old_status_id: 5\r
-  id: 111\r
-  tracker_id: 2\r
-workflows_005: \r
-  new_status_id: 6\r
-  role_id: 1\r
-  old_status_id: 1\r
-  id: 5\r
-  tracker_id: 1\r
-workflows_031: \r
-  new_status_id: 2\r
-  role_id: 2\r
-  old_status_id: 1\r
-  id: 31\r
-  tracker_id: 1\r
-workflows_112: \r
-  new_status_id: 2\r
-  role_id: 1\r
-  old_status_id: 5\r
-  id: 112\r
-  tracker_id: 2\r
-workflows_006: \r
-  new_status_id: 1\r
-  role_id: 1\r
-  old_status_id: 2\r
-  id: 6\r
-  tracker_id: 1\r
-workflows_032: \r
-  new_status_id: 3\r
-  role_id: 2\r
-  old_status_id: 1\r
-  id: 32\r
-  tracker_id: 1\r
-workflows_113: \r
-  new_status_id: 3\r
-  role_id: 1\r
-  old_status_id: 5\r
-  id: 113\r
-  tracker_id: 2\r
-workflows_220: \r
-  new_status_id: 6\r
-  role_id: 2\r
-  old_status_id: 2\r
-  id: 220\r
-  tracker_id: 3\r
-workflows_007: \r
-  new_status_id: 3\r
-  role_id: 1\r
-  old_status_id: 2\r
-  id: 7\r
-  tracker_id: 1\r
-workflows_033: \r
-  new_status_id: 4\r
-  role_id: 2\r
-  old_status_id: 1\r
-  id: 33\r
-  tracker_id: 1\r
-workflows_060: \r
-  new_status_id: 5\r
-  role_id: 2\r
-  old_status_id: 6\r
-  id: 60\r
-  tracker_id: 1\r
-workflows_114: \r
-  new_status_id: 4\r
-  role_id: 1\r
-  old_status_id: 5\r
-  id: 114\r
-  tracker_id: 2\r
-workflows_140: \r
-  new_status_id: 6\r
-  role_id: 2\r
-  old_status_id: 4\r
-  id: 140\r
-  tracker_id: 2\r
-workflows_221: \r
-  new_status_id: 1\r
-  role_id: 2\r
-  old_status_id: 3\r
-  id: 221\r
-  tracker_id: 3\r
-workflows_008: \r
-  new_status_id: 4\r
-  role_id: 1\r
-  old_status_id: 2\r
-  id: 8\r
-  tracker_id: 1\r
-workflows_034: \r
-  new_status_id: 5\r
-  role_id: 2\r
-  old_status_id: 1\r
-  id: 34\r
-  tracker_id: 1\r
-workflows_115: \r
-  new_status_id: 6\r
-  role_id: 1\r
-  old_status_id: 5\r
-  id: 115\r
-  tracker_id: 2\r
-workflows_141: \r
-  new_status_id: 1\r
-  role_id: 2\r
-  old_status_id: 5\r
-  id: 141\r
-  tracker_id: 2\r
-workflows_222: \r
-  new_status_id: 2\r
-  role_id: 2\r
-  old_status_id: 3\r
-  id: 222\r
-  tracker_id: 3\r
-workflows_223: \r
-  new_status_id: 4\r
-  role_id: 2\r
-  old_status_id: 3\r
-  id: 223\r
-  tracker_id: 3\r
-workflows_009: \r
-  new_status_id: 5\r
-  role_id: 1\r
-  old_status_id: 2\r
-  id: 9\r
-  tracker_id: 1\r
-workflows_035: \r
-  new_status_id: 6\r
-  role_id: 2\r
-  old_status_id: 1\r
-  id: 35\r
-  tracker_id: 1\r
-workflows_061: \r
-  new_status_id: 2\r
-  role_id: 3\r
-  old_status_id: 1\r
-  id: 61\r
-  tracker_id: 1\r
-workflows_116: \r
-  new_status_id: 1\r
-  role_id: 1\r
-  old_status_id: 6\r
-  id: 116\r
-  tracker_id: 2\r
-workflows_142: \r
-  new_status_id: 2\r
-  role_id: 2\r
-  old_status_id: 5\r
-  id: 142\r
-  tracker_id: 2\r
-workflows_250: \r
-  new_status_id: 6\r
-  role_id: 3\r
-  old_status_id: 2\r
-  id: 250\r
-  tracker_id: 3\r
-workflows_224: \r
-  new_status_id: 5\r
-  role_id: 2\r
-  old_status_id: 3\r
-  id: 224\r
-  tracker_id: 3\r
-workflows_036: \r
-  new_status_id: 1\r
-  role_id: 2\r
-  old_status_id: 2\r
-  id: 36\r
-  tracker_id: 1\r
-workflows_062: \r
-  new_status_id: 3\r
-  role_id: 3\r
-  old_status_id: 1\r
-  id: 62\r
-  tracker_id: 1\r
-workflows_117: \r
-  new_status_id: 2\r
-  role_id: 1\r
-  old_status_id: 6\r
-  id: 117\r
-  tracker_id: 2\r
-workflows_143: \r
-  new_status_id: 3\r
-  role_id: 2\r
-  old_status_id: 5\r
-  id: 143\r
-  tracker_id: 2\r
-workflows_170: \r
-  new_status_id: 6\r
-  role_id: 3\r
-  old_status_id: 4\r
-  id: 170\r
-  tracker_id: 2\r
-workflows_251: \r
-  new_status_id: 1\r
-  role_id: 3\r
-  old_status_id: 3\r
-  id: 251\r
-  tracker_id: 3\r
-workflows_225: \r
-  new_status_id: 6\r
-  role_id: 2\r
-  old_status_id: 3\r
-  id: 225\r
-  tracker_id: 3\r
-workflows_063: \r
-  new_status_id: 4\r
-  role_id: 3\r
-  old_status_id: 1\r
-  id: 63\r
-  tracker_id: 1\r
-workflows_090: \r
-  new_status_id: 5\r
-  role_id: 3\r
-  old_status_id: 6\r
-  id: 90\r
-  tracker_id: 1\r
-workflows_118: \r
-  new_status_id: 3\r
-  role_id: 1\r
-  old_status_id: 6\r
-  id: 118\r
-  tracker_id: 2\r
-workflows_144: \r
-  new_status_id: 4\r
-  role_id: 2\r
-  old_status_id: 5\r
-  id: 144\r
-  tracker_id: 2\r
-workflows_252: \r
-  new_status_id: 2\r
-  role_id: 3\r
-  old_status_id: 3\r
-  id: 252\r
-  tracker_id: 3\r
-workflows_226: \r
-  new_status_id: 1\r
-  role_id: 2\r
-  old_status_id: 4\r
-  id: 226\r
-  tracker_id: 3\r
-workflows_038: \r
-  new_status_id: 4\r
-  role_id: 2\r
-  old_status_id: 2\r
-  id: 38\r
-  tracker_id: 1\r
-workflows_064: \r
-  new_status_id: 5\r
-  role_id: 3\r
-  old_status_id: 1\r
-  id: 64\r
-  tracker_id: 1\r
-workflows_091: \r
-  new_status_id: 2\r
-  role_id: 1\r
-  old_status_id: 1\r
-  id: 91\r
-  tracker_id: 2\r
-workflows_119: \r
-  new_status_id: 4\r
-  role_id: 1\r
-  old_status_id: 6\r
-  id: 119\r
-  tracker_id: 2\r
-workflows_145: \r
-  new_status_id: 6\r
-  role_id: 2\r
-  old_status_id: 5\r
-  id: 145\r
-  tracker_id: 2\r
-workflows_171: \r
-  new_status_id: 1\r
-  role_id: 3\r
-  old_status_id: 5\r
-  id: 171\r
-  tracker_id: 2\r
-workflows_253: \r
-  new_status_id: 4\r
-  role_id: 3\r
-  old_status_id: 3\r
-  id: 253\r
-  tracker_id: 3\r
-workflows_227: \r
-  new_status_id: 2\r
-  role_id: 2\r
-  old_status_id: 4\r
-  id: 227\r
-  tracker_id: 3\r
-workflows_039: \r
-  new_status_id: 5\r
-  role_id: 2\r
-  old_status_id: 2\r
-  id: 39\r
-  tracker_id: 1\r
-workflows_065: \r
-  new_status_id: 6\r
-  role_id: 3\r
-  old_status_id: 1\r
-  id: 65\r
-  tracker_id: 1\r
-workflows_092: \r
-  new_status_id: 3\r
-  role_id: 1\r
-  old_status_id: 1\r
-  id: 92\r
-  tracker_id: 2\r
-workflows_146: \r
-  new_status_id: 1\r
-  role_id: 2\r
-  old_status_id: 6\r
-  id: 146\r
-  tracker_id: 2\r
-workflows_172: \r
-  new_status_id: 2\r
-  role_id: 3\r
-  old_status_id: 5\r
-  id: 172\r
-  tracker_id: 2\r
-workflows_254: \r
-  new_status_id: 5\r
-  role_id: 3\r
-  old_status_id: 3\r
-  id: 254\r
-  tracker_id: 3\r
-workflows_228: \r
-  new_status_id: 3\r
-  role_id: 2\r
-  old_status_id: 4\r
-  id: 228\r
-  tracker_id: 3\r
-workflows_066: \r
-  new_status_id: 1\r
-  role_id: 3\r
-  old_status_id: 2\r
-  id: 66\r
-  tracker_id: 1\r
-workflows_093: \r
-  new_status_id: 4\r
-  role_id: 1\r
-  old_status_id: 1\r
-  id: 93\r
-  tracker_id: 2\r
-workflows_147: \r
-  new_status_id: 2\r
-  role_id: 2\r
-  old_status_id: 6\r
-  id: 147\r
-  tracker_id: 2\r
-workflows_173: \r
-  new_status_id: 3\r
-  role_id: 3\r
-  old_status_id: 5\r
-  id: 173\r
-  tracker_id: 2\r
-workflows_255: \r
-  new_status_id: 6\r
-  role_id: 3\r
-  old_status_id: 3\r
-  id: 255\r
-  tracker_id: 3\r
-workflows_229: \r
-  new_status_id: 5\r
-  role_id: 2\r
-  old_status_id: 4\r
-  id: 229\r
-  tracker_id: 3\r
-workflows_067: \r
-  new_status_id: 3\r
-  role_id: 3\r
-  old_status_id: 2\r
-  id: 67\r
-  tracker_id: 1\r
-workflows_148: \r
-  new_status_id: 3\r
-  role_id: 2\r
-  old_status_id: 6\r
-  id: 148\r
-  tracker_id: 2\r
-workflows_174: \r
-  new_status_id: 4\r
-  role_id: 3\r
-  old_status_id: 5\r
-  id: 174\r
-  tracker_id: 2\r
-workflows_256: \r
-  new_status_id: 1\r
-  role_id: 3\r
-  old_status_id: 4\r
-  id: 256\r
-  tracker_id: 3\r
-workflows_068: \r
-  new_status_id: 4\r
-  role_id: 3\r
-  old_status_id: 2\r
-  id: 68\r
-  tracker_id: 1\r
-workflows_094: \r
-  new_status_id: 5\r
-  role_id: 1\r
-  old_status_id: 1\r
-  id: 94\r
-  tracker_id: 2\r
-workflows_149: \r
-  new_status_id: 4\r
-  role_id: 2\r
-  old_status_id: 6\r
-  id: 149\r
-  tracker_id: 2\r
-workflows_175: \r
-  new_status_id: 6\r
-  role_id: 3\r
-  old_status_id: 5\r
-  id: 175\r
-  tracker_id: 2\r
-workflows_257: \r
-  new_status_id: 2\r
-  role_id: 3\r
-  old_status_id: 4\r
-  id: 257\r
-  tracker_id: 3\r
-workflows_069: \r
-  new_status_id: 5\r
-  role_id: 3\r
-  old_status_id: 2\r
-  id: 69\r
-  tracker_id: 1\r
-workflows_095: \r
-  new_status_id: 6\r
-  role_id: 1\r
-  old_status_id: 1\r
-  id: 95\r
-  tracker_id: 2\r
-workflows_176: \r
-  new_status_id: 1\r
-  role_id: 3\r
-  old_status_id: 6\r
-  id: 176\r
-  tracker_id: 2\r
-workflows_258: \r
-  new_status_id: 3\r
-  role_id: 3\r
-  old_status_id: 4\r
-  id: 258\r
-  tracker_id: 3\r
-workflows_096: \r
-  new_status_id: 1\r
-  role_id: 1\r
-  old_status_id: 2\r
-  id: 96\r
-  tracker_id: 2\r
-workflows_177: \r
-  new_status_id: 2\r
-  role_id: 3\r
-  old_status_id: 6\r
-  id: 177\r
-  tracker_id: 2\r
-workflows_259: \r
-  new_status_id: 5\r
-  role_id: 3\r
-  old_status_id: 4\r
-  id: 259\r
-  tracker_id: 3\r
-workflows_097: \r
-  new_status_id: 3\r
-  role_id: 1\r
-  old_status_id: 2\r
-  id: 97\r
-  tracker_id: 2\r
-workflows_178: \r
-  new_status_id: 3\r
-  role_id: 3\r
-  old_status_id: 6\r
-  id: 178\r
-  tracker_id: 2\r
-workflows_098: \r
-  new_status_id: 4\r
-  role_id: 1\r
-  old_status_id: 2\r
-  id: 98\r
-  tracker_id: 2\r
-workflows_179: \r
-  new_status_id: 4\r
-  role_id: 3\r
-  old_status_id: 6\r
-  id: 179\r
-  tracker_id: 2\r
-workflows_099: \r
-  new_status_id: 5\r
-  role_id: 1\r
-  old_status_id: 2\r
-  id: 99\r
-  tracker_id: 2\r
-workflows_100: \r
-  new_status_id: 6\r
-  role_id: 1\r
-  old_status_id: 2\r
-  id: 100\r
-  tracker_id: 2\r
-workflows_020: \r
-  new_status_id: 6\r
-  role_id: 1\r
-  old_status_id: 4\r
-  id: 20\r
-  tracker_id: 1\r
-workflows_101: \r
-  new_status_id: 1\r
-  role_id: 1\r
-  old_status_id: 3\r
-  id: 101\r
-  tracker_id: 2\r
-workflows_021: \r
-  new_status_id: 1\r
-  role_id: 1\r
-  old_status_id: 5\r
-  id: 21\r
-  tracker_id: 1\r
-workflows_102: \r
-  new_status_id: 2\r
-  role_id: 1\r
-  old_status_id: 3\r
-  id: 102\r
-  tracker_id: 2\r
-workflows_210: \r
-  new_status_id: 5\r
-  role_id: 1\r
-  old_status_id: 6\r
-  id: 210\r
-  tracker_id: 3\r
-workflows_022: \r
-  new_status_id: 2\r
-  role_id: 1\r
-  old_status_id: 5\r
-  id: 22\r
-  tracker_id: 1\r
-workflows_103: \r
-  new_status_id: 4\r
-  role_id: 1\r
-  old_status_id: 3\r
-  id: 103\r
-  tracker_id: 2\r
-workflows_023: \r
-  new_status_id: 3\r
-  role_id: 1\r
-  old_status_id: 5\r
-  id: 23\r
-  tracker_id: 1\r
-workflows_104: \r
-  new_status_id: 5\r
-  role_id: 1\r
-  old_status_id: 3\r
-  id: 104\r
-  tracker_id: 2\r
-workflows_130: \r
-  new_status_id: 6\r
-  role_id: 2\r
-  old_status_id: 2\r
-  id: 130\r
-  tracker_id: 2\r
-workflows_211: \r
-  new_status_id: 2\r
-  role_id: 2\r
-  old_status_id: 1\r
-  id: 211\r
-  tracker_id: 3\r
-workflows_024: \r
-  new_status_id: 4\r
-  role_id: 1\r
-  old_status_id: 5\r
-  id: 24\r
-  tracker_id: 1\r
-workflows_050: \r
-  new_status_id: 6\r
-  role_id: 2\r
-  old_status_id: 4\r
-  id: 50\r
-  tracker_id: 1\r
-workflows_105: \r
-  new_status_id: 6\r
-  role_id: 1\r
-  old_status_id: 3\r
-  id: 105\r
-  tracker_id: 2\r
-workflows_131: \r
-  new_status_id: 1\r
-  role_id: 2\r
-  old_status_id: 3\r
-  id: 131\r
-  tracker_id: 2\r
-workflows_212: \r
-  new_status_id: 3\r
-  role_id: 2\r
-  old_status_id: 1\r
-  id: 212\r
-  tracker_id: 3\r
-workflows_025: \r
-  new_status_id: 6\r
-  role_id: 1\r
-  old_status_id: 5\r
-  id: 25\r
-  tracker_id: 1\r
-workflows_051: \r
-  new_status_id: 1\r
-  role_id: 2\r
-  old_status_id: 5\r
-  id: 51\r
-  tracker_id: 1\r
-workflows_106: \r
-  new_status_id: 1\r
-  role_id: 1\r
-  old_status_id: 4\r
-  id: 106\r
-  tracker_id: 2\r
-workflows_132: \r
-  new_status_id: 2\r
-  role_id: 2\r
-  old_status_id: 3\r
-  id: 132\r
-  tracker_id: 2\r
-workflows_213: \r
-  new_status_id: 4\r
-  role_id: 2\r
-  old_status_id: 1\r
-  id: 213\r
-  tracker_id: 3\r
-workflows_240: \r
-  new_status_id: 5\r
-  role_id: 2\r
-  old_status_id: 6\r
-  id: 240\r
-  tracker_id: 3\r
-workflows_026: \r
-  new_status_id: 1\r
-  role_id: 1\r
-  old_status_id: 6\r
-  id: 26\r
-  tracker_id: 1\r
-workflows_052: \r
-  new_status_id: 2\r
-  role_id: 2\r
-  old_status_id: 5\r
-  id: 52\r
-  tracker_id: 1\r
-workflows_107: \r
-  new_status_id: 2\r
-  role_id: 1\r
-  old_status_id: 4\r
-  id: 107\r
-  tracker_id: 2\r
-workflows_133: \r
-  new_status_id: 4\r
-  role_id: 2\r
-  old_status_id: 3\r
-  id: 133\r
-  tracker_id: 2\r
-workflows_214: \r
-  new_status_id: 5\r
-  role_id: 2\r
-  old_status_id: 1\r
-  id: 214\r
-  tracker_id: 3\r
-workflows_241: \r
-  new_status_id: 2\r
-  role_id: 3\r
-  old_status_id: 1\r
-  id: 241\r
-  tracker_id: 3\r
-workflows_027: \r
-  new_status_id: 2\r
-  role_id: 1\r
-  old_status_id: 6\r
-  id: 27\r
-  tracker_id: 1\r
-workflows_053: \r
-  new_status_id: 3\r
-  role_id: 2\r
-  old_status_id: 5\r
-  id: 53\r
-  tracker_id: 1\r
-workflows_080: \r
-  new_status_id: 6\r
-  role_id: 3\r
-  old_status_id: 4\r
-  id: 80\r
-  tracker_id: 1\r
-workflows_108: \r
-  new_status_id: 3\r
-  role_id: 1\r
-  old_status_id: 4\r
-  id: 108\r
-  tracker_id: 2\r
-workflows_134: \r
-  new_status_id: 5\r
-  role_id: 2\r
-  old_status_id: 3\r
-  id: 134\r
-  tracker_id: 2\r
-workflows_160: \r
-  new_status_id: 6\r
-  role_id: 3\r
-  old_status_id: 2\r
-  id: 160\r
-  tracker_id: 2\r
-workflows_215: \r
-  new_status_id: 6\r
-  role_id: 2\r
-  old_status_id: 1\r
-  id: 215\r
-  tracker_id: 3\r
-workflows_242: \r
-  new_status_id: 3\r
-  role_id: 3\r
-  old_status_id: 1\r
-  id: 242\r
-  tracker_id: 3\r
-workflows_028: \r
-  new_status_id: 3\r
-  role_id: 1\r
-  old_status_id: 6\r
-  id: 28\r
-  tracker_id: 1\r
-workflows_054: \r
-  new_status_id: 4\r
-  role_id: 2\r
-  old_status_id: 5\r
-  id: 54\r
-  tracker_id: 1\r
-workflows_081: \r
-  new_status_id: 1\r
-  role_id: 3\r
-  old_status_id: 5\r
-  id: 81\r
-  tracker_id: 1\r
-workflows_109: \r
-  new_status_id: 5\r
-  role_id: 1\r
-  old_status_id: 4\r
-  id: 109\r
-  tracker_id: 2\r
-workflows_135: \r
-  new_status_id: 6\r
-  role_id: 2\r
-  old_status_id: 3\r
-  id: 135\r
-  tracker_id: 2\r
-workflows_161: \r
-  new_status_id: 1\r
-  role_id: 3\r
-  old_status_id: 3\r
-  id: 161\r
-  tracker_id: 2\r
-workflows_216: \r
-  new_status_id: 1\r
-  role_id: 2\r
-  old_status_id: 2\r
-  id: 216\r
-  tracker_id: 3\r
-workflows_243: \r
-  new_status_id: 4\r
-  role_id: 3\r
-  old_status_id: 1\r
-  id: 243\r
-  tracker_id: 3\r
-workflows_029: \r
-  new_status_id: 4\r
-  role_id: 1\r
-  old_status_id: 6\r
-  id: 29\r
-  tracker_id: 1\r
-workflows_055: \r
-  new_status_id: 6\r
-  role_id: 2\r
-  old_status_id: 5\r
-  id: 55\r
-  tracker_id: 1\r
-workflows_082: \r
-  new_status_id: 2\r
-  role_id: 3\r
-  old_status_id: 5\r
-  id: 82\r
-  tracker_id: 1\r
-workflows_136: \r
-  new_status_id: 1\r
-  role_id: 2\r
-  old_status_id: 4\r
-  id: 136\r
-  tracker_id: 2\r
-workflows_162: \r
-  new_status_id: 2\r
-  role_id: 3\r
-  old_status_id: 3\r
-  id: 162\r
-  tracker_id: 2\r
-workflows_217: \r
-  new_status_id: 3\r
-  role_id: 2\r
-  old_status_id: 2\r
-  id: 217\r
-  tracker_id: 3\r
-workflows_270: \r
-  new_status_id: 5\r
-  role_id: 3\r
-  old_status_id: 6\r
-  id: 270\r
-  tracker_id: 3\r
-workflows_244: \r
-  new_status_id: 5\r
-  role_id: 3\r
-  old_status_id: 1\r
-  id: 244\r
-  tracker_id: 3\r
-workflows_056: \r
-  new_status_id: 1\r
-  role_id: 2\r
-  old_status_id: 6\r
-  id: 56\r
-  tracker_id: 1\r
-workflows_137: \r
-  new_status_id: 2\r
-  role_id: 2\r
-  old_status_id: 4\r
-  id: 137\r
-  tracker_id: 2\r
-workflows_163: \r
-  new_status_id: 4\r
-  role_id: 3\r
-  old_status_id: 3\r
-  id: 163\r
-  tracker_id: 2\r
-workflows_190: \r
-  new_status_id: 6\r
-  role_id: 1\r
-  old_status_id: 2\r
-  id: 190\r
-  tracker_id: 3\r
-workflows_218: \r
-  new_status_id: 4\r
-  role_id: 2\r
-  old_status_id: 2\r
-  id: 218\r
-  tracker_id: 3\r
-workflows_245: \r
-  new_status_id: 6\r
-  role_id: 3\r
-  old_status_id: 1\r
-  id: 245\r
-  tracker_id: 3\r
-workflows_057: \r
-  new_status_id: 2\r
-  role_id: 2\r
-  old_status_id: 6\r
-  id: 57\r
-  tracker_id: 1\r
-workflows_083: \r
-  new_status_id: 3\r
-  role_id: 3\r
-  old_status_id: 5\r
-  id: 83\r
-  tracker_id: 1\r
-workflows_138: \r
-  new_status_id: 3\r
-  role_id: 2\r
-  old_status_id: 4\r
-  id: 138\r
-  tracker_id: 2\r
-workflows_164: \r
-  new_status_id: 5\r
-  role_id: 3\r
-  old_status_id: 3\r
-  id: 164\r
-  tracker_id: 2\r
-workflows_191: \r
-  new_status_id: 1\r
-  role_id: 1\r
-  old_status_id: 3\r
-  id: 191\r
-  tracker_id: 3\r
-workflows_219: \r
-  new_status_id: 5\r
-  role_id: 2\r
-  old_status_id: 2\r
-  id: 219\r
-  tracker_id: 3\r
-workflows_246: \r
-  new_status_id: 1\r
-  role_id: 3\r
-  old_status_id: 2\r
-  id: 246\r
-  tracker_id: 3\r
-workflows_058: \r
-  new_status_id: 3\r
-  role_id: 2\r
-  old_status_id: 6\r
-  id: 58\r
-  tracker_id: 1\r
-workflows_084: \r
-  new_status_id: 4\r
-  role_id: 3\r
-  old_status_id: 5\r
-  id: 84\r
-  tracker_id: 1\r
-workflows_139: \r
-  new_status_id: 5\r
-  role_id: 2\r
-  old_status_id: 4\r
-  id: 139\r
-  tracker_id: 2\r
-workflows_165: \r
-  new_status_id: 6\r
-  role_id: 3\r
-  old_status_id: 3\r
-  id: 165\r
-  tracker_id: 2\r
-workflows_192: \r
-  new_status_id: 2\r
-  role_id: 1\r
-  old_status_id: 3\r
-  id: 192\r
-  tracker_id: 3\r
-workflows_247: \r
-  new_status_id: 3\r
-  role_id: 3\r
-  old_status_id: 2\r
-  id: 247\r
-  tracker_id: 3\r
-workflows_059: \r
-  new_status_id: 4\r
-  role_id: 2\r
-  old_status_id: 6\r
-  id: 59\r
-  tracker_id: 1\r
-workflows_085: \r
-  new_status_id: 6\r
-  role_id: 3\r
-  old_status_id: 5\r
-  id: 85\r
-  tracker_id: 1\r
-workflows_166: \r
-  new_status_id: 1\r
-  role_id: 3\r
-  old_status_id: 4\r
-  id: 166\r
-  tracker_id: 2\r
-workflows_248: \r
-  new_status_id: 4\r
-  role_id: 3\r
-  old_status_id: 2\r
-  id: 248\r
-  tracker_id: 3\r
-workflows_086: \r
-  new_status_id: 1\r
-  role_id: 3\r
-  old_status_id: 6\r
-  id: 86\r
-  tracker_id: 1\r
-workflows_167: \r
-  new_status_id: 2\r
-  role_id: 3\r
-  old_status_id: 4\r
-  id: 167\r
-  tracker_id: 2\r
-workflows_193: \r
-  new_status_id: 4\r
-  role_id: 1\r
-  old_status_id: 3\r
-  id: 193\r
-  tracker_id: 3\r
-workflows_249: \r
-  new_status_id: 5\r
-  role_id: 3\r
-  old_status_id: 2\r
-  id: 249\r
-  tracker_id: 3\r
-workflows_087: \r
-  new_status_id: 2\r
-  role_id: 3\r
-  old_status_id: 6\r
-  id: 87\r
-  tracker_id: 1\r
-workflows_168: \r
-  new_status_id: 3\r
-  role_id: 3\r
-  old_status_id: 4\r
-  id: 168\r
-  tracker_id: 2\r
-workflows_194: \r
-  new_status_id: 5\r
-  role_id: 1\r
-  old_status_id: 3\r
-  id: 194\r
-  tracker_id: 3\r
-workflows_088: \r
-  new_status_id: 3\r
-  role_id: 3\r
-  old_status_id: 6\r
-  id: 88\r
-  tracker_id: 1\r
-workflows_169: \r
-  new_status_id: 5\r
-  role_id: 3\r
-  old_status_id: 4\r
-  id: 169\r
-  tracker_id: 2\r
-workflows_195: \r
-  new_status_id: 6\r
-  role_id: 1\r
-  old_status_id: 3\r
-  id: 195\r
-  tracker_id: 3\r
-workflows_089: \r
-  new_status_id: 4\r
-  role_id: 3\r
-  old_status_id: 6\r
-  id: 89\r
-  tracker_id: 1\r
-workflows_196: \r
-  new_status_id: 1\r
-  role_id: 1\r
-  old_status_id: 4\r
-  id: 196\r
-  tracker_id: 3\r
-workflows_197: \r
-  new_status_id: 2\r
-  role_id: 1\r
-  old_status_id: 4\r
-  id: 197\r
-  tracker_id: 3\r
-workflows_198: \r
-  new_status_id: 3\r
-  role_id: 1\r
-  old_status_id: 4\r
-  id: 198\r
-  tracker_id: 3\r
-workflows_199: \r
-  new_status_id: 5\r
-  role_id: 1\r
-  old_status_id: 4\r
-  id: 199\r
-  tracker_id: 3\r
-workflows_010: \r
-  new_status_id: 6\r
-  role_id: 1\r
-  old_status_id: 2\r
-  id: 10\r
-  tracker_id: 1\r
-workflows_011: \r
-  new_status_id: 1\r
-  role_id: 1\r
-  old_status_id: 3\r
-  id: 11\r
-  tracker_id: 1\r
-workflows_012: \r
-  new_status_id: 2\r
-  role_id: 1\r
-  old_status_id: 3\r
-  id: 12\r
-  tracker_id: 1\r
-workflows_200: \r
-  new_status_id: 6\r
-  role_id: 1\r
-  old_status_id: 4\r
-  id: 200\r
-  tracker_id: 3\r
-workflows_013: \r
-  new_status_id: 4\r
-  role_id: 1\r
-  old_status_id: 3\r
-  id: 13\r
-  tracker_id: 1\r
-workflows_120: \r
-  new_status_id: 5\r
-  role_id: 1\r
-  old_status_id: 6\r
-  id: 120\r
-  tracker_id: 2\r
-workflows_201: \r
-  new_status_id: 1\r
-  role_id: 1\r
-  old_status_id: 5\r
-  id: 201\r
-  tracker_id: 3\r
-workflows_040: \r
-  new_status_id: 6\r
-  role_id: 2\r
-  old_status_id: 2\r
-  id: 40\r
-  tracker_id: 1\r
-workflows_121: \r
-  new_status_id: 2\r
-  role_id: 2\r
-  old_status_id: 1\r
-  id: 121\r
-  tracker_id: 2\r
-workflows_202: \r
-  new_status_id: 2\r
-  role_id: 1\r
-  old_status_id: 5\r
-  id: 202\r
-  tracker_id: 3\r
-workflows_014: \r
-  new_status_id: 5\r
-  role_id: 1\r
-  old_status_id: 3\r
-  id: 14\r
-  tracker_id: 1\r
-workflows_041: \r
-  new_status_id: 1\r
-  role_id: 2\r
-  old_status_id: 3\r
-  id: 41\r
-  tracker_id: 1\r
-workflows_122: \r
-  new_status_id: 3\r
-  role_id: 2\r
-  old_status_id: 1\r
-  id: 122\r
-  tracker_id: 2\r
-workflows_203: \r
-  new_status_id: 3\r
-  role_id: 1\r
-  old_status_id: 5\r
-  id: 203\r
-  tracker_id: 3\r
-workflows_015: \r
-  new_status_id: 6\r
-  role_id: 1\r
-  old_status_id: 3\r
-  id: 15\r
-  tracker_id: 1\r
-workflows_230: \r
-  new_status_id: 6\r
-  role_id: 2\r
-  old_status_id: 4\r
-  id: 230\r
-  tracker_id: 3\r
-workflows_123: \r
-  new_status_id: 4\r
-  role_id: 2\r
-  old_status_id: 1\r
-  id: 123\r
-  tracker_id: 2\r
-workflows_204: \r
-  new_status_id: 4\r
-  role_id: 1\r
-  old_status_id: 5\r
-  id: 204\r
-  tracker_id: 3\r
-workflows_016: \r
-  new_status_id: 1\r
-  role_id: 1\r
-  old_status_id: 4\r
-  id: 16\r
-  tracker_id: 1\r
-workflows_042: \r
-  new_status_id: 2\r
-  role_id: 2\r
-  old_status_id: 3\r
-  id: 42\r
-  tracker_id: 1\r
-workflows_231: \r
-  new_status_id: 1\r
-  role_id: 2\r
-  old_status_id: 5\r
-  id: 231\r
-  tracker_id: 3\r
-workflows_070: \r
-  new_status_id: 6\r
-  role_id: 3\r
-  old_status_id: 2\r
-  id: 70\r
-  tracker_id: 1\r
-workflows_124: \r
-  new_status_id: 5\r
-  role_id: 2\r
-  old_status_id: 1\r
-  id: 124\r
-  tracker_id: 2\r
-workflows_150: \r
-  new_status_id: 5\r
-  role_id: 2\r
-  old_status_id: 6\r
-  id: 150\r
-  tracker_id: 2\r
-workflows_205: \r
-  new_status_id: 6\r
-  role_id: 1\r
-  old_status_id: 5\r
-  id: 205\r
-  tracker_id: 3\r
-workflows_017: \r
-  new_status_id: 2\r
-  role_id: 1\r
-  old_status_id: 4\r
-  id: 17\r
-  tracker_id: 1\r
-workflows_043: \r
-  new_status_id: 4\r
-  role_id: 2\r
-  old_status_id: 3\r
-  id: 43\r
-  tracker_id: 1\r
-workflows_232: \r
-  new_status_id: 2\r
-  role_id: 2\r
-  old_status_id: 5\r
-  id: 232\r
-  tracker_id: 3\r
-workflows_125: \r
-  new_status_id: 6\r
-  role_id: 2\r
-  old_status_id: 1\r
-  id: 125\r
-  tracker_id: 2\r
-workflows_151: \r
-  new_status_id: 2\r
-  role_id: 3\r
-  old_status_id: 1\r
-  id: 151\r
-  tracker_id: 2\r
-workflows_206: \r
-  new_status_id: 1\r
-  role_id: 1\r
-  old_status_id: 6\r
-  id: 206\r
-  tracker_id: 3\r
-workflows_018: \r
-  new_status_id: 3\r
-  role_id: 1\r
-  old_status_id: 4\r
-  id: 18\r
-  tracker_id: 1\r
-workflows_044: \r
-  new_status_id: 5\r
-  role_id: 2\r
-  old_status_id: 3\r
-  id: 44\r
-  tracker_id: 1\r
-workflows_071: \r
-  new_status_id: 1\r
-  role_id: 3\r
-  old_status_id: 3\r
-  id: 71\r
-  tracker_id: 1\r
-workflows_233: \r
-  new_status_id: 3\r
-  role_id: 2\r
-  old_status_id: 5\r
-  id: 233\r
-  tracker_id: 3\r
-workflows_126: \r
-  new_status_id: 1\r
-  role_id: 2\r
-  old_status_id: 2\r
-  id: 126\r
-  tracker_id: 2\r
-workflows_152: \r
-  new_status_id: 3\r
-  role_id: 3\r
-  old_status_id: 1\r
-  id: 152\r
-  tracker_id: 2\r
-workflows_207: \r
-  new_status_id: 2\r
-  role_id: 1\r
-  old_status_id: 6\r
-  id: 207\r
-  tracker_id: 3\r
-workflows_019: \r
-  new_status_id: 5\r
-  role_id: 1\r
-  old_status_id: 4\r
-  id: 19\r
-  tracker_id: 1\r
-workflows_045: \r
-  new_status_id: 6\r
-  role_id: 2\r
-  old_status_id: 3\r
-  id: 45\r
-  tracker_id: 1\r
-workflows_260: \r
-  new_status_id: 6\r
-  role_id: 3\r
-  old_status_id: 4\r
-  id: 260\r
-  tracker_id: 3\r
-workflows_234: \r
-  new_status_id: 4\r
-  role_id: 2\r
-  old_status_id: 5\r
-  id: 234\r
-  tracker_id: 3\r
-workflows_127: \r
-  new_status_id: 3\r
-  role_id: 2\r
-  old_status_id: 2\r
-  id: 127\r
-  tracker_id: 2\r
-workflows_153: \r
-  new_status_id: 4\r
-  role_id: 3\r
-  old_status_id: 1\r
-  id: 153\r
-  tracker_id: 2\r
-workflows_180: \r
-  new_status_id: 5\r
-  role_id: 3\r
-  old_status_id: 6\r
-  id: 180\r
-  tracker_id: 2\r
-workflows_208: \r
-  new_status_id: 3\r
-  role_id: 1\r
-  old_status_id: 6\r
-  id: 208\r
-  tracker_id: 3\r
-workflows_046: \r
-  new_status_id: 1\r
-  role_id: 2\r
-  old_status_id: 4\r
-  id: 46\r
-  tracker_id: 1\r
-workflows_072: \r
-  new_status_id: 2\r
-  role_id: 3\r
-  old_status_id: 3\r
-  id: 72\r
-  tracker_id: 1\r
-workflows_261: \r
-  new_status_id: 1\r
-  role_id: 3\r
-  old_status_id: 5\r
-  id: 261\r
-  tracker_id: 3\r
-workflows_235: \r
-  new_status_id: 6\r
-  role_id: 2\r
-  old_status_id: 5\r
-  id: 235\r
-  tracker_id: 3\r
-workflows_154: \r
-  new_status_id: 5\r
-  role_id: 3\r
-  old_status_id: 1\r
-  id: 154\r
-  tracker_id: 2\r
-workflows_181: \r
-  new_status_id: 2\r
-  role_id: 1\r
-  old_status_id: 1\r
-  id: 181\r
-  tracker_id: 3\r
-workflows_209: \r
-  new_status_id: 4\r
-  role_id: 1\r
-  old_status_id: 6\r
-  id: 209\r
-  tracker_id: 3\r
-workflows_047: \r
-  new_status_id: 2\r
-  role_id: 2\r
-  old_status_id: 4\r
-  id: 47\r
-  tracker_id: 1\r
-workflows_073: \r
-  new_status_id: 4\r
-  role_id: 3\r
-  old_status_id: 3\r
-  id: 73\r
-  tracker_id: 1\r
-workflows_128: \r
-  new_status_id: 4\r
-  role_id: 2\r
-  old_status_id: 2\r
-  id: 128\r
-  tracker_id: 2\r
-workflows_262: \r
-  new_status_id: 2\r
-  role_id: 3\r
-  old_status_id: 5\r
-  id: 262\r
-  tracker_id: 3\r
-workflows_236: \r
-  new_status_id: 1\r
-  role_id: 2\r
-  old_status_id: 6\r
-  id: 236\r
-  tracker_id: 3\r
-workflows_155: \r
-  new_status_id: 6\r
-  role_id: 3\r
-  old_status_id: 1\r
-  id: 155\r
-  tracker_id: 2\r
-workflows_048: \r
-  new_status_id: 3\r
-  role_id: 2\r
-  old_status_id: 4\r
-  id: 48\r
-  tracker_id: 1\r
-workflows_074: \r
-  new_status_id: 5\r
-  role_id: 3\r
-  old_status_id: 3\r
-  id: 74\r
-  tracker_id: 1\r
-workflows_129: \r
-  new_status_id: 5\r
-  role_id: 2\r
-  old_status_id: 2\r
-  id: 129\r
-  tracker_id: 2\r
-workflows_263: \r
-  new_status_id: 3\r
-  role_id: 3\r
-  old_status_id: 5\r
-  id: 263\r
-  tracker_id: 3\r
-workflows_237: \r
-  new_status_id: 2\r
-  role_id: 2\r
-  old_status_id: 6\r
-  id: 237\r
-  tracker_id: 3\r
-workflows_182: \r
-  new_status_id: 3\r
-  role_id: 1\r
-  old_status_id: 1\r
-  id: 182\r
-  tracker_id: 3\r
-workflows_049: \r
-  new_status_id: 5\r
-  role_id: 2\r
-  old_status_id: 4\r
-  id: 49\r
-  tracker_id: 1\r
-workflows_075: \r
-  new_status_id: 6\r
-  role_id: 3\r
-  old_status_id: 3\r
-  id: 75\r
-  tracker_id: 1\r
-workflows_156: \r
-  new_status_id: 1\r
-  role_id: 3\r
-  old_status_id: 2\r
-  id: 156\r
-  tracker_id: 2\r
-workflows_264: \r
-  new_status_id: 4\r
-  role_id: 3\r
-  old_status_id: 5\r
-  id: 264\r
-  tracker_id: 3\r
-workflows_238: \r
-  new_status_id: 3\r
-  role_id: 2\r
-  old_status_id: 6\r
-  id: 238\r
-  tracker_id: 3\r
-workflows_183: \r
-  new_status_id: 4\r
-  role_id: 1\r
-  old_status_id: 1\r
-  id: 183\r
-  tracker_id: 3\r
-workflows_076: \r
-  new_status_id: 1\r
-  role_id: 3\r
-  old_status_id: 4\r
-  id: 76\r
-  tracker_id: 1\r
-workflows_157: \r
-  new_status_id: 3\r
-  role_id: 3\r
-  old_status_id: 2\r
-  id: 157\r
-  tracker_id: 2\r
-workflows_265: \r
-  new_status_id: 6\r
-  role_id: 3\r
-  old_status_id: 5\r
-  id: 265\r
-  tracker_id: 3\r
-workflows_239: \r
-  new_status_id: 4\r
-  role_id: 2\r
-  old_status_id: 6\r
-  id: 239\r
-  tracker_id: 3\r
-workflows_077: \r
-  new_status_id: 2\r
-  role_id: 3\r
-  old_status_id: 4\r
-  id: 77\r
-  tracker_id: 1\r
-workflows_158: \r
-  new_status_id: 4\r
-  role_id: 3\r
-  old_status_id: 2\r
-  id: 158\r
-  tracker_id: 2\r
-workflows_184: \r
-  new_status_id: 5\r
-  role_id: 1\r
-  old_status_id: 1\r
-  id: 184\r
-  tracker_id: 3\r
-workflows_266: \r
-  new_status_id: 1\r
-  role_id: 3\r
-  old_status_id: 6\r
-  id: 266\r
-  tracker_id: 3\r
-workflows_078: \r
-  new_status_id: 3\r
-  role_id: 3\r
-  old_status_id: 4\r
-  id: 78\r
-  tracker_id: 1\r
-workflows_159: \r
-  new_status_id: 5\r
-  role_id: 3\r
-  old_status_id: 2\r
-  id: 159\r
-  tracker_id: 2\r
-workflows_185: \r
-  new_status_id: 6\r
-  role_id: 1\r
-  old_status_id: 1\r
-  id: 185\r
-  tracker_id: 3\r
-workflows_267: \r
-  new_status_id: 2\r
-  role_id: 3\r
-  old_status_id: 6\r
-  id: 267\r
-  tracker_id: 3\r
-workflows_079: \r
-  new_status_id: 5\r
-  role_id: 3\r
-  old_status_id: 4\r
-  id: 79\r
-  tracker_id: 1\r
-workflows_186: \r
-  new_status_id: 1\r
-  role_id: 1\r
-  old_status_id: 2\r
-  id: 186\r
-  tracker_id: 3\r
-workflows_268: \r
-  new_status_id: 3\r
-  role_id: 3\r
-  old_status_id: 6\r
-  id: 268\r
-  tracker_id: 3\r
-workflows_187: \r
-  new_status_id: 3\r
-  role_id: 1\r
-  old_status_id: 2\r
-  id: 187\r
-  tracker_id: 3\r
-workflows_269: \r
-  new_status_id: 4\r
-  role_id: 3\r
-  old_status_id: 6\r
-  id: 269\r
-  tracker_id: 3\r
-workflows_188: \r
-  new_status_id: 4\r
-  role_id: 1\r
-  old_status_id: 2\r
-  id: 188\r
-  tracker_id: 3\r
+--- 
+workflows_189: 
+  new_status_id: 5
+  role_id: 1
+  old_status_id: 2
+  id: 189
+  tracker_id: 3
+workflows_001: 
+  new_status_id: 2
+  role_id: 1
+  old_status_id: 1
+  id: 1
+  tracker_id: 1
+workflows_002: 
+  new_status_id: 3
+  role_id: 1
+  old_status_id: 1
+  id: 2
+  tracker_id: 1
+workflows_003: 
+  new_status_id: 4
+  role_id: 1
+  old_status_id: 1
+  id: 3
+  tracker_id: 1
+workflows_110: 
+  new_status_id: 6
+  role_id: 1
+  old_status_id: 4
+  id: 110
+  tracker_id: 2
+workflows_004: 
+  new_status_id: 5
+  role_id: 1
+  old_status_id: 1
+  id: 4
+  tracker_id: 1
+workflows_030: 
+  new_status_id: 5
+  role_id: 1
+  old_status_id: 6
+  id: 30
+  tracker_id: 1
+workflows_111: 
+  new_status_id: 1
+  role_id: 1
+  old_status_id: 5
+  id: 111
+  tracker_id: 2
+workflows_005: 
+  new_status_id: 6
+  role_id: 1
+  old_status_id: 1
+  id: 5
+  tracker_id: 1
+workflows_031: 
+  new_status_id: 2
+  role_id: 2
+  old_status_id: 1
+  id: 31
+  tracker_id: 1
+workflows_112: 
+  new_status_id: 2
+  role_id: 1
+  old_status_id: 5
+  id: 112
+  tracker_id: 2
+workflows_006: 
+  new_status_id: 1
+  role_id: 1
+  old_status_id: 2
+  id: 6
+  tracker_id: 1
+workflows_032: 
+  new_status_id: 3
+  role_id: 2
+  old_status_id: 1
+  id: 32
+  tracker_id: 1
+workflows_113: 
+  new_status_id: 3
+  role_id: 1
+  old_status_id: 5
+  id: 113
+  tracker_id: 2
+workflows_220: 
+  new_status_id: 6
+  role_id: 2
+  old_status_id: 2
+  id: 220
+  tracker_id: 3
+workflows_007: 
+  new_status_id: 3
+  role_id: 1
+  old_status_id: 2
+  id: 7
+  tracker_id: 1
+workflows_033: 
+  new_status_id: 4
+  role_id: 2
+  old_status_id: 1
+  id: 33
+  tracker_id: 1
+workflows_060: 
+  new_status_id: 5
+  role_id: 2
+  old_status_id: 6
+  id: 60
+  tracker_id: 1
+workflows_114: 
+  new_status_id: 4
+  role_id: 1
+  old_status_id: 5
+  id: 114
+  tracker_id: 2
+workflows_140: 
+  new_status_id: 6
+  role_id: 2
+  old_status_id: 4
+  id: 140
+  tracker_id: 2
+workflows_221: 
+  new_status_id: 1
+  role_id: 2
+  old_status_id: 3
+  id: 221
+  tracker_id: 3
+workflows_008: 
+  new_status_id: 4
+  role_id: 1
+  old_status_id: 2
+  id: 8
+  tracker_id: 1
+workflows_034: 
+  new_status_id: 5
+  role_id: 2
+  old_status_id: 1
+  id: 34
+  tracker_id: 1
+workflows_115: 
+  new_status_id: 6
+  role_id: 1
+  old_status_id: 5
+  id: 115
+  tracker_id: 2
+workflows_141: 
+  new_status_id: 1
+  role_id: 2
+  old_status_id: 5
+  id: 141
+  tracker_id: 2
+workflows_222: 
+  new_status_id: 2
+  role_id: 2
+  old_status_id: 3
+  id: 222
+  tracker_id: 3
+workflows_223: 
+  new_status_id: 4
+  role_id: 2
+  old_status_id: 3
+  id: 223
+  tracker_id: 3
+workflows_009: 
+  new_status_id: 5
+  role_id: 1
+  old_status_id: 2
+  id: 9
+  tracker_id: 1
+workflows_035: 
+  new_status_id: 6
+  role_id: 2
+  old_status_id: 1
+  id: 35
+  tracker_id: 1
+workflows_061: 
+  new_status_id: 2
+  role_id: 3
+  old_status_id: 1
+  id: 61
+  tracker_id: 1
+workflows_116: 
+  new_status_id: 1
+  role_id: 1
+  old_status_id: 6
+  id: 116
+  tracker_id: 2
+workflows_142: 
+  new_status_id: 2
+  role_id: 2
+  old_status_id: 5
+  id: 142
+  tracker_id: 2
+workflows_250: 
+  new_status_id: 6
+  role_id: 3
+  old_status_id: 2
+  id: 250
+  tracker_id: 3
+workflows_224: 
+  new_status_id: 5
+  role_id: 2
+  old_status_id: 3
+  id: 224
+  tracker_id: 3
+workflows_036: 
+  new_status_id: 1
+  role_id: 2
+  old_status_id: 2
+  id: 36
+  tracker_id: 1
+workflows_062: 
+  new_status_id: 3
+  role_id: 3
+  old_status_id: 1
+  id: 62
+  tracker_id: 1
+workflows_117: 
+  new_status_id: 2
+  role_id: 1
+  old_status_id: 6
+  id: 117
+  tracker_id: 2
+workflows_143: 
+  new_status_id: 3
+  role_id: 2
+  old_status_id: 5
+  id: 143
+  tracker_id: 2
+workflows_170: 
+  new_status_id: 6
+  role_id: 3
+  old_status_id: 4
+  id: 170
+  tracker_id: 2
+workflows_251: 
+  new_status_id: 1
+  role_id: 3
+  old_status_id: 3
+  id: 251
+  tracker_id: 3
+workflows_225: 
+  new_status_id: 6
+  role_id: 2
+  old_status_id: 3
+  id: 225
+  tracker_id: 3
+workflows_063: 
+  new_status_id: 4
+  role_id: 3
+  old_status_id: 1
+  id: 63
+  tracker_id: 1
+workflows_090: 
+  new_status_id: 5
+  role_id: 3
+  old_status_id: 6
+  id: 90
+  tracker_id: 1
+workflows_118: 
+  new_status_id: 3
+  role_id: 1
+  old_status_id: 6
+  id: 118
+  tracker_id: 2
+workflows_144: 
+  new_status_id: 4
+  role_id: 2
+  old_status_id: 5
+  id: 144
+  tracker_id: 2
+workflows_252: 
+  new_status_id: 2
+  role_id: 3
+  old_status_id: 3
+  id: 252
+  tracker_id: 3
+workflows_226: 
+  new_status_id: 1
+  role_id: 2
+  old_status_id: 4
+  id: 226
+  tracker_id: 3
+workflows_038: 
+  new_status_id: 4
+  role_id: 2
+  old_status_id: 2
+  id: 38
+  tracker_id: 1
+workflows_064: 
+  new_status_id: 5
+  role_id: 3
+  old_status_id: 1
+  id: 64
+  tracker_id: 1
+workflows_091: 
+  new_status_id: 2
+  role_id: 1
+  old_status_id: 1
+  id: 91
+  tracker_id: 2
+workflows_119: 
+  new_status_id: 4
+  role_id: 1
+  old_status_id: 6
+  id: 119
+  tracker_id: 2
+workflows_145: 
+  new_status_id: 6
+  role_id: 2
+  old_status_id: 5
+  id: 145
+  tracker_id: 2
+workflows_171: 
+  new_status_id: 1
+  role_id: 3
+  old_status_id: 5
+  id: 171
+  tracker_id: 2
+workflows_253: 
+  new_status_id: 4
+  role_id: 3
+  old_status_id: 3
+  id: 253
+  tracker_id: 3
+workflows_227: 
+  new_status_id: 2
+  role_id: 2
+  old_status_id: 4
+  id: 227
+  tracker_id: 3
+workflows_039: 
+  new_status_id: 5
+  role_id: 2
+  old_status_id: 2
+  id: 39
+  tracker_id: 1
+workflows_065: 
+  new_status_id: 6
+  role_id: 3
+  old_status_id: 1
+  id: 65
+  tracker_id: 1
+workflows_092: 
+  new_status_id: 3
+  role_id: 1
+  old_status_id: 1
+  id: 92
+  tracker_id: 2
+workflows_146: 
+  new_status_id: 1
+  role_id: 2
+  old_status_id: 6
+  id: 146
+  tracker_id: 2
+workflows_172: 
+  new_status_id: 2
+  role_id: 3
+  old_status_id: 5
+  id: 172
+  tracker_id: 2
+workflows_254: 
+  new_status_id: 5
+  role_id: 3
+  old_status_id: 3
+  id: 254
+  tracker_id: 3
+workflows_228: 
+  new_status_id: 3
+  role_id: 2
+  old_status_id: 4
+  id: 228
+  tracker_id: 3
+workflows_066: 
+  new_status_id: 1
+  role_id: 3
+  old_status_id: 2
+  id: 66
+  tracker_id: 1
+workflows_093: 
+  new_status_id: 4
+  role_id: 1
+  old_status_id: 1
+  id: 93
+  tracker_id: 2
+workflows_147: 
+  new_status_id: 2
+  role_id: 2
+  old_status_id: 6
+  id: 147
+  tracker_id: 2
+workflows_173: 
+  new_status_id: 3
+  role_id: 3
+  old_status_id: 5
+  id: 173
+  tracker_id: 2
+workflows_255: 
+  new_status_id: 6
+  role_id: 3
+  old_status_id: 3
+  id: 255
+  tracker_id: 3
+workflows_229: 
+  new_status_id: 5
+  role_id: 2
+  old_status_id: 4
+  id: 229
+  tracker_id: 3
+workflows_067: 
+  new_status_id: 3
+  role_id: 3
+  old_status_id: 2
+  id: 67
+  tracker_id: 1
+workflows_148: 
+  new_status_id: 3
+  role_id: 2
+  old_status_id: 6
+  id: 148
+  tracker_id: 2
+workflows_174: 
+  new_status_id: 4
+  role_id: 3
+  old_status_id: 5
+  id: 174
+  tracker_id: 2
+workflows_256: 
+  new_status_id: 1
+  role_id: 3
+  old_status_id: 4
+  id: 256
+  tracker_id: 3
+workflows_068: 
+  new_status_id: 4
+  role_id: 3
+  old_status_id: 2
+  id: 68
+  tracker_id: 1
+workflows_094: 
+  new_status_id: 5
+  role_id: 1
+  old_status_id: 1
+  id: 94
+  tracker_id: 2
+workflows_149: 
+  new_status_id: 4
+  role_id: 2
+  old_status_id: 6
+  id: 149
+  tracker_id: 2
+workflows_175: 
+  new_status_id: 6
+  role_id: 3
+  old_status_id: 5
+  id: 175
+  tracker_id: 2
+workflows_257: 
+  new_status_id: 2
+  role_id: 3
+  old_status_id: 4
+  id: 257
+  tracker_id: 3
+workflows_069: 
+  new_status_id: 5
+  role_id: 3
+  old_status_id: 2
+  id: 69
+  tracker_id: 1
+workflows_095: 
+  new_status_id: 6
+  role_id: 1
+  old_status_id: 1
+  id: 95
+  tracker_id: 2
+workflows_176: 
+  new_status_id: 1
+  role_id: 3
+  old_status_id: 6
+  id: 176
+  tracker_id: 2
+workflows_258: 
+  new_status_id: 3
+  role_id: 3
+  old_status_id: 4
+  id: 258
+  tracker_id: 3
+workflows_096: 
+  new_status_id: 1
+  role_id: 1
+  old_status_id: 2
+  id: 96
+  tracker_id: 2
+workflows_177: 
+  new_status_id: 2
+  role_id: 3
+  old_status_id: 6
+  id: 177
+  tracker_id: 2
+workflows_259: 
+  new_status_id: 5
+  role_id: 3
+  old_status_id: 4
+  id: 259
+  tracker_id: 3
+workflows_097: 
+  new_status_id: 3
+  role_id: 1
+  old_status_id: 2
+  id: 97
+  tracker_id: 2
+workflows_178: 
+  new_status_id: 3
+  role_id: 3
+  old_status_id: 6
+  id: 178
+  tracker_id: 2
+workflows_098: 
+  new_status_id: 4
+  role_id: 1
+  old_status_id: 2
+  id: 98
+  tracker_id: 2
+workflows_179: 
+  new_status_id: 4
+  role_id: 3
+  old_status_id: 6
+  id: 179
+  tracker_id: 2
+workflows_099: 
+  new_status_id: 5
+  role_id: 1
+  old_status_id: 2
+  id: 99
+  tracker_id: 2
+workflows_100: 
+  new_status_id: 6
+  role_id: 1
+  old_status_id: 2
+  id: 100
+  tracker_id: 2
+workflows_020: 
+  new_status_id: 6
+  role_id: 1
+  old_status_id: 4
+  id: 20
+  tracker_id: 1
+workflows_101: 
+  new_status_id: 1
+  role_id: 1
+  old_status_id: 3
+  id: 101
+  tracker_id: 2
+workflows_021: 
+  new_status_id: 1
+  role_id: 1
+  old_status_id: 5
+  id: 21
+  tracker_id: 1
+workflows_102: 
+  new_status_id: 2
+  role_id: 1
+  old_status_id: 3
+  id: 102
+  tracker_id: 2
+workflows_210: 
+  new_status_id: 5
+  role_id: 1
+  old_status_id: 6
+  id: 210
+  tracker_id: 3
+workflows_022: 
+  new_status_id: 2
+  role_id: 1
+  old_status_id: 5
+  id: 22
+  tracker_id: 1
+workflows_103: 
+  new_status_id: 4
+  role_id: 1
+  old_status_id: 3
+  id: 103
+  tracker_id: 2
+workflows_023: 
+  new_status_id: 3
+  role_id: 1
+  old_status_id: 5
+  id: 23
+  tracker_id: 1
+workflows_104: 
+  new_status_id: 5
+  role_id: 1
+  old_status_id: 3
+  id: 104
+  tracker_id: 2
+workflows_130: 
+  new_status_id: 6
+  role_id: 2
+  old_status_id: 2
+  id: 130
+  tracker_id: 2
+workflows_211: 
+  new_status_id: 2
+  role_id: 2
+  old_status_id: 1
+  id: 211
+  tracker_id: 3
+workflows_024: 
+  new_status_id: 4
+  role_id: 1
+  old_status_id: 5
+  id: 24
+  tracker_id: 1
+workflows_050: 
+  new_status_id: 6
+  role_id: 2
+  old_status_id: 4
+  id: 50
+  tracker_id: 1
+workflows_105: 
+  new_status_id: 6
+  role_id: 1
+  old_status_id: 3
+  id: 105
+  tracker_id: 2
+workflows_131: 
+  new_status_id: 1
+  role_id: 2
+  old_status_id: 3
+  id: 131
+  tracker_id: 2
+workflows_212: 
+  new_status_id: 3
+  role_id: 2
+  old_status_id: 1
+  id: 212
+  tracker_id: 3
+workflows_025: 
+  new_status_id: 6
+  role_id: 1
+  old_status_id: 5
+  id: 25
+  tracker_id: 1
+workflows_051: 
+  new_status_id: 1
+  role_id: 2
+  old_status_id: 5
+  id: 51
+  tracker_id: 1
+workflows_106: 
+  new_status_id: 1
+  role_id: 1
+  old_status_id: 4
+  id: 106
+  tracker_id: 2
+workflows_132: 
+  new_status_id: 2
+  role_id: 2
+  old_status_id: 3
+  id: 132
+  tracker_id: 2
+workflows_213: 
+  new_status_id: 4
+  role_id: 2
+  old_status_id: 1
+  id: 213
+  tracker_id: 3
+workflows_240: 
+  new_status_id: 5
+  role_id: 2
+  old_status_id: 6
+  id: 240
+  tracker_id: 3
+workflows_026: 
+  new_status_id: 1
+  role_id: 1
+  old_status_id: 6
+  id: 26
+  tracker_id: 1
+workflows_052: 
+  new_status_id: 2
+  role_id: 2
+  old_status_id: 5
+  id: 52
+  tracker_id: 1
+workflows_107: 
+  new_status_id: 2
+  role_id: 1
+  old_status_id: 4
+  id: 107
+  tracker_id: 2
+workflows_133: 
+  new_status_id: 4
+  role_id: 2
+  old_status_id: 3
+  id: 133
+  tracker_id: 2
+workflows_214: 
+  new_status_id: 5
+  role_id: 2
+  old_status_id: 1
+  id: 214
+  tracker_id: 3
+workflows_241: 
+  new_status_id: 2
+  role_id: 3
+  old_status_id: 1
+  id: 241
+  tracker_id: 3
+workflows_027: 
+  new_status_id: 2
+  role_id: 1
+  old_status_id: 6
+  id: 27
+  tracker_id: 1
+workflows_053: 
+  new_status_id: 3
+  role_id: 2
+  old_status_id: 5
+  id: 53
+  tracker_id: 1
+workflows_080: 
+  new_status_id: 6
+  role_id: 3
+  old_status_id: 4
+  id: 80
+  tracker_id: 1
+workflows_108: 
+  new_status_id: 3
+  role_id: 1
+  old_status_id: 4
+  id: 108
+  tracker_id: 2
+workflows_134: 
+  new_status_id: 5
+  role_id: 2
+  old_status_id: 3
+  id: 134
+  tracker_id: 2
+workflows_160: 
+  new_status_id: 6
+  role_id: 3
+  old_status_id: 2
+  id: 160
+  tracker_id: 2
+workflows_215: 
+  new_status_id: 6
+  role_id: 2
+  old_status_id: 1
+  id: 215
+  tracker_id: 3
+workflows_242: 
+  new_status_id: 3
+  role_id: 3
+  old_status_id: 1
+  id: 242
+  tracker_id: 3
+workflows_028: 
+  new_status_id: 3
+  role_id: 1
+  old_status_id: 6
+  id: 28
+  tracker_id: 1
+workflows_054: 
+  new_status_id: 4
+  role_id: 2
+  old_status_id: 5
+  id: 54
+  tracker_id: 1
+workflows_081: 
+  new_status_id: 1
+  role_id: 3
+  old_status_id: 5
+  id: 81
+  tracker_id: 1
+workflows_109: 
+  new_status_id: 5
+  role_id: 1
+  old_status_id: 4
+  id: 109
+  tracker_id: 2
+workflows_135: 
+  new_status_id: 6
+  role_id: 2
+  old_status_id: 3
+  id: 135
+  tracker_id: 2
+workflows_161: 
+  new_status_id: 1
+  role_id: 3
+  old_status_id: 3
+  id: 161
+  tracker_id: 2
+workflows_216: 
+  new_status_id: 1
+  role_id: 2
+  old_status_id: 2
+  id: 216
+  tracker_id: 3
+workflows_243: 
+  new_status_id: 4
+  role_id: 3
+  old_status_id: 1
+  id: 243
+  tracker_id: 3
+workflows_029: 
+  new_status_id: 4
+  role_id: 1
+  old_status_id: 6
+  id: 29
+  tracker_id: 1
+workflows_055: 
+  new_status_id: 6
+  role_id: 2
+  old_status_id: 5
+  id: 55
+  tracker_id: 1
+workflows_082: 
+  new_status_id: 2
+  role_id: 3
+  old_status_id: 5
+  id: 82
+  tracker_id: 1
+workflows_136: 
+  new_status_id: 1
+  role_id: 2
+  old_status_id: 4
+  id: 136
+  tracker_id: 2
+workflows_162: 
+  new_status_id: 2
+  role_id: 3
+  old_status_id: 3
+  id: 162
+  tracker_id: 2
+workflows_217: 
+  new_status_id: 3
+  role_id: 2
+  old_status_id: 2
+  id: 217
+  tracker_id: 3
+workflows_270: 
+  new_status_id: 5
+  role_id: 3
+  old_status_id: 6
+  id: 270
+  tracker_id: 3
+workflows_244: 
+  new_status_id: 5
+  role_id: 3
+  old_status_id: 1
+  id: 244
+  tracker_id: 3
+workflows_056: 
+  new_status_id: 1
+  role_id: 2
+  old_status_id: 6
+  id: 56
+  tracker_id: 1
+workflows_137: 
+  new_status_id: 2
+  role_id: 2
+  old_status_id: 4
+  id: 137
+  tracker_id: 2
+workflows_163: 
+  new_status_id: 4
+  role_id: 3
+  old_status_id: 3
+  id: 163
+  tracker_id: 2
+workflows_190: 
+  new_status_id: 6
+  role_id: 1
+  old_status_id: 2
+  id: 190
+  tracker_id: 3
+workflows_218: 
+  new_status_id: 4
+  role_id: 2
+  old_status_id: 2
+  id: 218
+  tracker_id: 3
+workflows_245: 
+  new_status_id: 6
+  role_id: 3
+  old_status_id: 1
+  id: 245
+  tracker_id: 3
+workflows_057: 
+  new_status_id: 2
+  role_id: 2
+  old_status_id: 6
+  id: 57
+  tracker_id: 1
+workflows_083: 
+  new_status_id: 3
+  role_id: 3
+  old_status_id: 5
+  id: 83
+  tracker_id: 1
+workflows_138: 
+  new_status_id: 3
+  role_id: 2
+  old_status_id: 4
+  id: 138
+  tracker_id: 2
+workflows_164: 
+  new_status_id: 5
+  role_id: 3
+  old_status_id: 3
+  id: 164
+  tracker_id: 2
+workflows_191: 
+  new_status_id: 1
+  role_id: 1
+  old_status_id: 3
+  id: 191
+  tracker_id: 3
+workflows_219: 
+  new_status_id: 5
+  role_id: 2
+  old_status_id: 2
+  id: 219
+  tracker_id: 3
+workflows_246: 
+  new_status_id: 1
+  role_id: 3
+  old_status_id: 2
+  id: 246
+  tracker_id: 3
+workflows_058: 
+  new_status_id: 3
+  role_id: 2
+  old_status_id: 6
+  id: 58
+  tracker_id: 1
+workflows_084: 
+  new_status_id: 4
+  role_id: 3
+  old_status_id: 5
+  id: 84
+  tracker_id: 1
+workflows_139: 
+  new_status_id: 5
+  role_id: 2
+  old_status_id: 4
+  id: 139
+  tracker_id: 2
+workflows_165: 
+  new_status_id: 6
+  role_id: 3
+  old_status_id: 3
+  id: 165
+  tracker_id: 2
+workflows_192: 
+  new_status_id: 2
+  role_id: 1
+  old_status_id: 3
+  id: 192
+  tracker_id: 3
+workflows_247: 
+  new_status_id: 3
+  role_id: 3
+  old_status_id: 2
+  id: 247
+  tracker_id: 3
+workflows_059: 
+  new_status_id: 4
+  role_id: 2
+  old_status_id: 6
+  id: 59
+  tracker_id: 1
+workflows_085: 
+  new_status_id: 6
+  role_id: 3
+  old_status_id: 5
+  id: 85
+  tracker_id: 1
+workflows_166: 
+  new_status_id: 1
+  role_id: 3
+  old_status_id: 4
+  id: 166
+  tracker_id: 2
+workflows_248: 
+  new_status_id: 4
+  role_id: 3
+  old_status_id: 2
+  id: 248
+  tracker_id: 3
+workflows_086: 
+  new_status_id: 1
+  role_id: 3
+  old_status_id: 6
+  id: 86
+  tracker_id: 1
+workflows_167: 
+  new_status_id: 2
+  role_id: 3
+  old_status_id: 4
+  id: 167
+  tracker_id: 2
+workflows_193: 
+  new_status_id: 4
+  role_id: 1
+  old_status_id: 3
+  id: 193
+  tracker_id: 3
+workflows_249: 
+  new_status_id: 5
+  role_id: 3
+  old_status_id: 2
+  id: 249
+  tracker_id: 3
+workflows_087: 
+  new_status_id: 2
+  role_id: 3
+  old_status_id: 6
+  id: 87
+  tracker_id: 1
+workflows_168: 
+  new_status_id: 3
+  role_id: 3
+  old_status_id: 4
+  id: 168
+  tracker_id: 2
+workflows_194: 
+  new_status_id: 5
+  role_id: 1
+  old_status_id: 3
+  id: 194
+  tracker_id: 3
+workflows_088: 
+  new_status_id: 3
+  role_id: 3
+  old_status_id: 6
+  id: 88
+  tracker_id: 1
+workflows_169: 
+  new_status_id: 5
+  role_id: 3
+  old_status_id: 4
+  id: 169
+  tracker_id: 2
+workflows_195: 
+  new_status_id: 6
+  role_id: 1
+  old_status_id: 3
+  id: 195
+  tracker_id: 3
+workflows_089: 
+  new_status_id: 4
+  role_id: 3
+  old_status_id: 6
+  id: 89
+  tracker_id: 1
+workflows_196: 
+  new_status_id: 1
+  role_id: 1
+  old_status_id: 4
+  id: 196
+  tracker_id: 3
+workflows_197: 
+  new_status_id: 2
+  role_id: 1
+  old_status_id: 4
+  id: 197
+  tracker_id: 3
+workflows_198: 
+  new_status_id: 3
+  role_id: 1
+  old_status_id: 4
+  id: 198
+  tracker_id: 3
+workflows_199: 
+  new_status_id: 5
+  role_id: 1
+  old_status_id: 4
+  id: 199
+  tracker_id: 3
+workflows_010: 
+  new_status_id: 6
+  role_id: 1
+  old_status_id: 2
+  id: 10
+  tracker_id: 1
+workflows_011: 
+  new_status_id: 1
+  role_id: 1
+  old_status_id: 3
+  id: 11
+  tracker_id: 1
+workflows_012: 
+  new_status_id: 2
+  role_id: 1
+  old_status_id: 3
+  id: 12
+  tracker_id: 1
+workflows_200: 
+  new_status_id: 6
+  role_id: 1
+  old_status_id: 4
+  id: 200
+  tracker_id: 3
+workflows_013: 
+  new_status_id: 4
+  role_id: 1
+  old_status_id: 3
+  id: 13
+  tracker_id: 1
+workflows_120: 
+  new_status_id: 5
+  role_id: 1
+  old_status_id: 6
+  id: 120
+  tracker_id: 2
+workflows_201: 
+  new_status_id: 1
+  role_id: 1
+  old_status_id: 5
+  id: 201
+  tracker_id: 3
+workflows_040: 
+  new_status_id: 6
+  role_id: 2
+  old_status_id: 2
+  id: 40
+  tracker_id: 1
+workflows_121: 
+  new_status_id: 2
+  role_id: 2
+  old_status_id: 1
+  id: 121
+  tracker_id: 2
+workflows_202: 
+  new_status_id: 2
+  role_id: 1
+  old_status_id: 5
+  id: 202
+  tracker_id: 3
+workflows_014: 
+  new_status_id: 5
+  role_id: 1
+  old_status_id: 3
+  id: 14
+  tracker_id: 1
+workflows_041: 
+  new_status_id: 1
+  role_id: 2
+  old_status_id: 3
+  id: 41
+  tracker_id: 1
+workflows_122: 
+  new_status_id: 3
+  role_id: 2
+  old_status_id: 1
+  id: 122
+  tracker_id: 2
+workflows_203: 
+  new_status_id: 3
+  role_id: 1
+  old_status_id: 5
+  id: 203
+  tracker_id: 3
+workflows_015: 
+  new_status_id: 6
+  role_id: 1
+  old_status_id: 3
+  id: 15
+  tracker_id: 1
+workflows_230: 
+  new_status_id: 6
+  role_id: 2
+  old_status_id: 4
+  id: 230
+  tracker_id: 3
+workflows_123: 
+  new_status_id: 4
+  role_id: 2
+  old_status_id: 1
+  id: 123
+  tracker_id: 2
+workflows_204: 
+  new_status_id: 4
+  role_id: 1
+  old_status_id: 5
+  id: 204
+  tracker_id: 3
+workflows_016: 
+  new_status_id: 1
+  role_id: 1
+  old_status_id: 4
+  id: 16
+  tracker_id: 1
+workflows_042: 
+  new_status_id: 2
+  role_id: 2
+  old_status_id: 3
+  id: 42
+  tracker_id: 1
+workflows_231: 
+  new_status_id: 1
+  role_id: 2
+  old_status_id: 5
+  id: 231
+  tracker_id: 3
+workflows_070: 
+  new_status_id: 6
+  role_id: 3
+  old_status_id: 2
+  id: 70
+  tracker_id: 1
+workflows_124: 
+  new_status_id: 5
+  role_id: 2
+  old_status_id: 1
+  id: 124
+  tracker_id: 2
+workflows_150: 
+  new_status_id: 5
+  role_id: 2
+  old_status_id: 6
+  id: 150
+  tracker_id: 2
+workflows_205: 
+  new_status_id: 6
+  role_id: 1
+  old_status_id: 5
+  id: 205
+  tracker_id: 3
+workflows_017: 
+  new_status_id: 2
+  role_id: 1
+  old_status_id: 4
+  id: 17
+  tracker_id: 1
+workflows_043: 
+  new_status_id: 4
+  role_id: 2
+  old_status_id: 3
+  id: 43
+  tracker_id: 1
+workflows_232: 
+  new_status_id: 2
+  role_id: 2
+  old_status_id: 5
+  id: 232
+  tracker_id: 3
+workflows_125: 
+  new_status_id: 6
+  role_id: 2
+  old_status_id: 1
+  id: 125
+  tracker_id: 2
+workflows_151: 
+  new_status_id: 2
+  role_id: 3
+  old_status_id: 1
+  id: 151
+  tracker_id: 2
+workflows_206: 
+  new_status_id: 1
+  role_id: 1
+  old_status_id: 6
+  id: 206
+  tracker_id: 3
+workflows_018: 
+  new_status_id: 3
+  role_id: 1
+  old_status_id: 4
+  id: 18
+  tracker_id: 1
+workflows_044: 
+  new_status_id: 5
+  role_id: 2
+  old_status_id: 3
+  id: 44
+  tracker_id: 1
+workflows_071: 
+  new_status_id: 1
+  role_id: 3
+  old_status_id: 3
+  id: 71
+  tracker_id: 1
+workflows_233: 
+  new_status_id: 3
+  role_id: 2
+  old_status_id: 5
+  id: 233
+  tracker_id: 3
+workflows_126: 
+  new_status_id: 1
+  role_id: 2
+  old_status_id: 2
+  id: 126
+  tracker_id: 2
+workflows_152: 
+  new_status_id: 3
+  role_id: 3
+  old_status_id: 1
+  id: 152
+  tracker_id: 2
+workflows_207: 
+  new_status_id: 2
+  role_id: 1
+  old_status_id: 6
+  id: 207
+  tracker_id: 3
+workflows_019: 
+  new_status_id: 5
+  role_id: 1
+  old_status_id: 4
+  id: 19
+  tracker_id: 1
+workflows_045: 
+  new_status_id: 6
+  role_id: 2
+  old_status_id: 3
+  id: 45
+  tracker_id: 1
+workflows_260: 
+  new_status_id: 6
+  role_id: 3
+  old_status_id: 4
+  id: 260
+  tracker_id: 3
+workflows_234: 
+  new_status_id: 4
+  role_id: 2
+  old_status_id: 5
+  id: 234
+  tracker_id: 3
+workflows_127: 
+  new_status_id: 3
+  role_id: 2
+  old_status_id: 2
+  id: 127
+  tracker_id: 2
+workflows_153: 
+  new_status_id: 4
+  role_id: 3
+  old_status_id: 1
+  id: 153
+  tracker_id: 2
+workflows_180: 
+  new_status_id: 5
+  role_id: 3
+  old_status_id: 6
+  id: 180
+  tracker_id: 2
+workflows_208: 
+  new_status_id: 3
+  role_id: 1
+  old_status_id: 6
+  id: 208
+  tracker_id: 3
+workflows_046: 
+  new_status_id: 1
+  role_id: 2
+  old_status_id: 4
+  id: 46
+  tracker_id: 1
+workflows_072: 
+  new_status_id: 2
+  role_id: 3
+  old_status_id: 3
+  id: 72
+  tracker_id: 1
+workflows_261: 
+  new_status_id: 1
+  role_id: 3
+  old_status_id: 5
+  id: 261
+  tracker_id: 3
+workflows_235: 
+  new_status_id: 6
+  role_id: 2
+  old_status_id: 5
+  id: 235
+  tracker_id: 3
+workflows_154: 
+  new_status_id: 5
+  role_id: 3
+  old_status_id: 1
+  id: 154
+  tracker_id: 2
+workflows_181: 
+  new_status_id: 2
+  role_id: 1
+  old_status_id: 1
+  id: 181
+  tracker_id: 3
+workflows_209: 
+  new_status_id: 4
+  role_id: 1
+  old_status_id: 6
+  id: 209
+  tracker_id: 3
+workflows_047: 
+  new_status_id: 2
+  role_id: 2
+  old_status_id: 4
+  id: 47
+  tracker_id: 1
+workflows_073: 
+  new_status_id: 4
+  role_id: 3
+  old_status_id: 3
+  id: 73
+  tracker_id: 1
+workflows_128: 
+  new_status_id: 4
+  role_id: 2
+  old_status_id: 2
+  id: 128
+  tracker_id: 2
+workflows_262: 
+  new_status_id: 2
+  role_id: 3
+  old_status_id: 5
+  id: 262
+  tracker_id: 3
+workflows_236: 
+  new_status_id: 1
+  role_id: 2
+  old_status_id: 6
+  id: 236
+  tracker_id: 3
+workflows_155: 
+  new_status_id: 6
+  role_id: 3
+  old_status_id: 1
+  id: 155
+  tracker_id: 2
+workflows_048: 
+  new_status_id: 3
+  role_id: 2
+  old_status_id: 4
+  id: 48
+  tracker_id: 1
+workflows_074: 
+  new_status_id: 5
+  role_id: 3
+  old_status_id: 3
+  id: 74
+  tracker_id: 1
+workflows_129: 
+  new_status_id: 5
+  role_id: 2
+  old_status_id: 2
+  id: 129
+  tracker_id: 2
+workflows_263: 
+  new_status_id: 3
+  role_id: 3
+  old_status_id: 5
+  id: 263
+  tracker_id: 3
+workflows_237: 
+  new_status_id: 2
+  role_id: 2
+  old_status_id: 6
+  id: 237
+  tracker_id: 3
+workflows_182: 
+  new_status_id: 3
+  role_id: 1
+  old_status_id: 1
+  id: 182
+  tracker_id: 3
+workflows_049: 
+  new_status_id: 5
+  role_id: 2
+  old_status_id: 4
+  id: 49
+  tracker_id: 1
+workflows_075: 
+  new_status_id: 6
+  role_id: 3
+  old_status_id: 3
+  id: 75
+  tracker_id: 1
+workflows_156: 
+  new_status_id: 1
+  role_id: 3
+  old_status_id: 2
+  id: 156
+  tracker_id: 2
+workflows_264: 
+  new_status_id: 4
+  role_id: 3
+  old_status_id: 5
+  id: 264
+  tracker_id: 3
+workflows_238: 
+  new_status_id: 3
+  role_id: 2
+  old_status_id: 6
+  id: 238
+  tracker_id: 3
+workflows_183: 
+  new_status_id: 4
+  role_id: 1
+  old_status_id: 1
+  id: 183
+  tracker_id: 3
+workflows_076: 
+  new_status_id: 1
+  role_id: 3
+  old_status_id: 4
+  id: 76
+  tracker_id: 1
+workflows_157: 
+  new_status_id: 3
+  role_id: 3
+  old_status_id: 2
+  id: 157
+  tracker_id: 2
+workflows_265: 
+  new_status_id: 6
+  role_id: 3
+  old_status_id: 5
+  id: 265
+  tracker_id: 3
+workflows_239: 
+  new_status_id: 4
+  role_id: 2
+  old_status_id: 6
+  id: 239
+  tracker_id: 3
+workflows_077: 
+  new_status_id: 2
+  role_id: 3
+  old_status_id: 4
+  id: 77
+  tracker_id: 1
+workflows_158: 
+  new_status_id: 4
+  role_id: 3
+  old_status_id: 2
+  id: 158
+  tracker_id: 2
+workflows_184: 
+  new_status_id: 5
+  role_id: 1
+  old_status_id: 1
+  id: 184
+  tracker_id: 3
+workflows_266: 
+  new_status_id: 1
+  role_id: 3
+  old_status_id: 6
+  id: 266
+  tracker_id: 3
+workflows_078: 
+  new_status_id: 3
+  role_id: 3
+  old_status_id: 4
+  id: 78
+  tracker_id: 1
+workflows_159: 
+  new_status_id: 5
+  role_id: 3
+  old_status_id: 2
+  id: 159
+  tracker_id: 2
+workflows_185: 
+  new_status_id: 6
+  role_id: 1
+  old_status_id: 1
+  id: 185
+  tracker_id: 3
+workflows_267: 
+  new_status_id: 2
+  role_id: 3
+  old_status_id: 6
+  id: 267
+  tracker_id: 3
+workflows_079: 
+  new_status_id: 5
+  role_id: 3
+  old_status_id: 4
+  id: 79
+  tracker_id: 1
+workflows_186: 
+  new_status_id: 1
+  role_id: 1
+  old_status_id: 2
+  id: 186
+  tracker_id: 3
+workflows_268: 
+  new_status_id: 3
+  role_id: 3
+  old_status_id: 6
+  id: 268
+  tracker_id: 3
+workflows_187: 
+  new_status_id: 3
+  role_id: 1
+  old_status_id: 2
+  id: 187
+  tracker_id: 3
+workflows_269: 
+  new_status_id: 4
+  role_id: 3
+  old_status_id: 6
+  id: 269
+  tracker_id: 3
+workflows_188: 
+  new_status_id: 4
+  role_id: 1
+  old_status_id: 2
+  id: 188
+  tracker_id: 3
index 5b27446..1caf98f 100644 (file)
@@ -1,61 +1,61 @@
-# Redmine - project management software\r
-# Copyright (C) 2006-2009  Jean-Philippe Lang\r
-#\r
-# This program is free software; you can redistribute it and/or\r
-# modify it under the terms of the GNU General Public License\r
-# as published by the Free Software Foundation; either version 2\r
-# of the License, or (at your option) any later version.\r
-# \r
-# This program is distributed in the hope that it will be useful,\r
-# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-# GNU General Public License for more details.\r
-# \r
-# You should have received a copy of the GNU General Public License\r
-# along with this program; if not, write to the Free Software\r
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
-\r
-require File.dirname(__FILE__) + '/../test_helper'\r
-require 'custom_fields_controller'\r
-\r
-# Re-raise errors caught by the controller.\r
-class CustomFieldsController; def rescue_action(e) raise e end; end\r
-\r
-class CustomFieldsControllerTest < ActionController::TestCase\r
-  fixtures :custom_fields, :trackers, :users\r
-  \r
-  def setup\r
-    @controller = CustomFieldsController.new\r
-    @request    = ActionController::TestRequest.new\r
-    @response   = ActionController::TestResponse.new\r
-    @request.session[:user_id] = 1\r
-  end\r
-  \r
-  def test_post_new_list_custom_field\r
-    assert_difference 'CustomField.count' do\r
-      post :new, :type => "IssueCustomField",\r
-                 :custom_field => {:name => "test_post_new_list",\r
-                                   :default_value => "",\r
-                                   :min_length => "0",\r
-                                   :searchable => "0",\r
-                                   :regexp => "",\r
-                                   :is_for_all => "1",\r
-                                   :possible_values => "0.1\n0.2\n",\r
-                                   :max_length => "0",\r
-                                   :is_filter => "0",\r
-                                   :is_required =>"0",\r
-                                   :field_format => "list",\r
-                                   :tracker_ids => ["1", ""]}\r
-    end        \r
-    assert_redirected_to '/custom_fields?tab=IssueCustomField'\r
-    field = IssueCustomField.find_by_name('test_post_new_list')\r
-    assert_not_nil field\r
-    assert_equal ["0.1", "0.2"], field.possible_values\r
-    assert_equal 1, field.trackers.size\r
-  end\r
-  \r
-  def test_invalid_custom_field_class_should_redirect_to_list\r
-    get :new, :type => 'UnknownCustomField'\r
-    assert_redirected_to '/custom_fields'\r
-  end\r
-end\r
+# Redmine - project management software
+# Copyright (C) 2006-2009  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require File.dirname(__FILE__) + '/../test_helper'
+require 'custom_fields_controller'
+
+# Re-raise errors caught by the controller.
+class CustomFieldsController; def rescue_action(e) raise e end; end
+
+class CustomFieldsControllerTest < ActionController::TestCase
+  fixtures :custom_fields, :trackers, :users
+  
+  def setup
+    @controller = CustomFieldsController.new
+    @request    = ActionController::TestRequest.new
+    @response   = ActionController::TestResponse.new
+    @request.session[:user_id] = 1
+  end
+  
+  def test_post_new_list_custom_field
+    assert_difference 'CustomField.count' do
+      post :new, :type => "IssueCustomField",
+                 :custom_field => {:name => "test_post_new_list",
+                                   :default_value => "",
+                                   :min_length => "0",
+                                   :searchable => "0",
+                                   :regexp => "",
+                                   :is_for_all => "1",
+                                   :possible_values => "0.1\n0.2\n",
+                                   :max_length => "0",
+                                   :is_filter => "0",
+                                   :is_required =>"0",
+                                   :field_format => "list",
+                                   :tracker_ids => ["1", ""]}
+    end        
+    assert_redirected_to '/custom_fields?tab=IssueCustomField'
+    field = IssueCustomField.find_by_name('test_post_new_list')
+    assert_not_nil field
+    assert_equal ["0.1", "0.2"], field.possible_values
+    assert_equal 1, field.trackers.size
+  end
+  
+  def test_invalid_custom_field_class_should_redirect_to_list
+    get :new, :type => 'UnknownCustomField'
+    assert_redirected_to '/custom_fields'
+  end
+end
index 812ae19..1009a46 100644 (file)
-# Redmine - project management software\r
-# Copyright (C) 2006-2008  Jean-Philippe Lang\r
-#\r
-# This program is free software; you can redistribute it and/or\r
-# modify it under the terms of the GNU General Public License\r
-# as published by the Free Software Foundation; either version 2\r
-# of the License, or (at your option) any later version.\r
-# \r
-# This program is distributed in the hope that it will be useful,\r
-# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-# GNU General Public License for more details.\r
-# \r
-# You should have received a copy of the GNU General Public License\r
-# along with this program; if not, write to the Free Software\r
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
-\r
-require File.dirname(__FILE__) + '/../test_helper'\r
-require 'projects_controller'\r
-\r
-# Re-raise errors caught by the controller.\r
-class ProjectsController; def rescue_action(e) raise e end; end\r
-\r
-class ProjectsControllerTest < ActionController::TestCase\r
-  fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details,\r
-           :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages,\r
-           :attachments\r
-\r
-  def setup\r
-    @controller = ProjectsController.new\r
-    @request    = ActionController::TestRequest.new\r
-    @response   = ActionController::TestResponse.new\r
-    @request.session[:user_id] = nil\r
-    Setting.default_language = 'en'\r
-  end\r
-  \r
-  def test_index_routing\r
-    assert_routing(\r
-      {:method => :get, :path => '/projects'},\r
-      :controller => 'projects', :action => 'index'\r
-    )\r
-  end\r
-  \r
-  def test_index\r
-    get :index\r
-    assert_response :success\r
-    assert_template 'index'\r
-    assert_not_nil assigns(:projects)\r
-    \r
-    assert_tag :ul, :child => {:tag => 'li',\r
-                               :descendant => {:tag => 'a', :content => 'eCookbook'},\r
-                               :child => { :tag => 'ul',\r
-                                           :descendant => { :tag => 'a',\r
-                                                            :content => 'Child of private child'\r
-                                                           }\r
-                                          }\r
-                               }\r
-                               \r
-    assert_no_tag :a, :content => /Private child of eCookbook/\r
-  end\r
-  \r
-  def test_index_atom_routing\r
-    assert_routing(\r
-      {:method => :get, :path => '/projects.atom'},\r
-      :controller => 'projects', :action => 'index', :format => 'atom'\r
-    )\r
-  end\r
-  \r
-  def test_index_atom\r
-    get :index, :format => 'atom'\r
-    assert_response :success\r
-    assert_template 'common/feed.atom.rxml'\r
-    assert_select 'feed>title', :text => 'Redmine: Latest projects'\r
-    assert_select 'feed>entry', :count => Project.count(:conditions => Project.visible_by(User.current))\r
-  end\r
-  \r
-  def test_add_routing\r
-    assert_routing(\r
-      {:method => :get, :path => '/projects/new'},\r
-      :controller => 'projects', :action => 'add'\r
-    )\r
-    assert_recognizes(\r
-      {:controller => 'projects', :action => 'add'},\r
-      {:method => :post, :path => '/projects/new'}\r
-    )\r
-    assert_recognizes(\r
-      {:controller => 'projects', :action => 'add'},\r
-      {:method => :post, :path => '/projects'}\r
-    )\r
-  end\r
-  \r
-  def test_get_add\r
-    @request.session[:user_id] = 1\r
-    get :add\r
-    assert_response :success\r
-    assert_template 'add'\r
-  end\r
-  \r
-  def test_get_add_by_non_admin\r
-    @request.session[:user_id] = 2\r
-    get :add\r
-    assert_response :success\r
-    assert_template 'add'\r
-  end\r
-  \r
-  def test_post_add\r
-    @request.session[:user_id] = 1\r
-    post :add, :project => { :name => "blog", \r
-                             :description => "weblog",\r
-                             :identifier => "blog",\r
-                             :is_public => 1,\r
-                             :custom_field_values => { '3' => 'Beta' }\r
-                            }\r
-    assert_redirected_to '/projects/blog/settings'\r
-    \r
-    project = Project.find_by_name('blog')\r
-    assert_kind_of Project, project\r
-    assert_equal 'weblog', project.description \r
-    assert_equal true, project.is_public?\r
-  end\r
-  \r
-  def test_post_add_by_non_admin\r
-    @request.session[:user_id] = 2\r
-    post :add, :project => { :name => "blog", \r
-                             :description => "weblog",\r
-                             :identifier => "blog",\r
-                             :is_public => 1,\r
-                             :custom_field_values => { '3' => 'Beta' }\r
-                            }\r
-    assert_redirected_to '/projects/blog/settings'\r
-    \r
-    project = Project.find_by_name('blog')\r
-    assert_kind_of Project, project\r
-    assert_equal 'weblog', project.description \r
-    assert_equal true, project.is_public?\r
-    \r
-    # User should be added as a project member\r
-    assert User.find(2).member_of?(project)\r
-    assert_equal 1, project.members.size\r
-  end\r
-  \r
-  def test_show_routing\r
-    assert_routing(\r
-      {:method => :get, :path => '/projects/test'},\r
-      :controller => 'projects', :action => 'show', :id => 'test'\r
-    )\r
-  end\r
-  \r
-  def test_show_by_id\r
-    get :show, :id => 1\r
-    assert_response :success\r
-    assert_template 'show'\r
-    assert_not_nil assigns(:project)\r
-  end\r
-\r
-  def test_show_by_identifier\r
-    get :show, :id => 'ecookbook'\r
-    assert_response :success\r
-    assert_template 'show'\r
-    assert_not_nil assigns(:project)\r
-    assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)\r
-  end\r
-  \r
-  def test_show_should_not_fail_when_custom_values_are_nil\r
-    project = Project.find_by_identifier('ecookbook')\r
-    project.custom_values.first.update_attribute(:value, nil)\r
-    get :show, :id => 'ecookbook'\r
-    assert_response :success\r
-    assert_template 'show'\r
-    assert_not_nil assigns(:project)\r
-    assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)\r
-  end\r
-  \r
-  def test_private_subprojects_hidden\r
-    get :show, :id => 'ecookbook'\r
-    assert_response :success\r
-    assert_template 'show'\r
-    assert_no_tag :tag => 'a', :content => /Private child/\r
-  end\r
-\r
-  def test_private_subprojects_visible\r
-    @request.session[:user_id] = 2 # manager who is a member of the private subproject\r
-    get :show, :id => 'ecookbook'\r
-    assert_response :success\r
-    assert_template 'show'\r
-    assert_tag :tag => 'a', :content => /Private child/\r
-  end\r
-  \r
-  def test_settings_routing\r
-    assert_routing(\r
-      {:method => :get, :path => '/projects/4223/settings'},\r
-      :controller => 'projects', :action => 'settings', :id => '4223'\r
-    )\r
-    assert_routing(\r
-      {:method => :get, :path => '/projects/4223/settings/members'},\r
-      :controller => 'projects', :action => 'settings', :id => '4223', :tab => 'members'\r
-    )\r
-  end\r
-  \r
-  def test_settings\r
-    @request.session[:user_id] = 2 # manager\r
-    get :settings, :id => 1\r
-    assert_response :success\r
-    assert_template 'settings'\r
-  end\r
-  \r
-  def test_edit\r
-    @request.session[:user_id] = 2 # manager\r
-    post :edit, :id => 1, :project => {:name => 'Test changed name',\r
-                                       :issue_custom_field_ids => ['']}\r
-    assert_redirected_to 'projects/ecookbook/settings'\r
-    project = Project.find(1)\r
-    assert_equal 'Test changed name', project.name\r
-  end\r
-  \r
-  def test_add_version_routing\r
-    assert_routing(\r
-      {:method => :get, :path => 'projects/64/versions/new'},\r
-      :controller => 'projects', :action => 'add_version', :id => '64'\r
-    )\r
-    assert_routing(\r
-    #TODO: use PUT\r
-      {:method => :post, :path => 'projects/64/versions/new'},\r
-      :controller => 'projects', :action => 'add_version', :id => '64'\r
-    )\r
-  end\r
-  \r
-  def test_add_issue_category_routing\r
-    assert_routing(\r
-      {:method => :get, :path => 'projects/test/categories/new'},\r
-      :controller => 'projects', :action => 'add_issue_category', :id => 'test'\r
-    )\r
-    assert_routing(\r
-    #TODO: use PUT and update form\r
-      {:method => :post, :path => 'projects/64/categories/new'},\r
-      :controller => 'projects', :action => 'add_issue_category', :id => '64'\r
-    )\r
-  end\r
-  \r
-  def test_destroy_routing\r
-    assert_routing(\r
-      {:method => :get, :path => '/projects/567/destroy'},\r
-      :controller => 'projects', :action => 'destroy', :id => '567'\r
-    )\r
-    assert_routing(\r
-    #TODO: use DELETE and update form\r
-      {:method => :post, :path => 'projects/64/destroy'},\r
-      :controller => 'projects', :action => 'destroy', :id => '64'\r
-    )\r
-  end\r
-  \r
-  def test_get_destroy\r
-    @request.session[:user_id] = 1 # admin\r
-    get :destroy, :id => 1\r
-    assert_response :success\r
-    assert_template 'destroy'\r
-    assert_not_nil Project.find_by_id(1)\r
-  end\r
-\r
-  def test_post_destroy\r
-    @request.session[:user_id] = 1 # admin\r
-    post :destroy, :id => 1, :confirm => 1\r
-    assert_redirected_to 'admin/projects'\r
-    assert_nil Project.find_by_id(1)\r
-  end\r
-  \r
-  def test_add_file\r
-    set_tmp_attachments_directory\r
-    @request.session[:user_id] = 2\r
-    Setting.notified_events = ['file_added']\r
-    ActionMailer::Base.deliveries.clear\r
-    \r
-    assert_difference 'Attachment.count' do\r
-      post :add_file, :id => 1, :version_id => '',\r
-           :attachments => {'1' => {'file' => test_uploaded_file('testfile.txt', 'text/plain')}}\r
-    end\r
-    assert_redirected_to 'projects/ecookbook/files'\r
-    a = Attachment.find(:first, :order => 'created_on DESC')\r
-    assert_equal 'testfile.txt', a.filename\r
-    assert_equal Project.find(1), a.container\r
-\r
-    mail = ActionMailer::Base.deliveries.last\r
-    assert_kind_of TMail::Mail, mail\r
-    assert_equal "[eCookbook] New file", mail.subject\r
-    assert mail.body.include?('testfile.txt')\r
-  end\r
-  \r
-  def test_add_file_routing\r
-    assert_routing(\r
-      {:method => :get, :path => '/projects/33/files/new'},\r
-      :controller => 'projects', :action => 'add_file', :id => '33'\r
-    )\r
-    assert_routing(\r
-      {:method => :post, :path => '/projects/33/files/new'},\r
-      :controller => 'projects', :action => 'add_file', :id => '33'\r
-    )\r
-  end\r
-  \r
-  def test_add_version_file\r
-    set_tmp_attachments_directory\r
-    @request.session[:user_id] = 2\r
-    Setting.notified_events = ['file_added']\r
-    \r
-    assert_difference 'Attachment.count' do\r
-      post :add_file, :id => 1, :version_id => '2',\r
-           :attachments => {'1' => {'file' => test_uploaded_file('testfile.txt', 'text/plain')}}\r
-    end\r
-    assert_redirected_to 'projects/ecookbook/files'\r
-    a = Attachment.find(:first, :order => 'created_on DESC')\r
-    assert_equal 'testfile.txt', a.filename\r
-    assert_equal Version.find(2), a.container\r
-  end\r
-  \r
-  def test_list_files\r
-    get :list_files, :id => 1\r
-    assert_response :success\r
-    assert_template 'list_files'\r
-    assert_not_nil assigns(:containers)\r
-    \r
-    # file attached to the project\r
-    assert_tag :a, :content => 'project_file.zip',\r
-                   :attributes => { :href => '/attachments/download/8/project_file.zip' }\r
-    \r
-    # file attached to a project's version\r
-    assert_tag :a, :content => 'version_file.zip',\r
-                   :attributes => { :href => '/attachments/download/9/version_file.zip' }\r
-  end\r
-\r
-  def test_list_files_routing\r
-    assert_routing(\r
-      {:method => :get, :path => '/projects/33/files'},\r
-      :controller => 'projects', :action => 'list_files', :id => '33'\r
-    )\r
-  end\r
-  \r
-  def test_changelog_routing\r
-    assert_routing(\r
-      {:method => :get, :path => '/projects/44/changelog'},\r
-      :controller => 'projects', :action => 'changelog', :id => '44'\r
-    )\r
-  end\r
-  \r
-  def test_changelog\r
-    get :changelog, :id => 1\r
-    assert_response :success\r
-    assert_template 'changelog'\r
-    assert_not_nil assigns(:versions)\r
-  end\r
-  \r
-  def test_roadmap_routing\r
-    assert_routing(\r
-      {:method => :get, :path => 'projects/33/roadmap'},\r
-      :controller => 'projects', :action => 'roadmap', :id => '33'\r
-    )\r
-  end\r
-  \r
-  def test_roadmap\r
-    get :roadmap, :id => 1\r
-    assert_response :success\r
-    assert_template 'roadmap'\r
-    assert_not_nil assigns(:versions)\r
-    # Version with no date set appears\r
-    assert assigns(:versions).include?(Version.find(3))\r
-    # Completed version doesn't appear\r
-    assert !assigns(:versions).include?(Version.find(1))\r
-  end\r
-  \r
-  def test_roadmap_with_completed_versions\r
-    get :roadmap, :id => 1, :completed => 1\r
-    assert_response :success\r
-    assert_template 'roadmap'\r
-    assert_not_nil assigns(:versions)\r
-    # Version with no date set appears\r
-    assert assigns(:versions).include?(Version.find(3))\r
-    # Completed version appears\r
-    assert assigns(:versions).include?(Version.find(1))\r
-  end\r
-  \r
-  def test_project_activity_routing\r
-    assert_routing(\r
-      {:method => :get, :path => '/projects/1/activity'},\r
-       :controller => 'projects', :action => 'activity', :id => '1'\r
-    )\r
-  end\r
-  \r
-  def test_project_activity_atom_routing\r
-    assert_routing(\r
-      {:method => :get, :path => '/projects/1/activity.atom'},\r
-       :controller => 'projects', :action => 'activity', :id => '1', :format => 'atom'\r
-    )    \r
-  end\r
-  \r
-  def test_project_activity\r
-    get :activity, :id => 1, :with_subprojects => 0\r
-    assert_response :success\r
-    assert_template 'activity'\r
-    assert_not_nil assigns(:events_by_day)\r
-    \r
-    assert_tag :tag => "h3", \r
-               :content => /#{2.days.ago.to_date.day}/,\r
-               :sibling => { :tag => "dl",\r
-                 :child => { :tag => "dt",\r
-                   :attributes => { :class => /issue-edit/ },\r
-                   :child => { :tag => "a",\r
-                     :content => /(#{IssueStatus.find(2).name})/,\r
-                   }\r
-                 }\r
-               }\r
-  end\r
-  \r
-  def test_previous_project_activity\r
-    get :activity, :id => 1, :from => 3.days.ago.to_date\r
-    assert_response :success\r
-    assert_template 'activity'\r
-    assert_not_nil assigns(:events_by_day)\r
-               \r
-    assert_tag :tag => "h3", \r
-               :content => /#{3.day.ago.to_date.day}/,\r
-               :sibling => { :tag => "dl",\r
-                 :child => { :tag => "dt",\r
-                   :attributes => { :class => /issue/ },\r
-                   :child => { :tag => "a",\r
-                     :content => /#{Issue.find(1).subject}/,\r
-                   }\r
-                 }\r
-               }\r
-  end\r
-  \r
-  def test_global_activity_routing\r
-    assert_routing({:method => :get, :path => '/activity'}, :controller => 'projects', :action => 'activity', :id => nil)\r
-  end\r
-  \r
-  def test_global_activity\r
-    get :activity\r
-    assert_response :success\r
-    assert_template 'activity'\r
-    assert_not_nil assigns(:events_by_day)\r
-    \r
-    assert_tag :tag => "h3", \r
-               :content => /#{5.day.ago.to_date.day}/,\r
-               :sibling => { :tag => "dl",\r
-                 :child => { :tag => "dt",\r
-                   :attributes => { :class => /issue/ },\r
-                   :child => { :tag => "a",\r
-                     :content => /#{Issue.find(5).subject}/,\r
-                   }\r
-                 }\r
-               }\r
-  end\r
-  \r
-  def test_user_activity\r
-    get :activity, :user_id => 2\r
-    assert_response :success\r
-    assert_template 'activity'\r
-    assert_not_nil assigns(:events_by_day)\r
-    \r
-    assert_tag :tag => "h3", \r
-               :content => /#{3.day.ago.to_date.day}/,\r
-               :sibling => { :tag => "dl",\r
-                 :child => { :tag => "dt",\r
-                   :attributes => { :class => /issue/ },\r
-                   :child => { :tag => "a",\r
-                     :content => /#{Issue.find(1).subject}/,\r
-                   }\r
-                 }\r
-               }\r
-  end\r
-  \r
-  def test_global_activity_atom_routing\r
-    assert_routing({:method => :get, :path => '/activity.atom'}, :controller => 'projects', :action => 'activity', :id => nil, :format => 'atom')\r
-  end\r
-  \r
-  def test_activity_atom_feed\r
-    get :activity, :format => 'atom'\r
-    assert_response :success\r
-    assert_template 'common/feed.atom.rxml'\r
-  end\r
-  \r
-  def test_archive_routing\r
-    assert_routing(\r
-    #TODO: use PUT to project path and modify form\r
-      {:method => :post, :path => 'projects/64/archive'},\r
-      :controller => 'projects', :action => 'archive', :id => '64'\r
-    )\r
-  end\r
-  \r
-  def test_archive\r
-    @request.session[:user_id] = 1 # admin\r
-    post :archive, :id => 1\r
-    assert_redirected_to 'admin/projects'\r
-    assert !Project.find(1).active?\r
-  end\r
-  \r
-  def test_unarchive_routing\r
-    assert_routing(\r
-    #TODO: use PUT to project path and modify form\r
-      {:method => :post, :path => '/projects/567/unarchive'},\r
-      :controller => 'projects', :action => 'unarchive', :id => '567'\r
-    )\r
-  end\r
-  \r
-  def test_unarchive\r
-    @request.session[:user_id] = 1 # admin\r
-    Project.find(1).archive\r
-    post :unarchive, :id => 1\r
-    assert_redirected_to 'admin/projects'\r
-    assert Project.find(1).active?\r
-  end\r
-  \r
-  def test_project_breadcrumbs_should_be_limited_to_3_ancestors\r
-    CustomField.delete_all\r
-    parent = nil\r
-    6.times do |i|\r
-      p = Project.create!(:name => "Breadcrumbs #{i}", :identifier => "breadcrumbs-#{i}")\r
-      p.set_parent!(parent)\r
-      get :show, :id => p\r
-      assert_tag :h1, :parent => { :attributes => {:id => 'header'}},\r
-                      :children => { :count => [i, 3].min,\r
-                                     :only => { :tag => 'a' } }\r
-                                     \r
-      parent = p\r
-    end\r
-  end\r
-\r
-  def test_copy_with_project\r
-    @request.session[:user_id] = 1 # admin\r
-    get :copy, :id => 1\r
-    assert_response :success\r
-    assert_template 'copy'\r
-    assert assigns(:project)\r
-    assert_equal Project.find(1).description, assigns(:project).description\r
-    assert_nil assigns(:project).id\r
-  end\r
-\r
-  def test_copy_without_project\r
-    @request.session[:user_id] = 1 # admin\r
-    get :copy\r
-    assert_response :redirect\r
-    assert_redirected_to :controller => 'admin', :action => 'projects'\r
-  end\r
-\r
-  def test_jump_should_redirect_to_active_tab\r
-    get :show, :id => 1, :jump => 'issues'\r
-    assert_redirected_to 'projects/ecookbook/issues'\r
-  end\r
-  \r
-  def test_jump_should_not_redirect_to_inactive_tab\r
-    get :show, :id => 3, :jump => 'documents'\r
-    assert_response :success\r
-    assert_template 'show'\r
-  end\r
-  \r
-  def test_jump_should_not_redirect_to_unknown_tab\r
-    get :show, :id => 3, :jump => 'foobar'\r
-    assert_response :success\r
-    assert_template 'show'\r
-  end\r
-  \r
-  # A hook that is manually registered later\r
-  class ProjectBasedTemplate < Redmine::Hook::ViewListener\r
-    def view_layouts_base_html_head(context)\r
-      # Adds a project stylesheet\r
-      stylesheet_link_tag(context[:project].identifier) if context[:project]\r
-    end\r
-  end\r
-  # Don't use this hook now\r
-  Redmine::Hook.clear_listeners\r
-  \r
-  def test_hook_response\r
-    Redmine::Hook.add_listener(ProjectBasedTemplate)\r
-    get :show, :id => 1\r
-    assert_tag :tag => 'link', :attributes => {:href => '/stylesheets/ecookbook.css'},\r
-                               :parent => {:tag => 'head'}\r
-    \r
-    Redmine::Hook.clear_listeners\r
-  end\r
-end\r
+# Redmine - project management software
+# Copyright (C) 2006-2008  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require File.dirname(__FILE__) + '/../test_helper'
+require 'projects_controller'
+
+# Re-raise errors caught by the controller.
+class ProjectsController; def rescue_action(e) raise e end; end
+
+class ProjectsControllerTest < ActionController::TestCase
+  fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details,
+           :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages,
+           :attachments
+
+  def setup
+    @controller = ProjectsController.new
+    @request    = ActionController::TestRequest.new
+    @response   = ActionController::TestResponse.new
+    @request.session[:user_id] = nil
+    Setting.default_language = 'en'
+  end
+  
+  def test_index_routing
+    assert_routing(
+      {:method => :get, :path => '/projects'},
+      :controller => 'projects', :action => 'index'
+    )
+  end
+  
+  def test_index
+    get :index
+    assert_response :success
+    assert_template 'index'
+    assert_not_nil assigns(:projects)
+    
+    assert_tag :ul, :child => {:tag => 'li',
+                               :descendant => {:tag => 'a', :content => 'eCookbook'},
+                               :child => { :tag => 'ul',
+                                           :descendant => { :tag => 'a',
+                                                            :content => 'Child of private child'
+                                                           }
+                                          }
+                               }
+                               
+    assert_no_tag :a, :content => /Private child of eCookbook/
+  end
+  
+  def test_index_atom_routing
+    assert_routing(
+      {:method => :get, :path => '/projects.atom'},
+      :controller => 'projects', :action => 'index', :format => 'atom'
+    )
+  end
+  
+  def test_index_atom
+    get :index, :format => 'atom'
+    assert_response :success
+    assert_template 'common/feed.atom.rxml'
+    assert_select 'feed>title', :text => 'Redmine: Latest projects'
+    assert_select 'feed>entry', :count => Project.count(:conditions => Project.visible_by(User.current))
+  end
+  
+  def test_add_routing
+    assert_routing(
+      {:method => :get, :path => '/projects/new'},
+      :controller => 'projects', :action => 'add'
+    )
+    assert_recognizes(
+      {:controller => 'projects', :action => 'add'},
+      {:method => :post, :path => '/projects/new'}
+    )
+    assert_recognizes(
+      {:controller => 'projects', :action => 'add'},
+      {:method => :post, :path => '/projects'}
+    )
+  end
+  
+  def test_get_add
+    @request.session[:user_id] = 1
+    get :add
+    assert_response :success
+    assert_template 'add'
+  end
+  
+  def test_get_add_by_non_admin
+    @request.session[:user_id] = 2
+    get :add
+    assert_response :success
+    assert_template 'add'
+  end
+  
+  def test_post_add
+    @request.session[:user_id] = 1
+    post :add, :project => { :name => "blog", 
+                             :description => "weblog",
+                             :identifier => "blog",
+                             :is_public => 1,
+                             :custom_field_values => { '3' => 'Beta' }
+                            }
+    assert_redirected_to '/projects/blog/settings'
+    
+    project = Project.find_by_name('blog')
+    assert_kind_of Project, project
+    assert_equal 'weblog', project.description 
+    assert_equal true, project.is_public?
+  end
+  
+  def test_post_add_by_non_admin
+    @request.session[:user_id] = 2
+    post :add, :project => { :name => "blog", 
+                             :description => "weblog",
+                             :identifier => "blog",
+                             :is_public => 1,
+                             :custom_field_values => { '3' => 'Beta' }
+                            }
+    assert_redirected_to '/projects/blog/settings'
+    
+    project = Project.find_by_name('blog')
+    assert_kind_of Project, project
+    assert_equal 'weblog', project.description 
+    assert_equal true, project.is_public?
+    
+    # User should be added as a project member
+    assert User.find(2).member_of?(project)
+    assert_equal 1, project.members.size
+  end
+  
+  def test_show_routing
+    assert_routing(
+      {:method => :get, :path => '/projects/test'},
+      :controller => 'projects', :action => 'show', :id => 'test'
+    )
+  end
+  
+  def test_show_by_id
+    get :show, :id => 1
+    assert_response :success
+    assert_template 'show'
+    assert_not_nil assigns(:project)
+  end
+
+  def test_show_by_identifier
+    get :show, :id => 'ecookbook'
+    assert_response :success
+    assert_template 'show'
+    assert_not_nil assigns(:project)
+    assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
+  end
+  
+  def test_show_should_not_fail_when_custom_values_are_nil
+    project = Project.find_by_identifier('ecookbook')
+    project.custom_values.first.update_attribute(:value, nil)
+    get :show, :id => 'ecookbook'
+    assert_response :success
+    assert_template 'show'
+    assert_not_nil assigns(:project)
+    assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
+  end
+  
+  def test_private_subprojects_hidden
+    get :show, :id => 'ecookbook'
+    assert_response :success
+    assert_template 'show'
+    assert_no_tag :tag => 'a', :content => /Private child/
+  end
+
+  def test_private_subprojects_visible
+    @request.session[:user_id] = 2 # manager who is a member of the private subproject
+    get :show, :id => 'ecookbook'
+    assert_response :success
+    assert_template 'show'
+    assert_tag :tag => 'a', :content => /Private child/
+  end
+  
+  def test_settings_routing
+    assert_routing(
+      {:method => :get, :path => '/projects/4223/settings'},
+      :controller => 'projects', :action => 'settings', :id => '4223'
+    )
+    assert_routing(
+      {:method => :get, :path => '/projects/4223/settings/members'},
+      :controller => 'projects', :action => 'settings', :id => '4223', :tab => 'members'
+    )
+  end
+  
+  def test_settings
+    @request.session[:user_id] = 2 # manager
+    get :settings, :id => 1
+    assert_response :success
+    assert_template 'settings'
+  end
+  
+  def test_edit
+    @request.session[:user_id] = 2 # manager
+    post :edit, :id => 1, :project => {:name => 'Test changed name',
+                                       :issue_custom_field_ids => ['']}
+    assert_redirected_to 'projects/ecookbook/settings'
+    project = Project.find(1)
+    assert_equal 'Test changed name', project.name
+  end
+  
+  def test_add_version_routing
+    assert_routing(
+      {:method => :get, :path => 'projects/64/versions/new'},
+      :controller => 'projects', :action => 'add_version', :id => '64'
+    )
+    assert_routing(
+    #TODO: use PUT
+      {:method => :post, :path => 'projects/64/versions/new'},
+      :controller => 'projects', :action => 'add_version', :id => '64'
+    )
+  end
+  
+  def test_add_issue_category_routing
+    assert_routing(
+      {:method => :get, :path => 'projects/test/categories/new'},
+      :controller => 'projects', :action => 'add_issue_category', :id => 'test'
+    )
+    assert_routing(
+    #TODO: use PUT and update form
+      {:method => :post, :path => 'projects/64/categories/new'},
+      :controller => 'projects', :action => 'add_issue_category', :id => '64'
+    )
+  end
+  
+  def test_destroy_routing
+    assert_routing(
+      {:method => :get, :path => '/projects/567/destroy'},
+      :controller => 'projects', :action => 'destroy', :id => '567'
+    )
+    assert_routing(
+    #TODO: use DELETE and update form
+      {:method => :post, :path => 'projects/64/destroy'},
+      :controller => 'projects', :action => 'destroy', :id => '64'
+    )
+  end
+  
+  def test_get_destroy
+    @request.session[:user_id] = 1 # admin
+    get :destroy, :id => 1
+    assert_response :success
+    assert_template 'destroy'
+    assert_not_nil Project.find_by_id(1)
+  end
+
+  def test_post_destroy
+    @request.session[:user_id] = 1 # admin
+    post :destroy, :id => 1, :confirm => 1
+    assert_redirected_to 'admin/projects'
+    assert_nil Project.find_by_id(1)
+  end
+  
+  def test_add_file
+    set_tmp_attachments_directory
+    @request.session[:user_id] = 2
+    Setting.notified_events = ['file_added']
+    ActionMailer::Base.deliveries.clear
+    
+    assert_difference 'Attachment.count' do
+      post :add_file, :id => 1, :version_id => '',
+           :attachments => {'1' => {'file' => test_uploaded_file('testfile.txt', 'text/plain')}}
+    end
+    assert_redirected_to 'projects/ecookbook/files'
+    a = Attachment.find(:first, :order => 'created_on DESC')
+    assert_equal 'testfile.txt', a.filename
+    assert_equal Project.find(1), a.container
+
+    mail = ActionMailer::Base.deliveries.last
+    assert_kind_of TMail::Mail, mail
+    assert_equal "[eCookbook] New file", mail.subject
+    assert mail.body.include?('testfile.txt')
+  end
+  
+  def test_add_file_routing
+    assert_routing(
+      {:method => :get, :path => '/projects/33/files/new'},
+      :controller => 'projects', :action => 'add_file', :id => '33'
+    )
+    assert_routing(
+      {:method => :post, :path => '/projects/33/files/new'},
+      :controller => 'projects', :action => 'add_file', :id => '33'
+    )
+  end
+  
+  def test_add_version_file
+    set_tmp_attachments_directory
+    @request.session[:user_id] = 2
+    Setting.notified_events = ['file_added']
+    
+    assert_difference 'Attachment.count' do
+      post :add_file, :id => 1, :version_id => '2',
+           :attachments => {'1' => {'file' => test_uploaded_file('testfile.txt', 'text/plain')}}
+    end
+    assert_redirected_to 'projects/ecookbook/files'
+    a = Attachment.find(:first, :order => 'created_on DESC')
+    assert_equal 'testfile.txt', a.filename
+    assert_equal Version.find(2), a.container
+  end
+  
+  def test_list_files
+    get :list_files, :id => 1
+    assert_response :success
+    assert_template 'list_files'
+    assert_not_nil assigns(:containers)
+    
+    # file attached to the project
+    assert_tag :a, :content => 'project_file.zip',
+                   :attributes => { :href => '/attachments/download/8/project_file.zip' }
+    
+    # file attached to a project's version
+    assert_tag :a, :content => 'version_file.zip',
+                   :attributes => { :href => '/attachments/download/9/version_file.zip' }
+  end
+
+  def test_list_files_routing
+    assert_routing(
+      {:method => :get, :path => '/projects/33/files'},
+      :controller => 'projects', :action => 'list_files', :id => '33'
+    )
+  end
+  
+  def test_changelog_routing
+    assert_routing(
+      {:method => :get, :path => '/projects/44/changelog'},
+      :controller => 'projects', :action => 'changelog', :id => '44'
+    )
+  end
+  
+  def test_changelog
+    get :changelog, :id => 1
+    assert_response :success
+    assert_template 'changelog'
+    assert_not_nil assigns(:versions)
+  end
+  
+  def test_roadmap_routing
+    assert_routing(
+      {:method => :get, :path => 'projects/33/roadmap'},
+      :controller => 'projects', :action => 'roadmap', :id => '33'
+    )
+  end
+  
+  def test_roadmap
+    get :roadmap, :id => 1
+    assert_response :success
+    assert_template 'roadmap'
+    assert_not_nil assigns(:versions)
+    # Version with no date set appears
+    assert assigns(:versions).include?(Version.find(3))
+    # Completed version doesn't appear
+    assert !assigns(:versions).include?(Version.find(1))
+  end
+  
+  def test_roadmap_with_completed_versions
+    get :roadmap, :id => 1, :completed => 1
+    assert_response :success
+    assert_template 'roadmap'
+    assert_not_nil assigns(:versions)
+    # Version with no date set appears
+    assert assigns(:versions).include?(Version.find(3))
+    # Completed version appears
+    assert assigns(:versions).include?(Version.find(1))
+  end
+  
+  def test_project_activity_routing
+    assert_routing(
+      {:method => :get, :path => '/projects/1/activity'},
+       :controller => 'projects', :action => 'activity', :id => '1'
+    )
+  end
+  
+  def test_project_activity_atom_routing
+    assert_routing(
+      {:method => :get, :path => '/projects/1/activity.atom'},
+       :controller => 'projects', :action => 'activity', :id => '1', :format => 'atom'
+    )    
+  end
+  
+  def test_project_activity
+    get :activity, :id => 1, :with_subprojects => 0
+    assert_response :success
+    assert_template 'activity'
+    assert_not_nil assigns(:events_by_day)
+    
+    assert_tag :tag => "h3", 
+               :content => /#{2.days.ago.to_date.day}/,
+               :sibling => { :tag => "dl",
+                 :child => { :tag => "dt",
+                   :attributes => { :class => /issue-edit/ },
+                   :child => { :tag => "a",
+                     :content => /(#{IssueStatus.find(2).name})/,
+                   }
+                 }
+               }
+  end
+  
+  def test_previous_project_activity
+    get :activity, :id => 1, :from => 3.days.ago.to_date
+    assert_response :success
+    assert_template 'activity'
+    assert_not_nil assigns(:events_by_day)
+               
+    assert_tag :tag => "h3", 
+               :content => /#{3.day.ago.to_date.day}/,
+               :sibling => { :tag => "dl",
+                 :child => { :tag => "dt",
+                   :attributes => { :class => /issue/ },
+                   :child => { :tag => "a",
+                     :content => /#{Issue.find(1).subject}/,
+                   }
+                 }
+               }
+  end
+  
+  def test_global_activity_routing
+    assert_routing({:method => :get, :path => '/activity'}, :controller => 'projects', :action => 'activity', :id => nil)
+  end
+  
+  def test_global_activity
+    get :activity
+    assert_response :success
+    assert_template 'activity'
+    assert_not_nil assigns(:events_by_day)
+    
+    assert_tag :tag => "h3", 
+               :content => /#{5.day.ago.to_date.day}/,
+               :sibling => { :tag => "dl",
+                 :child => { :tag => "dt",
+                   :attributes => { :class => /issue/ },
+                   :child => { :tag => "a",
+                     :content => /#{Issue.find(5).subject}/,
+                   }
+                 }
+               }
+  end
+  
+  def test_user_activity
+    get :activity, :user_id => 2
+    assert_response :success
+    assert_template 'activity'
+    assert_not_nil assigns(:events_by_day)
+    
+    assert_tag :tag => "h3", 
+               :content => /#{3.day.ago.to_date.day}/,
+               :sibling => { :tag => "dl",
+                 :child => { :tag => "dt",
+                   :attributes => { :class => /issue/ },
+                   :child => { :tag => "a",
+                     :content => /#{Issue.find(1).subject}/,
+                   }
+                 }
+               }
+  end
+  
+  def test_global_activity_atom_routing
+    assert_routing({:method => :get, :path => '/activity.atom'}, :controller => 'projects', :action => 'activity', :id => nil, :format => 'atom')
+  end
+  
+  def test_activity_atom_feed
+    get :activity, :format => 'atom'
+    assert_response :success
+    assert_template 'common/feed.atom.rxml'
+  end
+  
+  def test_archive_routing
+    assert_routing(
+    #TODO: use PUT to project path and modify form
+      {:method => :post, :path => 'projects/64/archive'},
+      :controller => 'projects', :action => 'archive', :id => '64'
+    )
+  end
+  
+  def test_archive
+    @request.session[:user_id] = 1 # admin
+    post :archive, :id => 1
+    assert_redirected_to 'admin/projects'
+    assert !Project.find(1).active?
+  end
+  
+  def test_unarchive_routing
+    assert_routing(
+    #TODO: use PUT to project path and modify form
+      {:method => :post, :path => '/projects/567/unarchive'},
+      :controller => 'projects', :action => 'unarchive', :id => '567'
+    )
+  end
+  
+  def test_unarchive
+    @request.session[:user_id] = 1 # admin
+    Project.find(1).archive
+    post :unarchive, :id => 1
+    assert_redirected_to 'admin/projects'
+    assert Project.find(1).active?
+  end
+  
+  def test_project_breadcrumbs_should_be_limited_to_3_ancestors
+    CustomField.delete_all
+    parent = nil
+    6.times do |i|
+      p = Project.create!(:name => "Breadcrumbs #{i}", :identifier => "breadcrumbs-#{i}")
+      p.set_parent!(parent)
+      get :show, :id => p
+      assert_tag :h1, :parent => { :attributes => {:id => 'header'}},
+                      :children => { :count => [i, 3].min,
+                                     :only => { :tag => 'a' } }
+                                     
+      parent = p
+    end
+  end
+
+  def test_copy_with_project
+    @request.session[:user_id] = 1 # admin
+    get :copy, :id => 1
+    assert_response :success
+    assert_template 'copy'
+    assert assigns(:project)
+    assert_equal Project.find(1).description, assigns(:project).description
+    assert_nil assigns(:project).id
+  end
+
+  def test_copy_without_project
+    @request.session[:user_id] = 1 # admin
+    get :copy
+    assert_response :redirect
+    assert_redirected_to :controller => 'admin', :action => 'projects'
+  end
+
+  def test_jump_should_redirect_to_active_tab
+    get :show, :id => 1, :jump => 'issues'
+    assert_redirected_to 'projects/ecookbook/issues'
+  end
+  
+  def test_jump_should_not_redirect_to_inactive_tab
+    get :show, :id => 3, :jump => 'documents'
+    assert_response :success
+    assert_template 'show'
+  end
+  
+  def test_jump_should_not_redirect_to_unknown_tab
+    get :show, :id => 3, :jump => 'foobar'
+    assert_response :success
+    assert_template 'show'
+  end
+  
+  # A hook that is manually registered later
+  class ProjectBasedTemplate < Redmine::Hook::ViewListener
+    def view_layouts_base_html_head(context)
+      # Adds a project stylesheet
+      stylesheet_link_tag(context[:project].identifier) if context[:project]
+    end
+  end
+  # Don't use this hook now
+  Redmine::Hook.clear_listeners
+  
+  def test_hook_response
+    Redmine::Hook.add_listener(ProjectBasedTemplate)
+    get :show, :id => 1
+    assert_tag :tag => 'link', :attributes => {:href => '/stylesheets/ecookbook.css'},
+                               :parent => {:tag => 'head'}
+    
+    Redmine::Hook.clear_listeners
+  end
+end
index d2aca11..ee60803 100644 (file)
@@ -1,85 +1,85 @@
-# Redmine - project management software\r
-# Copyright (C) 2006-2009  Jean-Philippe Lang\r
-#\r
-# This program is free software; you can redistribute it and/or\r
-# modify it under the terms of the GNU General Public License\r
-# as published by the Free Software Foundation; either version 2\r
-# of the License, or (at your option) any later version.\r
-# \r
-# This program is distributed in the hope that it will be useful,\r
-# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-# GNU General Public License for more details.\r
-# \r
-# You should have received a copy of the GNU General Public License\r
-# along with this program; if not, write to the Free Software\r
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
-\r
-require File.dirname(__FILE__) + '/../../test_helper'\r
-\r
-class SortHelperTest < HelperTestCase\r
-  include SortHelper\r
-  \r
-  def setup\r
-    @session = nil\r
-    @sort_param = nil\r
-  end\r
-  \r
-  def test_default_sort_clause_with_array\r
-    sort_init 'attr1', 'desc'\r
-    sort_update(['attr1', 'attr2'])\r
-\r
-    assert_equal 'attr1 DESC', sort_clause\r
-  end\r
-  \r
-  def test_default_sort_clause_with_hash\r
-    sort_init 'attr1', 'desc'\r
-    sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'})\r
-\r
-    assert_equal 'table1.attr1 DESC', sort_clause\r
-  end\r
-  \r
-  def test_default_sort_clause_with_multiple_columns\r
-    sort_init 'attr1', 'desc'\r
-    sort_update({'attr1' => ['table1.attr1', 'table1.attr2'], 'attr2' => 'table2.attr2'})\r
-\r
-    assert_equal 'table1.attr1 DESC, table1.attr2 DESC', sort_clause\r
-  end\r
-  \r
-  def test_params_sort\r
-    @sort_param = 'attr1,attr2:desc'\r
-    \r
-    sort_init 'attr1', 'desc'\r
-    sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'})\r
-\r
-    assert_equal 'table1.attr1, table2.attr2 DESC', sort_clause\r
-    assert_equal 'attr1,attr2:desc', @session['foo_bar_sort']\r
-  end\r
-  \r
-  def test_invalid_params_sort\r
-    @sort_param = 'invalid_key'\r
-    \r
-    sort_init 'attr1', 'desc'\r
-    sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'})\r
-\r
-    assert_equal 'table1.attr1 DESC', sort_clause\r
-    assert_equal 'attr1:desc', @session['foo_bar_sort']\r
-  end\r
-  \r
-  def test_invalid_order_params_sort\r
-    @sort_param = 'attr1:foo:bar,attr2'\r
-    \r
-    sort_init 'attr1', 'desc'\r
-    sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'})\r
-\r
-    assert_equal 'table1.attr1, table2.attr2', sort_clause\r
-    assert_equal 'attr1,attr2', @session['foo_bar_sort']\r
-  end\r
-  \r
-  private\r
-  \r
-  def controller_name; 'foo'; end\r
-  def action_name; 'bar'; end\r
-  def params; {:sort => @sort_param}; end\r
-  def session; @session ||= {}; end\r
-end\r
+# Redmine - project management software
+# Copyright (C) 2006-2009  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require File.dirname(__FILE__) + '/../../test_helper'
+
+class SortHelperTest < HelperTestCase
+  include SortHelper
+  
+  def setup
+    @session = nil
+    @sort_param = nil
+  end
+  
+  def test_default_sort_clause_with_array
+    sort_init 'attr1', 'desc'
+    sort_update(['attr1', 'attr2'])
+
+    assert_equal 'attr1 DESC', sort_clause
+  end
+  
+  def test_default_sort_clause_with_hash
+    sort_init 'attr1', 'desc'
+    sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'})
+
+    assert_equal 'table1.attr1 DESC', sort_clause
+  end
+  
+  def test_default_sort_clause_with_multiple_columns
+    sort_init 'attr1', 'desc'
+    sort_update({'attr1' => ['table1.attr1', 'table1.attr2'], 'attr2' => 'table2.attr2'})
+
+    assert_equal 'table1.attr1 DESC, table1.attr2 DESC', sort_clause
+  end
+  
+  def test_params_sort
+    @sort_param = 'attr1,attr2:desc'
+    
+    sort_init 'attr1', 'desc'
+    sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'})
+
+    assert_equal 'table1.attr1, table2.attr2 DESC', sort_clause
+    assert_equal 'attr1,attr2:desc', @session['foo_bar_sort']
+  end
+  
+  def test_invalid_params_sort
+    @sort_param = 'invalid_key'
+    
+    sort_init 'attr1', 'desc'
+    sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'})
+
+    assert_equal 'table1.attr1 DESC', sort_clause
+    assert_equal 'attr1:desc', @session['foo_bar_sort']
+  end
+  
+  def test_invalid_order_params_sort
+    @sort_param = 'attr1:foo:bar,attr2'
+    
+    sort_init 'attr1', 'desc'
+    sort_update({'attr1' => 'table1.attr1', 'attr2' => 'table2.attr2'})
+
+    assert_equal 'table1.attr1, table2.attr2', sort_clause
+    assert_equal 'attr1,attr2', @session['foo_bar_sort']
+  end
+  
+  private
+  
+  def controller_name; 'foo'; end
+  def action_name; 'bar'; end
+  def params; {:sort => @sort_param}; end
+  def session; @session ||= {}; end
+end
index 87e0086..41ac488 100644 (file)
@@ -24,21 +24,21 @@ class MemberTest < ActiveSupport::TestCase
     @jsmith = Member.find(1)
   end
   
-  def test_create\r
-    member = Member.new(:project_id => 1, :user_id => 4, :role_ids => [1, 2])\r
+  def test_create
+    member = Member.new(:project_id => 1, :user_id => 4, :role_ids => [1, 2])
     assert member.save
     member.reload
     
     assert_equal 2, member.roles.size
-    assert_equal Role.find(1), member.roles.sort.first\r
-  end\r
+    assert_equal Role.find(1), member.roles.sort.first
+  end
 
   def test_update    
-    assert_equal "eCookbook", @jsmith.project.name\r
-    assert_equal "Manager", @jsmith.roles.first.name\r
-    assert_equal "jsmith", @jsmith.user.login\r
-    \r
-    @jsmith.mail_notification = !@jsmith.mail_notification\r
+    assert_equal "eCookbook", @jsmith.project.name
+    assert_equal "Manager", @jsmith.roles.first.name
+    assert_equal "jsmith", @jsmith.user.login
+    
+    @jsmith.mail_notification = !@jsmith.mail_notification
     assert @jsmith.save
   end
 
@@ -48,24 +48,24 @@ class MemberTest < ActiveSupport::TestCase
     assert @jsmith.save
     assert_equal 2, @jsmith.reload.roles.size
   end
-  \r
-  def test_validate\r
-    member = Member.new(:project_id => 1, :user_id => 2, :role_ids => [2])\r
-    # same use can't have more than one membership for a project\r
+  
+  def test_validate
+    member = Member.new(:project_id => 1, :user_id => 2, :role_ids => [2])
+    # same use can't have more than one membership for a project
     assert !member.save
     
     member = Member.new(:project_id => 1, :user_id => 2, :role_ids => [])
     # must have one role at least
-    assert !member.save\r
-  end\r
-  \r
+    assert !member.save
+  end
+  
   def test_destroy
     assert_difference 'Member.count', -1 do
-      assert_difference 'MemberRole.count', -1 do\r
+      assert_difference 'MemberRole.count', -1 do
         @jsmith.destroy
       end
     end
-    \r
-    assert_raise(ActiveRecord::RecordNotFound) { Member.find(@jsmith.id) }\r
+    
+    assert_raise(ActiveRecord::RecordNotFound) { Member.find(@jsmith.id) }
   end
 end
index c40475e..a1eac71 100644 (file)
-# redMine - project management software\r
-# Copyright (C) 2006-2007  Jean-Philippe Lang\r
-#\r
-# This program is free software; you can redistribute it and/or\r
-# modify it under the terms of the GNU General Public License\r
-# as published by the Free Software Foundation; either version 2\r
-# of the License, or (at your option) any later version.\r
-# \r
-# This program is distributed in the hope that it will be useful,\r
-# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-# GNU General Public License for more details.\r
-# \r
-# You should have received a copy of the GNU General Public License\r
-# along with this program; if not, write to the Free Software\r
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
-\r
-require File.dirname(__FILE__) + '/../test_helper'\r
-\r
-class ProjectTest < ActiveSupport::TestCase\r
-  fixtures :projects, :enabled_modules, \r
-           :issues, :issue_statuses, :journals, :journal_details,\r
-           :users, :members, :member_roles, :roles, :projects_trackers, :trackers, :boards,\r
-           :queries\r
-\r
-  def setup\r
-    @ecookbook = Project.find(1)\r
-    @ecookbook_sub1 = Project.find(3)\r
-  end\r
-  \r
-  def test_truth\r
-    assert_kind_of Project, @ecookbook\r
-    assert_equal "eCookbook", @ecookbook.name\r
-  end\r
-  \r
-  def test_update\r
-    assert_equal "eCookbook", @ecookbook.name\r
-    @ecookbook.name = "eCook"\r
-    assert @ecookbook.save, @ecookbook.errors.full_messages.join("; ")\r
-    @ecookbook.reload\r
-    assert_equal "eCook", @ecookbook.name\r
-  end\r
-  \r
-  def test_validate\r
-    @ecookbook.name = ""\r
-    assert !@ecookbook.save\r
-    assert_equal 1, @ecookbook.errors.count\r
-    assert_equal I18n.translate('activerecord.errors.messages.blank'), @ecookbook.errors.on(:name)\r
-  end\r
-  \r
-  def test_validate_identifier\r
-    to_test = {"abc" => true,\r
-               "ab12" => true,\r
-               "ab-12" => true,\r
-               "12" => false,\r
-               "new" => false}\r
-               \r
-    to_test.each do |identifier, valid|\r
-      p = Project.new\r
-      p.identifier = identifier\r
-      p.valid?\r
-      assert_equal valid, p.errors.on('identifier').nil?\r
-    end\r
-  end\r
-  \r
-  def test_members_should_be_active_users\r
-    Project.all.each do |project|\r
-      assert_nil project.members.detect {|m| !(m.user.is_a?(User) && m.user.active?) }\r
-    end\r
-  end\r
-  \r
-  def test_users_should_be_active_users\r
-    Project.all.each do |project|\r
-      assert_nil project.users.detect {|u| !(u.is_a?(User) && u.active?) }\r
-    end\r
-  end\r
-  \r
-  def test_archive\r
-    user = @ecookbook.members.first.user\r
-    @ecookbook.archive\r
-    @ecookbook.reload\r
-    \r
-    assert !@ecookbook.active?\r
-    assert !user.projects.include?(@ecookbook)\r
-    # Subproject are also archived\r
-    assert !@ecookbook.children.empty?\r
-    assert @ecookbook.descendants.active.empty?\r
-  end\r
-  \r
-  def test_unarchive\r
-    user = @ecookbook.members.first.user\r
-    @ecookbook.archive\r
-    # A subproject of an archived project can not be unarchived\r
-    assert !@ecookbook_sub1.unarchive\r
-    \r
-    # Unarchive project\r
-    assert @ecookbook.unarchive\r
-    @ecookbook.reload\r
-    assert @ecookbook.active?\r
-    assert user.projects.include?(@ecookbook)\r
-    # Subproject can now be unarchived\r
-    @ecookbook_sub1.reload\r
-    assert @ecookbook_sub1.unarchive\r
-  end\r
-  \r
-  def test_destroy\r
-    # 2 active members\r
-    assert_equal 2, @ecookbook.members.size\r
-    # and 1 is locked\r
-    assert_equal 3, Member.find(:all, :conditions => ['project_id = ?', @ecookbook.id]).size\r
-    # some boards\r
-    assert @ecookbook.boards.any?\r
-    \r
-    @ecookbook.destroy\r
-    # make sure that the project non longer exists\r
-    assert_raise(ActiveRecord::RecordNotFound) { Project.find(@ecookbook.id) }\r
-    # make sure related data was removed\r
-    assert Member.find(:all, :conditions => ['project_id = ?', @ecookbook.id]).empty?\r
-    assert Board.find(:all, :conditions => ['project_id = ?', @ecookbook.id]).empty?\r
-  end\r
-  \r
-  def test_move_an_orphan_project_to_a_root_project\r
-    sub = Project.find(2)\r
-    sub.set_parent! @ecookbook\r
-    assert_equal @ecookbook.id, sub.parent.id\r
-    @ecookbook.reload\r
-    assert_equal 4, @ecookbook.children.size\r
-  end\r
-  \r
-  def test_move_an_orphan_project_to_a_subproject\r
-    sub = Project.find(2)\r
-    assert sub.set_parent!(@ecookbook_sub1)\r
-  end\r
-  \r
-  def test_move_a_root_project_to_a_project\r
-    sub = @ecookbook\r
-    assert sub.set_parent!(Project.find(2))\r
-  end\r
-  \r
-  def test_should_not_move_a_project_to_its_children\r
-    sub = @ecookbook\r
-    assert !(sub.set_parent!(Project.find(3)))\r
-  end\r
-  \r
-  def test_set_parent_should_add_roots_in_alphabetical_order\r
-    ProjectCustomField.delete_all\r
-    Project.delete_all\r
-    Project.create!(:name => 'Project C', :identifier => 'project-c').set_parent!(nil)\r
-    Project.create!(:name => 'Project B', :identifier => 'project-b').set_parent!(nil)\r
-    Project.create!(:name => 'Project D', :identifier => 'project-d').set_parent!(nil)\r
-    Project.create!(:name => 'Project A', :identifier => 'project-a').set_parent!(nil)\r
-    \r
-    assert_equal 4, Project.count\r
-    assert_equal Project.all.sort_by(&:name), Project.all.sort_by(&:lft)\r
-  end\r
-  \r
-  def test_set_parent_should_add_children_in_alphabetical_order\r
-    ProjectCustomField.delete_all\r
-    parent = Project.create!(:name => 'Parent', :identifier => 'parent')\r
-    Project.create!(:name => 'Project C', :identifier => 'project-c').set_parent!(parent)\r
-    Project.create!(:name => 'Project B', :identifier => 'project-b').set_parent!(parent)\r
-    Project.create!(:name => 'Project D', :identifier => 'project-d').set_parent!(parent)\r
-    Project.create!(:name => 'Project A', :identifier => 'project-a').set_parent!(parent)\r
-    \r
-    parent.reload\r
-    assert_equal 4, parent.children.size\r
-    assert_equal parent.children.sort_by(&:name), parent.children\r
-  end\r
-  \r
-  def test_rebuild_should_sort_children_alphabetically\r
-    ProjectCustomField.delete_all\r
-    parent = Project.create!(:name => 'Parent', :identifier => 'parent')\r
-    Project.create!(:name => 'Project C', :identifier => 'project-c').move_to_child_of(parent)\r
-    Project.create!(:name => 'Project B', :identifier => 'project-b').move_to_child_of(parent)\r
-    Project.create!(:name => 'Project D', :identifier => 'project-d').move_to_child_of(parent)\r
-    Project.create!(:name => 'Project A', :identifier => 'project-a').move_to_child_of(parent)\r
-    \r
-    Project.update_all("lft = NULL, rgt = NULL")\r
-    Project.rebuild!\r
-    \r
-    parent.reload\r
-    assert_equal 4, parent.children.size\r
-    assert_equal parent.children.sort_by(&:name), parent.children\r
-  end\r
-  \r
-  def test_parent\r
-    p = Project.find(6).parent\r
-    assert p.is_a?(Project)\r
-    assert_equal 5, p.id\r
-  end\r
-  \r
-  def test_ancestors\r
-    a = Project.find(6).ancestors\r
-    assert a.first.is_a?(Project)\r
-    assert_equal [1, 5], a.collect(&:id)\r
-  end\r
-  \r
-  def test_root\r
-    r = Project.find(6).root\r
-    assert r.is_a?(Project)\r
-    assert_equal 1, r.id\r
-  end\r
-  \r
-  def test_children\r
-    c = Project.find(1).children\r
-    assert c.first.is_a?(Project)\r
-    assert_equal [5, 3, 4], c.collect(&:id)\r
-  end\r
-  \r
-  def test_descendants\r
-    d = Project.find(1).descendants\r
-    assert d.first.is_a?(Project)\r
-    assert_equal [5, 6, 3, 4], d.collect(&:id)\r
-  end\r
-  \r
-  def test_users_by_role\r
-    users_by_role = Project.find(1).users_by_role\r
-    assert_kind_of Hash, users_by_role\r
-    role = Role.find(1)\r
-    assert_kind_of Array, users_by_role[role]\r
-    assert users_by_role[role].include?(User.find(2))\r
-  end\r
-  \r
-  def test_rolled_up_trackers\r
-    parent = Project.find(1)\r
-    parent.trackers = Tracker.find([1,2])\r
-    child = parent.children.find(3)\r
-  \r
-    assert_equal [1, 2], parent.tracker_ids\r
-    assert_equal [2, 3], child.trackers.collect(&:id)\r
-    \r
-    assert_kind_of Tracker, parent.rolled_up_trackers.first\r
-    assert_equal Tracker.find(1), parent.rolled_up_trackers.first\r
-    \r
-    assert_equal [1, 2, 3], parent.rolled_up_trackers.collect(&:id)\r
-    assert_equal [2, 3], child.rolled_up_trackers.collect(&:id)\r
-  end\r
-  \r
-  def test_rolled_up_trackers_should_ignore_archived_subprojects\r
-    parent = Project.find(1)\r
-    parent.trackers = Tracker.find([1,2])\r
-    child = parent.children.find(3)\r
-    child.trackers = Tracker.find([1,3])\r
-    parent.children.each(&:archive)\r
-    \r
-    assert_equal [1,2], parent.rolled_up_trackers.collect(&:id)\r
-  end\r
-  \r
-  def test_next_identifier\r
-    ProjectCustomField.delete_all\r
-    Project.create!(:name => 'last', :identifier => 'p2008040')\r
-    assert_equal 'p2008041', Project.next_identifier\r
-  end\r
-  \r
-  def test_next_identifier_first_project\r
-    Project.delete_all\r
-    assert_nil Project.next_identifier\r
-  end\r
-  \r
+# redMine - project management software
+# Copyright (C) 2006-2007  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
-  def test_enabled_module_names_should_not_recreate_enabled_modules\r
-    project = Project.find(1)\r
-    # Remove one module\r
-    modules = project.enabled_modules.slice(0..-2)\r
-    assert modules.any?\r
-    assert_difference 'EnabledModule.count', -1 do\r
-      project.enabled_module_names = modules.collect(&:name)\r
-    end\r
-    project.reload\r
-    # Ids should be preserved\r
-    assert_equal project.enabled_module_ids.sort, modules.collect(&:id).sort\r
-  end\r
+require File.dirname(__FILE__) + '/../test_helper'
 
-  def test_copy_from_existing_project\r
-    source_project = Project.find(1)\r
-    copied_project = Project.copy_from(1)\r
-\r
-    assert copied_project\r
-    # Cleared attributes\r
-    assert copied_project.id.blank?\r
-    assert copied_project.name.blank?\r
-    assert copied_project.identifier.blank?\r
-    \r
-    # Duplicated attributes\r
-    assert_equal source_project.description, copied_project.description\r
-    assert_equal source_project.enabled_modules, copied_project.enabled_modules\r
-    assert_equal source_project.trackers, copied_project.trackers\r
-\r
-    # Default attributes\r
-    assert_equal 1, copied_project.status\r
-  end\r
-  \r
-  # Context: Project#copy\r
-  def test_copy_should_copy_issues\r
-    # Setup\r
-    ProjectCustomField.destroy_all # Custom values are a mess to isolate in tests\r
-    source_project = Project.find(2)\r
-    Project.destroy_all :identifier => "copy-test"\r
-    project = Project.new(:name => 'Copy Test', :identifier => 'copy-test')\r
-    project.trackers = source_project.trackers\r
-    assert project.valid?\r
-    \r
-    assert project.issues.empty?\r
-    assert project.copy(source_project)\r
-\r
-    # Tests\r
-    assert_equal source_project.issues.size, project.issues.size\r
-    project.issues.each do |issue|\r
-      assert issue.valid?\r
-      assert ! issue.assigned_to.blank?\r
-      assert_equal project, issue.project\r
-    end\r
-  end\r
-  \r
-  def test_copy_should_copy_members\r
-    # Setup\r
-    ProjectCustomField.destroy_all # Custom values are a mess to isolate in tests\r
-    source_project = Project.find(2)\r
-    project = Project.new(:name => 'Copy Test', :identifier => 'copy-test')\r
-    project.trackers = source_project.trackers\r
-    project.enabled_modules = source_project.enabled_modules\r
-    assert project.valid?\r
-\r
-    assert project.members.empty?\r
-    assert project.copy(source_project)\r
-\r
-    # Tests\r
-    assert_equal source_project.members.size, project.members.size\r
-    project.members.each do |member|\r
-      assert member\r
-      assert_equal project, member.project\r
-    end\r
-  end\r
-\r
-  def test_copy_should_copy_project_level_queries\r
-    # Setup\r
-    ProjectCustomField.destroy_all # Custom values are a mess to isolate in tests\r
-    source_project = Project.find(2)\r
-    project = Project.new(:name => 'Copy Test', :identifier => 'copy-test')\r
-    project.trackers = source_project.trackers\r
-    project.enabled_modules = source_project.enabled_modules\r
-    assert project.valid?\r
-\r
-    assert project.queries.empty?\r
-    assert project.copy(source_project)\r
-\r
-    # Tests\r
-    assert_equal source_project.queries.size, project.queries.size\r
-    project.queries.each do |query|\r
-      assert query\r
-      assert_equal project, query.project\r
-    end\r
-  end\r
-\r
-end\r
+class ProjectTest < ActiveSupport::TestCase
+  fixtures :projects, :enabled_modules, 
+           :issues, :issue_statuses, :journals, :journal_details,
+           :users, :members, :member_roles, :roles, :projects_trackers, :trackers, :boards,
+           :queries
+
+  def setup
+    @ecookbook = Project.find(1)
+    @ecookbook_sub1 = Project.find(3)
+  end
+  
+  def test_truth
+    assert_kind_of Project, @ecookbook
+    assert_equal "eCookbook", @ecookbook.name
+  end
+  
+  def test_update
+    assert_equal "eCookbook", @ecookbook.name
+    @ecookbook.name = "eCook"
+    assert @ecookbook.save, @ecookbook.errors.full_messages.join("; ")
+    @ecookbook.reload
+    assert_equal "eCook", @ecookbook.name
+  end
+  
+  def test_validate
+    @ecookbook.name = ""
+    assert !@ecookbook.save
+    assert_equal 1, @ecookbook.errors.count
+    assert_equal I18n.translate('activerecord.errors.messages.blank'), @ecookbook.errors.on(:name)
+  end
+  
+  def test_validate_identifier
+    to_test = {"abc" => true,
+               "ab12" => true,
+               "ab-12" => true,
+               "12" => false,
+               "new" => false}
+               
+    to_test.each do |identifier, valid|
+      p = Project.new
+      p.identifier = identifier
+      p.valid?
+      assert_equal valid, p.errors.on('identifier').nil?
+    end
+  end
+  
+  def test_members_should_be_active_users
+    Project.all.each do |project|
+      assert_nil project.members.detect {|m| !(m.user.is_a?(User) && m.user.active?) }
+    end
+  end
+  
+  def test_users_should_be_active_users
+    Project.all.each do |project|
+      assert_nil project.users.detect {|u| !(u.is_a?(User) && u.active?) }
+    end
+  end
+  
+  def test_archive
+    user = @ecookbook.members.first.user
+    @ecookbook.archive
+    @ecookbook.reload
+    
+    assert !@ecookbook.active?
+    assert !user.projects.include?(@ecookbook)
+    # Subproject are also archived
+    assert !@ecookbook.children.empty?
+    assert @ecookbook.descendants.active.empty?
+  end
+  
+  def test_unarchive
+    user = @ecookbook.members.first.user
+    @ecookbook.archive
+    # A subproject of an archived project can not be unarchived
+    assert !@ecookbook_sub1.unarchive
+    
+    # Unarchive project
+    assert @ecookbook.unarchive
+    @ecookbook.reload
+    assert @ecookbook.active?
+    assert user.projects.include?(@ecookbook)
+    # Subproject can now be unarchived
+    @ecookbook_sub1.reload
+    assert @ecookbook_sub1.unarchive
+  end
+  
+  def test_destroy
+    # 2 active members
+    assert_equal 2, @ecookbook.members.size
+    # and 1 is locked
+    assert_equal 3, Member.find(:all, :conditions => ['project_id = ?', @ecookbook.id]).size
+    # some boards
+    assert @ecookbook.boards.any?
+    
+    @ecookbook.destroy
+    # make sure that the project non longer exists
+    assert_raise(ActiveRecord::RecordNotFound) { Project.find(@ecookbook.id) }
+    # make sure related data was removed
+    assert Member.find(:all, :conditions => ['project_id = ?', @ecookbook.id]).empty?
+    assert Board.find(:all, :conditions => ['project_id = ?', @ecookbook.id]).empty?
+  end
+  
+  def test_move_an_orphan_project_to_a_root_project
+    sub = Project.find(2)
+    sub.set_parent! @ecookbook
+    assert_equal @ecookbook.id, sub.parent.id
+    @ecookbook.reload
+    assert_equal 4, @ecookbook.children.size
+  end
+  
+  def test_move_an_orphan_project_to_a_subproject
+    sub = Project.find(2)
+    assert sub.set_parent!(@ecookbook_sub1)
+  end
+  
+  def test_move_a_root_project_to_a_project
+    sub = @ecookbook
+    assert sub.set_parent!(Project.find(2))
+  end
+  
+  def test_should_not_move_a_project_to_its_children
+    sub = @ecookbook
+    assert !(sub.set_parent!(Project.find(3)))
+  end
+  
+  def test_set_parent_should_add_roots_in_alphabetical_order
+    ProjectCustomField.delete_all
+    Project.delete_all
+    Project.create!(:name => 'Project C', :identifier => 'project-c').set_parent!(nil)
+    Project.create!(:name => 'Project B', :identifier => 'project-b').set_parent!(nil)
+    Project.create!(:name => 'Project D', :identifier => 'project-d').set_parent!(nil)
+    Project.create!(:name => 'Project A', :identifier => 'project-a').set_parent!(nil)
+    
+    assert_equal 4, Project.count
+    assert_equal Project.all.sort_by(&:name), Project.all.sort_by(&:lft)
+  end
+  
+  def test_set_parent_should_add_children_in_alphabetical_order
+    ProjectCustomField.delete_all
+    parent = Project.create!(:name => 'Parent', :identifier => 'parent')
+    Project.create!(:name => 'Project C', :identifier => 'project-c').set_parent!(parent)
+    Project.create!(:name => 'Project B', :identifier => 'project-b').set_parent!(parent)
+    Project.create!(:name => 'Project D', :identifier => 'project-d').set_parent!(parent)
+    Project.create!(:name => 'Project A', :identifier => 'project-a').set_parent!(parent)
+    
+    parent.reload
+    assert_equal 4, parent.children.size
+    assert_equal parent.children.sort_by(&:name), parent.children
+  end
+  
+  def test_rebuild_should_sort_children_alphabetically
+    ProjectCustomField.delete_all
+    parent = Project.create!(:name => 'Parent', :identifier => 'parent')
+    Project.create!(:name => 'Project C', :identifier => 'project-c').move_to_child_of(parent)
+    Project.create!(:name => 'Project B', :identifier => 'project-b').move_to_child_of(parent)
+    Project.create!(:name => 'Project D', :identifier => 'project-d').move_to_child_of(parent)
+    Project.create!(:name => 'Project A', :identifier => 'project-a').move_to_child_of(parent)
+    
+    Project.update_all("lft = NULL, rgt = NULL")
+    Project.rebuild!
+    
+    parent.reload
+    assert_equal 4, parent.children.size
+    assert_equal parent.children.sort_by(&:name), parent.children
+  end
+  
+  def test_parent
+    p = Project.find(6).parent
+    assert p.is_a?(Project)
+    assert_equal 5, p.id
+  end
+  
+  def test_ancestors
+    a = Project.find(6).ancestors
+    assert a.first.is_a?(Project)
+    assert_equal [1, 5], a.collect(&:id)
+  end
+  
+  def test_root
+    r = Project.find(6).root
+    assert r.is_a?(Project)
+    assert_equal 1, r.id
+  end
+  
+  def test_children
+    c = Project.find(1).children
+    assert c.first.is_a?(Project)
+    assert_equal [5, 3, 4], c.collect(&:id)
+  end
+  
+  def test_descendants
+    d = Project.find(1).descendants
+    assert d.first.is_a?(Project)
+    assert_equal [5, 6, 3, 4], d.collect(&:id)
+  end
+  
+  def test_users_by_role
+    users_by_role = Project.find(1).users_by_role
+    assert_kind_of Hash, users_by_role
+    role = Role.find(1)
+    assert_kind_of Array, users_by_role[role]
+    assert users_by_role[role].include?(User.find(2))
+  end
+  
+  def test_rolled_up_trackers
+    parent = Project.find(1)
+    parent.trackers = Tracker.find([1,2])
+    child = parent.children.find(3)
+  
+    assert_equal [1, 2], parent.tracker_ids
+    assert_equal [2, 3], child.trackers.collect(&:id)
+    
+    assert_kind_of Tracker, parent.rolled_up_trackers.first
+    assert_equal Tracker.find(1), parent.rolled_up_trackers.first
+    
+    assert_equal [1, 2, 3], parent.rolled_up_trackers.collect(&:id)
+    assert_equal [2, 3], child.rolled_up_trackers.collect(&:id)
+  end
+  
+  def test_rolled_up_trackers_should_ignore_archived_subprojects
+    parent = Project.find(1)
+    parent.trackers = Tracker.find([1,2])
+    child = parent.children.find(3)
+    child.trackers = Tracker.find([1,3])
+    parent.children.each(&:archive)
+    
+    assert_equal [1,2], parent.rolled_up_trackers.collect(&:id)
+  end
+  
+  def test_next_identifier
+    ProjectCustomField.delete_all
+    Project.create!(:name => 'last', :identifier => 'p2008040')
+    assert_equal 'p2008041', Project.next_identifier
+  end
+  
+  def test_next_identifier_first_project
+    Project.delete_all
+    assert_nil Project.next_identifier
+  end
+  
+
+  def test_enabled_module_names_should_not_recreate_enabled_modules
+    project = Project.find(1)
+    # Remove one module
+    modules = project.enabled_modules.slice(0..-2)
+    assert modules.any?
+    assert_difference 'EnabledModule.count', -1 do
+      project.enabled_module_names = modules.collect(&:name)
+    end
+    project.reload
+    # Ids should be preserved
+    assert_equal project.enabled_module_ids.sort, modules.collect(&:id).sort
+  end
+
+  def test_copy_from_existing_project
+    source_project = Project.find(1)
+    copied_project = Project.copy_from(1)
+
+    assert copied_project
+    # Cleared attributes
+    assert copied_project.id.blank?
+    assert copied_project.name.blank?
+    assert copied_project.identifier.blank?
+    
+    # Duplicated attributes
+    assert_equal source_project.description, copied_project.description
+    assert_equal source_project.enabled_modules, copied_project.enabled_modules
+    assert_equal source_project.trackers, copied_project.trackers
+
+    # Default attributes
+    assert_equal 1, copied_project.status
+  end
+  
+  # Context: Project#copy
+  def test_copy_should_copy_issues
+    # Setup
+    ProjectCustomField.destroy_all # Custom values are a mess to isolate in tests
+    source_project = Project.find(2)
+    Project.destroy_all :identifier => "copy-test"
+    project = Project.new(:name => 'Copy Test', :identifier => 'copy-test')
+    project.trackers = source_project.trackers
+    assert project.valid?
+    
+    assert project.issues.empty?
+    assert project.copy(source_project)
+
+    # Tests
+    assert_equal source_project.issues.size, project.issues.size
+    project.issues.each do |issue|
+      assert issue.valid?
+      assert ! issue.assigned_to.blank?
+      assert_equal project, issue.project
+    end
+  end
+  
+  def test_copy_should_copy_members
+    # Setup
+    ProjectCustomField.destroy_all # Custom values are a mess to isolate in tests
+    source_project = Project.find(2)
+    project = Project.new(:name => 'Copy Test', :identifier => 'copy-test')
+    project.trackers = source_project.trackers
+    project.enabled_modules = source_project.enabled_modules
+    assert project.valid?
+
+    assert project.members.empty?
+    assert project.copy(source_project)
+
+    # Tests
+    assert_equal source_project.members.size, project.members.size
+    project.members.each do |member|
+      assert member
+      assert_equal project, member.project
+    end
+  end
+
+  def test_copy_should_copy_project_level_queries
+    # Setup
+    ProjectCustomField.destroy_all # Custom values are a mess to isolate in tests
+    source_project = Project.find(2)
+    project = Project.new(:name => 'Copy Test', :identifier => 'copy-test')
+    project.trackers = source_project.trackers
+    project.enabled_modules = source_project.enabled_modules
+    assert project.valid?
+
+    assert project.queries.empty?
+    assert project.copy(source_project)
+
+    # Tests
+    assert_equal source_project.queries.size, project.queries.size
+    project.queries.each do |query|
+      assert query
+      assert_equal project, query.project
+    end
+  end
+
+end
index cc356ec..6512c06 100644 (file)
@@ -32,17 +32,17 @@ class RepositoryTest < ActiveSupport::TestCase
   def setup
     @repository = Project.find(1).repository
   end
-  \r
-  def test_create\r
+  
+  def test_create
     repository = Repository::Subversion.new(:project => Project.find(3))
     assert !repository.save
   
-    repository.url = "svn://localhost"\r
+    repository.url = "svn://localhost"
     assert repository.save
     repository.reload
     
     project = Project.find(3)
-    assert_equal repository, project.repository\r
+    assert_equal repository, project.repository
   end
   
   def test_destroy
index e685f53..1555c0c 100644 (file)
-# redMine - project management software\r
-# Copyright (C) 2006  Jean-Philippe Lang\r
-#\r
-# This program is free software; you can redistribute it and/or\r
-# modify it under the terms of the GNU General Public License\r
-# as published by the Free Software Foundation; either version 2\r
-# of the License, or (at your option) any later version.\r
-# \r
-# This program is distributed in the hope that it will be useful,\r
-# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-# GNU General Public License for more details.\r
-# \r
-# You should have received a copy of the GNU General Public License\r
-# along with this program; if not, write to the Free Software\r
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
-\r
-require File.dirname(__FILE__) + '/../test_helper'\r
-\r
-class UserTest < ActiveSupport::TestCase\r
-  fixtures :users, :members, :projects, :roles, :member_roles\r
-\r
-  def setup\r
-    @admin = User.find(1)\r
-    @jsmith = User.find(2)\r
-    @dlopper = User.find(3)\r
-  end\r
-  \r
-  def test_truth\r
-    assert_kind_of User, @jsmith\r
-  end\r
-\r
-  def test_create\r
-    user = User.new(:firstname => "new", :lastname => "user", :mail => "newuser@somenet.foo")\r
-    \r
-    user.login = "jsmith"\r
-    user.password, user.password_confirmation = "password", "password"\r
-    # login uniqueness\r
-    assert !user.save\r
-    assert_equal 1, user.errors.count\r
-  \r
-    user.login = "newuser"\r
-    user.password, user.password_confirmation = "passwd", "password"\r
-    # password confirmation\r
-    assert !user.save\r
-    assert_equal 1, user.errors.count\r
-\r
-    user.password, user.password_confirmation = "password", "password"\r
-    assert user.save\r
-  end\r
-  \r
-  def test_mail_uniqueness_should_not_be_case_sensitive\r
-    u = User.new(:firstname => "new", :lastname => "user", :mail => "newuser@somenet.foo")\r
-    u.login = 'newuser1'\r
-    u.password, u.password_confirmation = "password", "password"\r
-    assert u.save\r
-    \r
-    u = User.new(:firstname => "new", :lastname => "user", :mail => "newUser@Somenet.foo")\r
-    u.login = 'newuser2'\r
-    u.password, u.password_confirmation = "password", "password"\r
-    assert !u.save\r
-    assert_equal I18n.translate('activerecord.errors.messages.taken'), u.errors.on(:mail)\r
-  end\r
-\r
-  def test_update\r
-    assert_equal "admin", @admin.login\r
-    @admin.login = "john"\r
-    assert @admin.save, @admin.errors.full_messages.join("; ")\r
-    @admin.reload\r
-    assert_equal "john", @admin.login\r
-  end\r
-  \r
-  def test_destroy\r
-    User.find(2).destroy\r
-    assert_nil User.find_by_id(2)\r
-    assert Member.find_all_by_user_id(2).empty?\r
-  end\r
-  \r
-  def test_validate\r
-    @admin.login = ""\r
-    assert !@admin.save\r
-    assert_equal 1, @admin.errors.count\r
-  end\r
-  \r
-  def test_password\r
-    user = User.try_to_login("admin", "admin")\r
-    assert_kind_of User, user\r
-    assert_equal "admin", user.login\r
-    user.password = "hello"\r
-    assert user.save\r
-    \r
-    user = User.try_to_login("admin", "hello")\r
-    assert_kind_of User, user\r
-    assert_equal "admin", user.login\r
-    assert_equal User.hash_password("hello"), user.hashed_password    \r
-  end\r
-  \r
-  def test_name_format\r
-    assert_equal 'Smith, John', @jsmith.name(:lastname_coma_firstname)\r
-    Setting.user_format = :firstname_lastname\r
-    assert_equal 'John Smith', @jsmith.reload.name\r
-    Setting.user_format = :username\r
-    assert_equal 'jsmith', @jsmith.reload.name\r
-  end\r
-  \r
-  def test_lock\r
-    user = User.try_to_login("jsmith", "jsmith")\r
-    assert_equal @jsmith, user\r
-    \r
-    @jsmith.status = User::STATUS_LOCKED\r
-    assert @jsmith.save\r
-    \r
-    user = User.try_to_login("jsmith", "jsmith")\r
-    assert_equal nil, user  \r
-  end\r
-  \r
-  def test_create_anonymous\r
-    AnonymousUser.delete_all\r
-    anon = User.anonymous\r
-    assert !anon.new_record?\r
-    assert_kind_of AnonymousUser, anon\r
-  end\r
-  \r
-  def test_rss_key\r
-    assert_nil @jsmith.rss_token\r
-    key = @jsmith.rss_key\r
-    assert_equal 40, key.length\r
-    \r
-    @jsmith.reload\r
-    assert_equal key, @jsmith.rss_key\r
-  end\r
-  \r
-  def test_roles_for_project\r
-    # user with a role\r
-    roles = @jsmith.roles_for_project(Project.find(1))\r
-    assert_kind_of Role, roles.first\r
-    assert_equal "Manager", roles.first.name\r
-    \r
-    # user with no role\r
-    assert_nil @dlopper.roles_for_project(Project.find(2)).detect {|role| role.member?}\r
-  end\r
-  \r
-  def test_mail_notification_all\r
-    @jsmith.mail_notification = true\r
-    @jsmith.notified_project_ids = []\r
-    @jsmith.save\r
-    @jsmith.reload\r
-    assert @jsmith.projects.first.recipients.include?(@jsmith.mail)\r
-  end\r
-  \r
-  def test_mail_notification_selected\r
-    @jsmith.mail_notification = false\r
-    @jsmith.notified_project_ids = [1]\r
-    @jsmith.save\r
-    @jsmith.reload\r
-    assert Project.find(1).recipients.include?(@jsmith.mail)\r
-  end\r
-  \r
-  def test_mail_notification_none\r
-    @jsmith.mail_notification = false\r
-    @jsmith.notified_project_ids = []\r
-    @jsmith.save\r
-    @jsmith.reload\r
-    assert !@jsmith.projects.first.recipients.include?(@jsmith.mail)\r
-  end\r
-  \r
-  def test_comments_sorting_preference\r
-    assert !@jsmith.wants_comments_in_reverse_order?\r
-    @jsmith.pref.comments_sorting = 'asc'\r
-    assert !@jsmith.wants_comments_in_reverse_order?\r
-    @jsmith.pref.comments_sorting = 'desc'\r
-    assert @jsmith.wants_comments_in_reverse_order?\r
-  end\r
-  \r
-  def test_find_by_mail_should_be_case_insensitive\r
-    u = User.find_by_mail('JSmith@somenet.foo')\r
-    assert_not_nil u\r
-    assert_equal 'jsmith@somenet.foo', u.mail\r
-  end\r
-  \r
-  def test_random_password\r
-    u = User.new\r
-    u.random_password\r
-    assert !u.password.blank?\r
-    assert !u.password_confirmation.blank?\r
-  end\r
-  \r
-  if Object.const_defined?(:OpenID)\r
-    \r
-  def test_setting_identity_url\r
-    normalized_open_id_url = 'http://example.com/'\r
-    u = User.new( :identity_url => 'http://example.com/' )\r
-    assert_equal normalized_open_id_url, u.identity_url\r
-  end\r
-\r
-  def test_setting_identity_url_without_trailing_slash\r
-    normalized_open_id_url = 'http://example.com/'\r
-    u = User.new( :identity_url => 'http://example.com' )\r
-    assert_equal normalized_open_id_url, u.identity_url\r
-  end\r
-\r
-  def test_setting_identity_url_without_protocol\r
-    normalized_open_id_url = 'http://example.com/'\r
-    u = User.new( :identity_url => 'example.com' )\r
-    assert_equal normalized_open_id_url, u.identity_url\r
-  end\r
-    \r
-  def test_setting_blank_identity_url\r
-    u = User.new( :identity_url => 'example.com' )\r
-    u.identity_url = ''\r
-    assert u.identity_url.blank?\r
-  end\r
-    \r
-  def test_setting_invalid_identity_url\r
-    u = User.new( :identity_url => 'this is not an openid url' )\r
-    assert u.identity_url.blank?\r
-  end\r
-  \r
-  else\r
-    puts "Skipping openid tests."\r
-  end\r
-\r
-end\r
+# redMine - project management software
+# Copyright (C) 2006  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require File.dirname(__FILE__) + '/../test_helper'
+
+class UserTest < ActiveSupport::TestCase
+  fixtures :users, :members, :projects, :roles, :member_roles
+
+  def setup
+    @admin = User.find(1)
+    @jsmith = User.find(2)
+    @dlopper = User.find(3)
+  end
+  
+  def test_truth
+    assert_kind_of User, @jsmith
+  end
+
+  def test_create
+    user = User.new(:firstname => "new", :lastname => "user", :mail => "newuser@somenet.foo")
+    
+    user.login = "jsmith"
+    user.password, user.password_confirmation = "password", "password"
+    # login uniqueness
+    assert !user.save
+    assert_equal 1, user.errors.count
+  
+    user.login = "newuser"
+    user.password, user.password_confirmation = "passwd", "password"
+    # password confirmation
+    assert !user.save
+    assert_equal 1, user.errors.count
+
+    user.password, user.password_confirmation = "password", "password"
+    assert user.save
+  end
+  
+  def test_mail_uniqueness_should_not_be_case_sensitive
+    u = User.new(:firstname => "new", :lastname => "user", :mail => "newuser@somenet.foo")
+    u.login = 'newuser1'
+    u.password, u.password_confirmation = "password", "password"
+    assert u.save
+    
+    u = User.new(:firstname => "new", :lastname => "user", :mail => "newUser@Somenet.foo")
+    u.login = 'newuser2'
+    u.password, u.password_confirmation = "password", "password"
+    assert !u.save
+    assert_equal I18n.translate('activerecord.errors.messages.taken'), u.errors.on(:mail)
+  end
+
+  def test_update
+    assert_equal "admin", @admin.login
+    @admin.login = "john"
+    assert @admin.save, @admin.errors.full_messages.join("; ")
+    @admin.reload
+    assert_equal "john", @admin.login
+  end
+  
+  def test_destroy
+    User.find(2).destroy
+    assert_nil User.find_by_id(2)
+    assert Member.find_all_by_user_id(2).empty?
+  end
+  
+  def test_validate
+    @admin.login = ""
+    assert !@admin.save
+    assert_equal 1, @admin.errors.count
+  end
+  
+  def test_password
+    user = User.try_to_login("admin", "admin")
+    assert_kind_of User, user
+    assert_equal "admin", user.login
+    user.password = "hello"
+    assert user.save
+    
+    user = User.try_to_login("admin", "hello")
+    assert_kind_of User, user
+    assert_equal "admin", user.login
+    assert_equal User.hash_password("hello"), user.hashed_password    
+  end
+  
+  def test_name_format
+    assert_equal 'Smith, John', @jsmith.name(:lastname_coma_firstname)
+    Setting.user_format = :firstname_lastname
+    assert_equal 'John Smith', @jsmith.reload.name
+    Setting.user_format = :username
+    assert_equal 'jsmith', @jsmith.reload.name
+  end
+  
+  def test_lock
+    user = User.try_to_login("jsmith", "jsmith")
+    assert_equal @jsmith, user
+    
+    @jsmith.status = User::STATUS_LOCKED
+    assert @jsmith.save
+    
+    user = User.try_to_login("jsmith", "jsmith")
+    assert_equal nil, user  
+  end
+  
+  def test_create_anonymous
+    AnonymousUser.delete_all
+    anon = User.anonymous
+    assert !anon.new_record?
+    assert_kind_of AnonymousUser, anon
+  end
+  
+  def test_rss_key
+    assert_nil @jsmith.rss_token
+    key = @jsmith.rss_key
+    assert_equal 40, key.length
+    
+    @jsmith.reload
+    assert_equal key, @jsmith.rss_key
+  end
+  
+  def test_roles_for_project
+    # user with a role
+    roles = @jsmith.roles_for_project(Project.find(1))
+    assert_kind_of Role, roles.first
+    assert_equal "Manager", roles.first.name
+    
+    # user with no role
+    assert_nil @dlopper.roles_for_project(Project.find(2)).detect {|role| role.member?}
+  end
+  
+  def test_mail_notification_all
+    @jsmith.mail_notification = true
+    @jsmith.notified_project_ids = []
+    @jsmith.save
+    @jsmith.reload
+    assert @jsmith.projects.first.recipients.include?(@jsmith.mail)
+  end
+  
+  def test_mail_notification_selected
+    @jsmith.mail_notification = false
+    @jsmith.notified_project_ids = [1]
+    @jsmith.save
+    @jsmith.reload
+    assert Project.find(1).recipients.include?(@jsmith.mail)
+  end
+  
+  def test_mail_notification_none
+    @jsmith.mail_notification = false
+    @jsmith.notified_project_ids = []
+    @jsmith.save
+    @jsmith.reload
+    assert !@jsmith.projects.first.recipients.include?(@jsmith.mail)
+  end
+  
+  def test_comments_sorting_preference
+    assert !@jsmith.wants_comments_in_reverse_order?
+    @jsmith.pref.comments_sorting = 'asc'
+    assert !@jsmith.wants_comments_in_reverse_order?
+    @jsmith.pref.comments_sorting = 'desc'
+    assert @jsmith.wants_comments_in_reverse_order?
+  end
+  
+  def test_find_by_mail_should_be_case_insensitive
+    u = User.find_by_mail('JSmith@somenet.foo')
+    assert_not_nil u
+    assert_equal 'jsmith@somenet.foo', u.mail
+  end
+  
+  def test_random_password
+    u = User.new
+    u.random_password
+    assert !u.password.blank?
+    assert !u.password_confirmation.blank?
+  end
+  
+  if Object.const_defined?(:OpenID)
+    
+  def test_setting_identity_url
+    normalized_open_id_url = 'http://example.com/'
+    u = User.new( :identity_url => 'http://example.com/' )
+    assert_equal normalized_open_id_url, u.identity_url
+  end
+
+  def test_setting_identity_url_without_trailing_slash
+    normalized_open_id_url = 'http://example.com/'
+    u = User.new( :identity_url => 'http://example.com' )
+    assert_equal normalized_open_id_url, u.identity_url
+  end
+
+  def test_setting_identity_url_without_protocol
+    normalized_open_id_url = 'http://example.com/'
+    u = User.new( :identity_url => 'example.com' )
+    assert_equal normalized_open_id_url, u.identity_url
+  end
+    
+  def test_setting_blank_identity_url
+    u = User.new( :identity_url => 'example.com' )
+    u.identity_url = ''
+    assert u.identity_url.blank?
+  end
+    
+  def test_setting_invalid_identity_url
+    u = User.new( :identity_url => 'this is not an openid url' )
+    assert u.identity_url.blank?
+  end
+  
+  else
+    puts "Skipping openid tests."
+  end
+
+end
index 1837edb..5c0def1 100644 (file)
@@ -24,18 +24,18 @@ class WikiPageTest < ActiveSupport::TestCase
     @wiki = Wiki.find(1)
     @page = @wiki.pages.first
   end
-  \r
-  def test_create\r
+  
+  def test_create
     page = WikiPage.new(:wiki => @wiki)
     assert !page.save
     assert_equal 1, page.errors.count
   
-    page.title = "Page"\r
+    page.title = "Page"
     assert page.save
     page.reload
     
     @wiki.reload
-    assert @wiki.pages.include?(page)\r
+    assert @wiki.pages.include?(page)
   end
   
   def test_find_or_new_page
index fd8a375..ed96e07 100644 (file)
@@ -19,15 +19,15 @@ require File.dirname(__FILE__) + '/../test_helper'
 
 class WikiTest < ActiveSupport::TestCase
   fixtures :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions
-  \r
-  def test_create\r
+  
+  def test_create
     wiki = Wiki.new(:project => Project.find(2))
     assert !wiki.save
     assert_equal 1, wiki.errors.count
   
-    wiki.start_page = "Start page"\r
-    assert wiki.save\r
-  end\r
+    wiki.start_page = "Start page"
+    assert wiki.save
+  end
 
   def test_update
     @wiki = Wiki.find(1)