Compare commits

..
1 Commits
Author SHA1 Message Date
Jean-Philippe Lang 72716d0e01 tagged version 1.4.4
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/tags/1.4.4@9867 e93f8b46-1217-0410-a6f0-8f06a7374b81
2012-06-18 20:21:57 +00:00
59 changed files with 241 additions and 635 deletions
-1
View File
@@ -18,7 +18,6 @@
/public/plugin_assets /public/plugin_assets
/tmp/* /tmp/*
/tmp/cache/* /tmp/cache/*
/tmp/pdf/*
/tmp/sessions/* /tmp/sessions/*
/tmp/sockets/* /tmp/sockets/*
/tmp/test/* /tmp/test/*
-1
View File
@@ -20,7 +20,6 @@ public/dispatch.*
public/plugin_assets public/plugin_assets
tmp/* tmp/*
tmp/cache/* tmp/cache/*
tmp/pdf/*
tmp/sessions/* tmp/sessions/*
tmp/sockets/* tmp/sockets/*
tmp/test/* tmp/test/*
+3 -5
View File
@@ -1,6 +1,6 @@
source :rubygems source :rubygems
gem "rails", "2.3.15" gem "rails", "2.3.14"
gem "i18n", "~> 0.4.2" gem "i18n", "~> 0.4.2"
gem "coderay", "~> 1.0.6" gem "coderay", "~> 1.0.6"
gem "fastercsv", "~> 1.5.0", :platforms => [:mri_18, :mingw_18, :jruby] gem "fastercsv", "~> 1.5.0", :platforms => [:mri_18, :mingw_18, :jruby]
@@ -39,7 +39,7 @@ end
platforms :mri_18, :mingw_18 do platforms :mri_18, :mingw_18 do
group :mysql do group :mysql do
gem "mysql", "~> 2.8.1" gem "mysql"
end end
end end
@@ -71,10 +71,8 @@ end
group :test do group :test do
gem "shoulda", "~> 2.10.3" gem "shoulda", "~> 2.10.3"
# Shoulda does not work nice on Ruby 1.9.3 and seems to need test-unit explicitely.
gem "test-unit", :platforms => [:mri_19]
gem "edavis10-object_daddy", :require => "object_daddy" gem "edavis10-object_daddy", :require => "object_daddy"
gem "mocha", "0.12.3" gem "mocha"
end end
local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local") local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
+1 -3
View File
@@ -799,7 +799,7 @@ module ApplicationHelper
end end
end end
HEADING_RE = /(<h(\d)( [^>]+)?>(.+?)<\/h(\d)>)/i unless const_defined?(:HEADING_RE) HEADING_RE = /(<h(1|2|3|4)( [^>]+)?>(.+?)<\/h(1|2|3|4)>)/i unless const_defined?(:HEADING_RE)
def parse_sections(text, project, obj, attr, only_path, options) def parse_sections(text, project, obj, attr, only_path, options)
return unless options[:edit_section_links] return unless options[:edit_section_links]
@@ -870,8 +870,6 @@ module ApplicationHelper
# Renders the TOC with given headings # Renders the TOC with given headings
def replace_toc(text, headings) def replace_toc(text, headings)
text.gsub!(TOC_RE) do text.gsub!(TOC_RE) do
# Keep only the 4 first levels
headings = headings.select{|level, anchor, item| level <= 4}
if headings.empty? if headings.empty?
'' ''
else else
-1
View File
@@ -24,7 +24,6 @@ class Attachment < ActiveRecord::Base
validates_presence_of :filename, :author validates_presence_of :filename, :author
validates_length_of :filename, :maximum => 255 validates_length_of :filename, :maximum => 255
validates_length_of :disk_filename, :maximum => 255 validates_length_of :disk_filename, :maximum => 255
validates_length_of :description, :maximum => 255, :allow_blank => true
validate :validate_max_file_size validate :validate_max_file_size
acts_as_event :title => :filename, acts_as_event :title => :filename,
+1 -3
View File
@@ -42,9 +42,7 @@ class Document < ActiveRecord::Base
def initialize(attributes=nil, *args) def initialize(attributes=nil, *args)
super super
if new_record? if new_record?
# Rails3 use this instead self.category ||= DocumentCategory.default
# self.category ||= DocumentCategory.default
self.category_id = DocumentCategory.default.id if self.category_id == 0
end end
end end
-8
View File
@@ -31,12 +31,4 @@ class DocumentCategory < Enumeration
def transfer_relations(to) def transfer_relations(to)
documents.update_all("category_id = #{to.id}") documents.update_all("category_id = #{to.id}")
end end
def self.default
d = super
if d.nil?
d = find(:first)
end
d
end
end end
+6 -9
View File
@@ -44,8 +44,8 @@ class MailHandler < ActionMailer::Base
cattr_accessor :ignored_emails_headers cattr_accessor :ignored_emails_headers
@@ignored_emails_headers = { @@ignored_emails_headers = {
'X-Auto-Response-Suppress' => 'oof', 'X-Auto-Response-Suppress' => 'OOF',
'Auto-Submitted' => /^auto-/ 'Auto-Submitted' => 'auto-replied'
} }
# Processes incoming emails # Processes incoming emails
@@ -63,14 +63,11 @@ class MailHandler < ActionMailer::Base
# Ignore auto generated emails # Ignore auto generated emails
self.class.ignored_emails_headers.each do |key, ignored_value| self.class.ignored_emails_headers.each do |key, ignored_value|
value = email.header_string(key) value = email.header_string(key)
if value if value && value.to_s.downcase == ignored_value.downcase
value = value.to_s.downcase if logger && logger.info
if (ignored_value.is_a?(Regexp) && value.match(ignored_value)) || value == ignored_value logger.info "MailHandler: ignoring email with #{key}:#{value} header"
if logger && logger.info
logger.info "MailHandler: ignoring email with #{key}:#{value} header"
end
return false
end end
return false
end end
end end
@user = User.find_by_mail(sender_email) if sender_email.present? @user = User.find_by_mail(sender_email) if sender_email.present?
+2 -2
View File
@@ -174,9 +174,9 @@ class Query < ActiveRecord::Base
if values_for(field) if values_for(field)
case type_for(field) case type_for(field)
when :integer when :integer
add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^[+-]?\d+$/) } add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^\d+$/) }
when :float when :float
add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^[+-]?\d+(\.\d*)?$/) } add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^\d+(\.\d*)?$/) }
when :date, :date_past when :date, :date_past
case operator_for(field) case operator_for(field)
when "=", ">=", "<=", "><" when "=", ">=", "<=", "><"
+2 -6
View File
@@ -37,8 +37,8 @@ class Repository < ActiveRecord::Base
validates_presence_of :identifier, :unless => Proc.new { |r| r.is_default? || r.set_as_default? } validates_presence_of :identifier, :unless => Proc.new { |r| r.is_default? || r.set_as_default? }
validates_uniqueness_of :identifier, :scope => :project_id, :allow_blank => true validates_uniqueness_of :identifier, :scope => :project_id, :allow_blank => true
validates_exclusion_of :identifier, :in => %w(show entry raw changes annotate diff show stats graph) validates_exclusion_of :identifier, :in => %w(show entry raw changes annotate diff show stats graph)
# donwcase letters, digits, dashes, underscores but not digits only # donwcase letters, digits, dashes but not digits only
validates_format_of :identifier, :with => /^(?!\d+$)[a-z0-9\-_]*$/, :allow_blank => true validates_format_of :identifier, :with => /^(?!\d+$)[a-z0-9\-]*$/, :allow_blank => true
# Checks if the SCM is enabled when creating a repository # Checks if the SCM is enabled when creating a repository
validate :repo_create_validation, :on => :create validate :repo_create_validation, :on => :create
@@ -415,9 +415,5 @@ class Repository < ActiveRecord::Base
connection.delete("DELETE FROM #{ci} WHERE #{ci}.changeset_id IN (SELECT #{cs}.id FROM #{cs} WHERE #{cs}.repository_id = #{id})") connection.delete("DELETE FROM #{ci} WHERE #{ci}.changeset_id IN (SELECT #{cs}.id FROM #{cs} WHERE #{cs}.repository_id = #{id})")
connection.delete("DELETE FROM #{cp} WHERE #{cp}.changeset_id IN (SELECT #{cs}.id FROM #{cs} WHERE #{cs}.repository_id = #{id})") connection.delete("DELETE FROM #{cp} WHERE #{cp}.changeset_id IN (SELECT #{cs}.id FROM #{cs} WHERE #{cs}.repository_id = #{id})")
connection.delete("DELETE FROM #{cs} WHERE #{cs}.repository_id = #{id}") connection.delete("DELETE FROM #{cs} WHERE #{cs}.repository_id = #{id}")
clear_extra_info_of_changesets
end
def clear_extra_info_of_changesets
end end
end end
-11
View File
@@ -255,15 +255,4 @@ class Repository::Git < Repository
:order => 'committed_on DESC' :order => 'committed_on DESC'
) )
end end
def clear_extra_info_of_changesets
return if extra_info.nil?
v = extra_info["extra_report_last_commit"]
write_attribute(:extra_info, nil)
h = {}
h["extra_report_last_commit"] = v
merge_extra_info(h)
self.save
end
private :clear_extra_info_of_changesets
end end
+1 -1
View File
@@ -10,7 +10,7 @@
<span> <span>
<%= file_field_tag 'attachments[1][file]', :size => 30, :id => nil, :class => 'file', <%= file_field_tag 'attachments[1][file]', :size => 30, :id => nil, :class => 'file',
:onchange => "checkFileSize(this, #{Setting.attachment_max_size.to_i.kilobytes}, '#{escape_javascript(l(:error_attachment_too_big, :max_size => number_to_human_size(Setting.attachment_max_size.to_i.kilobytes)))}');" -%> :onchange => "checkFileSize(this, #{Setting.attachment_max_size.to_i.kilobytes}, '#{escape_javascript(l(:error_attachment_too_big, :max_size => number_to_human_size(Setting.attachment_max_size.to_i.kilobytes)))}');" -%>
<%= text_field_tag 'attachments[1][description]', '', :id => nil, :class => 'description', :maxlength => 255, :placeholder => l(:label_optional_description) %> <%= text_field_tag 'attachments[1][description]', '', :id => nil, :class => 'description', :placeholder => l(:label_optional_description) %>
<%= link_to_function(image_tag('delete.png'), 'removeFileField(this)', :title => (l(:button_delete))) %> <%= link_to_function(image_tag('delete.png'), 'removeFileField(this)', :title => (l(:button_delete))) %>
</span> </span>
</span> </span>
+2 -3
View File
@@ -1,9 +1,8 @@
<h2><%= l(:label_revision) %> <%= @diff_format_revisions %> <%=h @path %></h2> <h2><%= l(:label_revision) %> <%= @diff_format_revisions %> <%=h @path %></h2>
<!-- Choose view type --> <!-- Choose view type -->
<% form_tag({:action => 'diff', :id => @project, <% form_tag({:path => to_path_param(@path)}, :method => 'get') do %>
:repository_id => @repository.identifier_param, <%= hidden_field_tag('rev', params[:rev]) if params[:rev] %>
:path => to_path_param(@path), :rev => @rev}, :method => 'get') do %>
<%= hidden_field_tag('rev_to', params[:rev_to]) if params[:rev_to] %> <%= hidden_field_tag('rev_to', params[:rev_to]) if params[:rev_to] %>
<p> <p>
<label><%= l(:label_view_diff) %></label> <label><%= l(:label_view_diff) %></label>
+1 -2
View File
@@ -1,8 +1,7 @@
<div class="contextual"> <div class="contextual">
<% form_tag( <% form_tag(
{:action => 'revision', :id => @project, {:action => 'revision', :id => @project,
:repository_id => @repository.identifier_param}, :repository_id => @repository.identifier_param}
:method => :get
) do %> ) do %>
<%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 8 %> <%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 8 %>
<%= submit_tag 'OK' %> <%= submit_tag 'OK' %>
-1
View File
@@ -8,7 +8,6 @@ api.array :versions, api_meta(:total_count => @versions.size) do
api.description version.description api.description version.description
api.status version.status api.status version.status
api.due_date version.effective_date api.due_date version.effective_date
api.sharing version.sharing
render_api_custom_values version.custom_field_values, api render_api_custom_values version.custom_field_values, api
-1
View File
@@ -6,7 +6,6 @@ api.version do
api.description @version.description api.description @version.description
api.status @version.status api.status @version.status
api.due_date @version.effective_date api.due_date @version.effective_date
api.sharing @version.sharing
render_api_custom_values @version.custom_field_values, api render_api_custom_values @version.custom_field_values, api
+3 -8
View File
@@ -116,19 +116,14 @@ module ActionController
end end
end end
# Fix for CVE-2013-0155 # CVE-2012-2695
# https://groups.google.com/d/msg/rubyonrails-security/c7jT-EeN9eI/L0u4e87zYGMJ # https://groups.google.com/group/rubyonrails-security/browse_thread/thread/9782f44c4540cf59
# https://groups.google.com/d/msg/rubyonrails-security/kKGNeMrnmiY/r2yM7xy-G48J
# https://github.com/rails/rails/blob/v2.3.15/activerecord/lib/active_record/base.rb#L2340
module ActiveRecord module ActiveRecord
class Base class Base
class << self class << self
protected def sanitize_sql_hash_for_conditions(attrs, default_table_name = quoted_table_name, top_level = true)
def self.sanitize_sql_hash_for_conditions(attrs, default_table_name = quoted_table_name, top_level = true)
attrs = expand_hash_conditions_for_aggregates(attrs) attrs = expand_hash_conditions_for_aggregates(attrs)
return '1 = 2' if !top_level && attrs.is_a?(Hash) && attrs.empty?
conditions = attrs.map do |attr, value| conditions = attrs.map do |attr, value|
table_name = default_table_name table_name = default_table_name
+7 -7
View File
@@ -1019,8 +1019,8 @@ de:
description_date_from: Startdatum eintragen description_date_from: Startdatum eintragen
description_date_to: Enddatum eintragen description_date_to: Enddatum eintragen
label_parent_revision: Vorgänger label_parent_revision: Parent
label_child_revision: Nachfolger label_child_revision: Child
error_scm_annotate_big_text_file: Der Eintrag kann nicht umgesetzt werden, da er die maximale Textlänge überschreitet. error_scm_annotate_big_text_file: Der Eintrag kann nicht umgesetzt werden, da er die maximale Textlänge überschreitet.
setting_default_issue_start_date_to_creation_date: Aktuelles Datum als Beginn für neue Tickets verwenden setting_default_issue_start_date_to_creation_date: Aktuelles Datum als Beginn für neue Tickets verwenden
button_edit_section: Diesen Bereich bearbeiten button_edit_section: Diesen Bereich bearbeiten
@@ -1052,8 +1052,8 @@ de:
setting_unsubscribe: Erlaubt Benutzern das eigene Benutzerkonto zu löschen setting_unsubscribe: Erlaubt Benutzern das eigene Benutzerkonto zu löschen
button_delete_my_account: Mein Benutzerkonto löschen button_delete_my_account: Mein Benutzerkonto löschen
text_account_destroy_confirmation: Möchten Sie wirklich fortfahren?\nIhr Benutzerkonto wird für immer gelöscht und kann nicht wiederhergestellt werden. text_account_destroy_confirmation: Möchten Sie wirklich fortfahren?\nIhr Benutzerkonto wird für immer gelöscht und kann nicht wiederhergestellt werden.
error_session_expired: Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an. error_session_expired: Your session has expired. Please login again.
text_session_expiration_settings: "Achtung: Änderungen können aktuelle Sitzungen beenden, Ihre eingeschlossen!" text_session_expiration_settings: "Warning: changing these settings may expire the current sessions including yours."
setting_session_lifetime: Längste Dauer einer Sitzung setting_session_lifetime: Session maximum lifetime
setting_session_timeout: Zeitüberschreitung bei Inaktivität setting_session_timeout: Session inactivity timeout
label_session_expiration: Ende einer Sitzung label_session_expiration: Session expiration
+1 -1
View File
@@ -761,7 +761,7 @@ ja:
label_week: 週 label_week: 週
label_date_from: "日付指定: " label_date_from: "日付指定: "
label_date_to: から label_date_to: から
label_language_based: ユーザの言語の設定に従う label_language_based: 既定の言語の設定に従う
label_sort_by: "並び替え %{value}" label_sort_by: "並び替え %{value}"
label_send_test_email: テストメールを送信 label_send_test_email: テストメールを送信
label_feeds_access_key: RSSアクセスキー label_feeds_access_key: RSSアクセスキー
+28 -31
View File
@@ -49,7 +49,7 @@ nl:
one: "ongeveer 1 uur" one: "ongeveer 1 uur"
other: "ongeveer %{count} uren" other: "ongeveer %{count} uren"
x_hours: x_hours:
one: "1 uur" one: "1 hour"
other: "%{count} hours" other: "%{count} hours"
x_days: x_days:
one: "1 dag" one: "1 dag"
@@ -990,37 +990,34 @@ nl:
description_all_columns: Alle kolommen description_all_columns: Alle kolommen
button_export: Exporteren button_export: Exporteren
label_export_options: "%{export_format} export opties" label_export_options: "%{export_format} export opties"
error_attachment_too_big: Dit bestand kan niet worden geupload omdat het de maximaal toegestane grootte overschrijd (%{max_size}) error_attachment_too_big: This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})
notice_failed_to_save_time_entries: "Opslaan gefaald voor %{count} tijdsnotatie(s) van %{total} geselecteerde: %{ids}." notice_failed_to_save_time_entries: "Failed to save %{count} time entrie(s) on %{total} selected: %{ids}."
label_x_issues: label_x_issues:
zero: 0 incidenten zero: 0 issue
one: 1 incidenten one: 1 issue
other: "%{count} incidenten" other: "%{count} issues"
label_repository_new: Nieuw repository label_repository_new: New repository
field_repository_is_default: Hoofd repository field_repository_is_default: Main repository
label_copy_attachments: Copieer bijlage(n) label_copy_attachments: Copy attachments
label_item_position: "%{position}/%{count}" label_item_position: "%{position}/%{count}"
label_completed_versions: Versies compleet label_completed_versions: Completed versions
field_multiple: Meerdere waardes field_multiple: Multiple values
setting_commit_cross_project_ref: Sta toe om incidenten van alle projecten te refereren en oplossen setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed
text_issue_conflict_resolution_add_notes: Voeg mijn notities toe en annuleer andere wijzigingen text_issue_conflict_resolution_add_notes: Add my notes and discard my other changes
text_issue_conflict_resolution_overwrite: Voeg mijn wijzigingen alsnog toe (voorgaande notities worden bewaard, maar sommige kunnen overschreden worden) text_issue_conflict_resolution_overwrite: Apply my changes anyway (previous notes will be kept but some changes may be overwritten)
notice_issue_update_conflict: Dit incident is reeds geupdate door een andere gebruiker terwijl jij bezig was notice_issue_update_conflict: The issue has been updated by an other user while you were editing it.
text_issue_conflict_resolution_cancel: Annuleer mijn wijzigingen en geef pagina opnieuw weer %{link} text_issue_conflict_resolution_cancel: Discard all my changes and redisplay %{link}
permission_manage_related_issues: Beheer gerelateerde incidenten permission_manage_related_issues: Manage related issues
field_ldap_filter: LDAP filter field_ldap_filter: LDAP filter
label_search_for_watchers: Search for watchers to add
label_search_for_watchers: Zoek om monitoorders toe te voegen notice_account_deleted: Your account has been permanently deleted.
notice_account_deleted: Uw account is permanent verwijderd setting_unsubscribe: Allow users to delete their own account
setting_unsubscribe: Sta gebruikers toe hun eigen account te verwijderen button_delete_my_account: Delete my account
button_delete_my_account: Verwijder mijn account
text_account_destroy_confirmation: |- text_account_destroy_confirmation: |-
Weet u zeker dat u door wilt gaan? Are you sure you want to proceed?
Uw account wordt permanent verwijderd zonder mogelijkheid deze te heractiveren. Your account will be permanently deleted, with no way to reactivate it.
error_session_expired: Uw sessie is verlopen. U dient opnieuw in te loggen. error_session_expired: Your session has expired. Please login again.
text_session_expiration_settings: "Waarschuwing: door deze instelling te wijzigen kan sessies laten verlopen inclusief de uwe" text_session_expiration_settings: "Warning: changing these settings may expire the current sessions including yours."
setting_session_lifetime: Maximale sessieduur setting_session_lifetime: Session maximum lifetime
setting_session_timeout: Sessie inactiviteit timeout setting_session_timeout: Session inactivity timeout
label_session_expiration: Sessie verlopen label_session_expiration: Session expiration
+35 -35
View File
@@ -971,61 +971,61 @@
setting_issue_group_assignment: Tillat tildeling av saker til grupper setting_issue_group_assignment: Tillat tildeling av saker til grupper
label_diff: diff label_diff: diff
description_query_sort_criteria_direction: Sorteringsretning description_query_sort_criteria_direction: Sort direction
description_project_scope: Search scope description_project_scope: Search scope
description_filter: Filter description_filter: Filter
description_user_mail_notification: Mail notification settings description_user_mail_notification: Mail notification settings
description_date_from: Oppgi startdato description_date_from: Enter start date
description_message_content: Meldingsinnhold description_message_content: Message content
description_available_columns: Tilgjengelige kolonner description_available_columns: Available Columns
description_date_range_interval: Velg datointervall ved å spesifisere start- og sluttdato description_date_range_interval: Choose range by selecting start and end date
description_issue_category_reassign: Choose issue category description_issue_category_reassign: Choose issue category
description_search: Søkefelt description_search: Searchfield
description_notes: Notes description_notes: Notes
description_date_range_list: Choose range from list description_date_range_list: Choose range from list
description_choose_project: Prosjekter description_choose_project: Projects
description_date_to: Oppgi sluttdato description_date_to: Enter end date
description_query_sort_criteria_attribute: Sort attribute description_query_sort_criteria_attribute: Sort attribute
description_wiki_subpages_reassign: Velg ny overordnet side description_wiki_subpages_reassign: Choose new parent page
description_selected_columns: Valgte kolonner description_selected_columns: Selected Columns
label_parent_revision: Overordnet label_parent_revision: Parent
label_child_revision: Underordnet label_child_revision: Child
error_scm_annotate_big_text_file: The entry cannot be annotated, as it exceeds the maximum text file size. error_scm_annotate_big_text_file: The entry cannot be annotated, as it exceeds the maximum text file size.
setting_default_issue_start_date_to_creation_date: Bruk dagens dato som startdato for nye saker setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
button_edit_section: Rediger denne seksjonen button_edit_section: Edit this section
setting_repositories_encodings: Attachments and repositories encodings setting_repositories_encodings: Attachments and repositories encodings
description_all_columns: Alle kolonnene description_all_columns: All Columns
button_export: Eksporter button_export: Export
label_export_options: "%{export_format} eksportvalg" label_export_options: "%{export_format} export options"
error_attachment_too_big: Filen overstiger maksimum filstørrelse (%{max_size}) og kan derfor ikke lastes opp error_attachment_too_big: This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})
notice_failed_to_save_time_entries: "Failed to save %{count} time entrie(s) on %{total} selected: %{ids}." notice_failed_to_save_time_entries: "Failed to save %{count} time entrie(s) on %{total} selected: %{ids}."
label_x_issues: label_x_issues:
zero: 0 sak zero: 0 sak
one: 1 sak one: 1 sak
other: "%{count} saker" other: "%{count} saker"
label_repository_new: Nytt depot label_repository_new: New repository
field_repository_is_default: Hoveddepot field_repository_is_default: Main repository
label_copy_attachments: Kopier vedlegg label_copy_attachments: Copy attachments
label_item_position: "%{position}/%{count}" label_item_position: "%{position}/%{count}"
label_completed_versions: Completed versions label_completed_versions: Completed versions
text_project_identifier_info: Kun små bokstaver (a-z), tall, bindestrek (-) og "underscore" (_) er tillatt.<br />Etter lagring er det ikke mulig å gjøre endringer. text_project_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
field_multiple: Flere verdier field_multiple: Multiple values
setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed
text_issue_conflict_resolution_add_notes: Add my notes and discard my other changes text_issue_conflict_resolution_add_notes: Add my notes and discard my other changes
text_issue_conflict_resolution_overwrite: Apply my changes anyway (previous notes will be kept but some changes may be overwritten) text_issue_conflict_resolution_overwrite: Apply my changes anyway (previous notes will be kept but some changes may be overwritten)
notice_issue_update_conflict: Saken ble oppdatert av en annen bruker mens du redigerte den. notice_issue_update_conflict: The issue has been updated by an other user while you were editing it.
text_issue_conflict_resolution_cancel: Forkast alle endringen mine og vis %{link} på nytt text_issue_conflict_resolution_cancel: Discard all my changes and redisplay %{link}
permission_manage_related_issues: Manage related issues permission_manage_related_issues: Manage related issues
field_ldap_filter: LDAP filter field_ldap_filter: LDAP filter
label_search_for_watchers: Search for watchers to add label_search_for_watchers: Search for watchers to add
notice_account_deleted: Din konto er ugjenkallelig slettet. notice_account_deleted: Your account has been permanently deleted.
setting_unsubscribe: Tillat brukere å slette sin egen konto setting_unsubscribe: Allow users to delete their own account
button_delete_my_account: Slett kontoen min button_delete_my_account: Delete my account
text_account_destroy_confirmation: |- text_account_destroy_confirmation: |-
Er du sikker på at du ønsker å fortsette? Are you sure you want to proceed?
Kontoen din vil bli ugjenkallelig slettet uten mulighet for å reaktiveres igjen. Your account will be permanently deleted, with no way to reactivate it.
error_session_expired: Økten har gått ut på tid. Vennligst logg på igjen. error_session_expired: Your session has expired. Please login again.
text_session_expiration_settings: "Advarsel: ved å endre disse innstillingene kan aktive økter gå ut på tid, inkludert din egen." text_session_expiration_settings: "Warning: changing these settings may expire the current sessions including yours."
setting_session_lifetime: Øktenes makslengde setting_session_lifetime: Session maximum lifetime
setting_session_timeout: Økten er avsluttet på grunn av inaktivitet setting_session_timeout: Session inactivity timeout
label_session_expiration: Økten er avsluttet label_session_expiration: Session expiration
+4 -4
View File
@@ -18,10 +18,10 @@ pt-BR:
time: time:
formats: formats:
default: "%A, %d de %B de %Y, %H:%M h" default: "%A, %d de %B de %Y, %H:%M hs"
time: "%H:%M h" time: "%H:%M hs"
short: "%d/%m, %H:%M h" short: "%d/%m, %H:%M hs"
long: "%A, %d de %B de %Y, %H:%M h" long: "%A, %d de %B de %Y, %H:%M hs"
only_second: "%S" only_second: "%S"
datetime: datetime:
formats: formats:
+41 -41
View File
@@ -117,8 +117,8 @@ ru:
many: "около %{count} часов" many: "около %{count} часов"
other: "около %{count} часа" other: "около %{count} часа"
x_hours: x_hours:
one: "1 час" one: "1 hour"
other: "%{count} часов" other: "%{count} hours"
x_days: x_days:
one: "%{count} день" one: "%{count} день"
few: "%{count} дня" few: "%{count} дня"
@@ -1092,11 +1092,11 @@ ru:
notice_issue_successful_create: Задача %{id} создана. notice_issue_successful_create: Задача %{id} создана.
label_between: между label_between: между
setting_issue_group_assignment: Разрешить назначение задач группам пользователей setting_issue_group_assignment: Разрешить назначение задач группам пользователей
label_diff: Разница(diff) label_diff: diff
text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo) text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo)
description_query_sort_criteria_direction: Порядок сортировки description_query_sort_criteria_direction: Sort direction
description_project_scope: Search scope description_project_scope: Search scope
description_filter: Фильтр description_filter: Filter
description_user_mail_notification: Mail notification settings description_user_mail_notification: Mail notification settings
description_date_from: Enter start date description_date_from: Enter start date
description_message_content: Message content description_message_content: Message content
@@ -1104,51 +1104,51 @@ ru:
description_date_range_interval: Choose range by selecting start and end date description_date_range_interval: Choose range by selecting start and end date
description_issue_category_reassign: Choose issue category description_issue_category_reassign: Choose issue category
description_search: Searchfield description_search: Searchfield
description_notes: Примечания description_notes: Notes
description_date_range_list: Выберите диапазон из списка description_date_range_list: Choose range from list
description_choose_project: Проекты description_choose_project: Projects
description_date_to: Введите дату выполнения description_date_to: Enter end date
description_query_sort_criteria_attribute: Критерий сортировки description_query_sort_criteria_attribute: Sort attribute
description_wiki_subpages_reassign: Выбрать новую родительскую страницу description_wiki_subpages_reassign: Choose new parent page
description_selected_columns: Выбранные столбцы description_selected_columns: Selected Columns
label_parent_revision: Родительский label_parent_revision: Parent
label_child_revision: Дочерний label_child_revision: Child
error_scm_annotate_big_text_file: Комментарий невозможен из-за превышения максимального размера текстового файла. error_scm_annotate_big_text_file: The entry cannot be annotated, as it exceeds the maximum text file size.
setting_default_issue_start_date_to_creation_date: Использовать текущую дату в качестве даты начала для новых задач setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
button_edit_section: Редактировать эту секцию button_edit_section: Edit this section
setting_repositories_encodings: Кодировка вложений и хранилищ setting_repositories_encodings: Attachments and repositories encodings
description_all_columns: Все столбцы description_all_columns: All Columns
button_export: Экспорт button_export: Export
label_export_options: "%{export_format} параметры экспорта" label_export_options: "%{export_format} export options"
error_attachment_too_big: Этот файл нельзя загрузить из-за превышения максимального размера файла (%{max_size}) error_attachment_too_big: This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})
notice_failed_to_save_time_entries: "Невозможно сохранить %{count} затраченное время для %{total} выбранных: %{ids}." notice_failed_to_save_time_entries: "Failed to save %{count} time entrie(s) on %{total} selected: %{ids}."
label_x_issues: label_x_issues:
zero: 0 Задач zero: 0 Задач
one: 1 Задача one: 1 Задача
few: "%{count} Задач" few: "%{count} Задач"
many: "%{count} Задач" many: "%{count} Задач"
other: "%{count} Задач" other: "%{count} Задач"
label_repository_new: Новое хранилище label_repository_new: New repository
field_repository_is_default: Хранилище по умолчанию field_repository_is_default: Main repository
label_copy_attachments: Копировать вложения label_copy_attachments: Copy attachments
label_item_position: "%{position}/%{count}" label_item_position: "%{position}/%{count}"
label_completed_versions: Завершенные версии label_completed_versions: Completed versions
text_project_identifier_info: Допускаются только строчные латинские буквы (a-z), цифры, тире и подчеркивания.<br />После сохранения идентификатор изменить нельзя. text_project_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
field_multiple: Множественные значения field_multiple: Multiple values
setting_commit_cross_project_ref: Разрешить ссылаться и исправлять задачи во всех остальных проектах setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed
text_issue_conflict_resolution_add_notes: Добавить мои примечания и отказаться от моих изменений text_issue_conflict_resolution_add_notes: Add my notes and discard my other changes
text_issue_conflict_resolution_overwrite: Применить мои изменения (все предыдущие замечания будут сохранены, но некоторые изменения могут быть перезаписаны) text_issue_conflict_resolution_overwrite: Apply my changes anyway (previous notes will be kept but some changes may be overwritten)
notice_issue_update_conflict: Кто-то изменил задачу, пока вы ее редактировали. notice_issue_update_conflict: The issue has been updated by an other user while you were editing it.
text_issue_conflict_resolution_cancel: Отменить мои изменения и показать задачу заново %{link} text_issue_conflict_resolution_cancel: Discard all my changes and redisplay %{link}
permission_manage_related_issues: Управление связанными задачами permission_manage_related_issues: Manage related issues
field_ldap_filter: Фильтр LDAP field_ldap_filter: LDAP filter
label_search_for_watchers: Найти наблюдателей label_search_for_watchers: Search for watchers to add
notice_account_deleted: "Ваша учетная запись полностью удалена" notice_account_deleted: "Ваша учетная запись полностью удалена"
setting_unsubscribe: "Разрешить пользователям удалять свои учетные записи" setting_unsubscribe: "Разрешить пользователям удалять свои учетные записи"
button_delete_my_account: "Удалить мою учетную запись" button_delete_my_account: "Удалить мою учетную запись"
text_account_destroy_confirmation: "Ваша учетная запись будет полностью удалена без возможности восстановления.\nВы уверены, что хотите продолжить?" text_account_destroy_confirmation: "Ваша учетная запись будет полностью удалена без возможности восстановления.\nВы уверены, что хотите продолжить?"
error_session_expired: Срок вашей сессии истек. Пожалуйста войдите еще раз error_session_expired: Your session has expired. Please login again.
text_session_expiration_settings: "Warning: changing these settings may expire the current sessions including yours." text_session_expiration_settings: "Warning: changing these settings may expire the current sessions including yours."
setting_session_lifetime: Максимальная продолжительность сессии setting_session_lifetime: Session maximum lifetime
setting_session_timeout: Таймут сессии setting_session_timeout: Session inactivity timeout
label_session_expiration: Срок истечения сессии label_session_expiration: Session expiration
+2 -2
View File
@@ -52,8 +52,8 @@ zh:
one: "大约一小时" one: "大约一小时"
other: "大约 %{count} 小时" other: "大约 %{count} 小时"
x_hours: x_hours:
one: "1 小时" one: "1 hour"
other: "%{count} 小时" other: "%{count} hours"
x_days: x_days:
one: "一天" one: "一天"
other: "%{count} 天" other: "%{count} 天"
-34
View File
@@ -4,40 +4,6 @@ Redmine - project management software
Copyright (C) 2006-2012 Jean-Philippe Lang Copyright (C) 2006-2012 Jean-Philippe Lang
http://www.redmine.org/ http://www.redmine.org/
== 2013-01-20 v1.4.7
* Patch for Rails vulnerability CVE-2013-0155
== 2013-01-09 v1.4.6
* Upgrade to Rails 2.3.15
* Defect #12409: Git: changesets aren't read after clear_changesets call
* Patch #12605: Norwegian translation for 1.4-stable update
* Patch #12614: Dutch translation
* Patch #12615: Russian translation
* Patch #12630: Russian "x_hours" translation
== 2012-11-17 v1.4.5
* Defect #10818: Running rake in test environment causes exception
* Defect #11192: Make repository identifier accept underscores
* Defect #11298: Issue API may not work on Ruby 1.9 in Redmine 1.4
* Defect #11307: Can't filter for negative numeric custom fields
* Defect #11365: Attachment description length is not validated
* Defect #11541: Version sharing is missing in the REST API
* Defect #11665: New document category is not saved properly
* Defect #11789: Edit section links broken with h5/h6 headings
* Defect #11966: 404 Error when switching mode in view revision differences in non-main repo
* Defect #12189: No tmp/pdf directory
* Defect #12196: "Page not found" on OK button in SCM "View all revisions" page
* Feature #11338: Exclude emails with auto-submitted => auto-generated
* Patch #9732: German translations
* Patch #11261: Simplified Chinese translation for configurable session lifetime and timeout
* Patch #11328: Fix Japanese mistranslation for 'label_language_based'
* Patch #11406: German translation for configurable session lifetime and timeout
* Patch #11448: Russian translation for 1.4-stable and 2.0-stable
* Patch #11600: Fix plural form of the abbreviation for hours in Brazilian Portuguese
== 2012-06-18 v1.4.4 == 2012-06-18 v1.4.4
* Defect #10688: PDF export from Wiki - Problems with tables * Defect #10688: PDF export from Wiki - Problems with tables
+1 -1
View File
@@ -4,7 +4,7 @@ module Redmine
module VERSION #:nodoc: module VERSION #:nodoc:
MAJOR = 1 MAJOR = 1
MINOR = 4 MINOR = 4
TINY = 7 TINY = 4
# Branch values: # Branch values:
# * official release: nil # * official release: nil
+1 -1
View File
@@ -29,7 +29,7 @@ module Redmine
end end
def method_missing(sym, *args, &block) def method_missing(sym, *args, &block)
if args.size == 1 && args.first.is_a?(::Time) if args.size == 1 && args.first.is_a?(Time)
__send__ sym, args.first.xmlschema, &block __send__ sym, args.first.xmlschema, &block
else else
super super
-4
View File
@@ -4,19 +4,16 @@ enumerations_001:
id: 1 id: 1
type: DocumentCategory type: DocumentCategory
active: true active: true
position: 1
enumerations_002: enumerations_002:
name: User documentation name: User documentation
id: 2 id: 2
type: DocumentCategory type: DocumentCategory
active: true active: true
position: 2
enumerations_003: enumerations_003:
name: Technical documentation name: Technical documentation
id: 3 id: 3
type: DocumentCategory type: DocumentCategory
active: true active: true
position: 3
enumerations_004: enumerations_004:
name: Low name: Low
id: 4 id: 4
@@ -95,4 +92,3 @@ enumerations_016:
id: 16 id: 16
type: DocumentCategory type: DocumentCategory
active: false active: false
position: 4
@@ -96,13 +96,8 @@ class AttachmentsControllerTest < ActionController::TestCase
end end
def test_save_diff_type def test_save_diff_type
user1 = User.find(1)
user1.pref[:diff_type] = nil
user1.preference.save
user = User.find(1)
assert_nil user.pref[:diff_type]
@request.session[:user_id] = 1 # admin @request.session[:user_id] = 1 # admin
user = User.find(1)
get :show, :id => 5 get :show, :id => 5
assert_response :success assert_response :success
assert_template 'diff' assert_template 'diff'
+4 -23
View File
@@ -18,9 +18,7 @@
require File.expand_path('../../test_helper', __FILE__) require File.expand_path('../../test_helper', __FILE__)
class DocumentsControllerTest < ActionController::TestCase class DocumentsControllerTest < ActionController::TestCase
fixtures :projects, :users, :roles, :members, :member_roles, fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :documents, :enumerations
:enabled_modules, :documents, :enumerations,
:groups_users, :attachments
def setup def setup
User.current = nil User.current = nil
@@ -97,16 +95,16 @@ LOREM
def test_create_with_one_attachment def test_create_with_one_attachment
ActionMailer::Base.deliveries.clear ActionMailer::Base.deliveries.clear
Setting.notified_events << 'document_added'
@request.session[:user_id] = 2 @request.session[:user_id] = 2
set_tmp_attachments_directory set_tmp_attachments_directory
with_settings :notified_events => %w(document_added) do post :create, :project_id => 'ecookbook',
post :create, :project_id => 'ecookbook',
:document => { :title => 'DocumentsControllerTest#test_post_new', :document => { :title => 'DocumentsControllerTest#test_post_new',
:description => 'This is a new document', :description => 'This is a new document',
:category_id => 2}, :category_id => 2},
:attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}} :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
end
assert_redirected_to '/projects/ecookbook/documents' assert_redirected_to '/projects/ecookbook/documents'
document = Document.find_by_title('DocumentsControllerTest#test_post_new') document = Document.find_by_title('DocumentsControllerTest#test_post_new')
@@ -126,23 +124,6 @@ LOREM
assert_template 'new' assert_template 'new'
end end
def test_create_non_default_category
@request.session[:user_id] = 2
category2 = Enumeration.find_by_name('User documentation')
category2.update_attributes(:is_default => true)
category1 = Enumeration.find_by_name('Uncategorized')
post :create,
:project_id => 'ecookbook',
:document => { :title => 'no default',
:description => 'This is a new document',
:category_id => category1.id }
assert_redirected_to '/projects/ecookbook/documents'
doc = Document.find_by_title('no default')
assert_not_nil doc
assert_equal category1.id, doc.category_id
assert_equal category1, doc.category
end
def test_edit def test_edit
@request.session[:user_id] = 2 @request.session[:user_id] = 2
get :edit, :id => 1 get :edit, :id => 1
+6 -6
View File
@@ -58,14 +58,13 @@ class FilesControllerTest < ActionController::TestCase
def test_create_file def test_create_file
set_tmp_attachments_directory set_tmp_attachments_directory
@request.session[:user_id] = 2 @request.session[:user_id] = 2
Setting.notified_events = ['file_added']
ActionMailer::Base.deliveries.clear ActionMailer::Base.deliveries.clear
with_settings :notified_events => %w(file_added) do assert_difference 'Attachment.count' do
assert_difference 'Attachment.count' do post :create, :project_id => 1, :version_id => '',
post :create, :project_id => 1, :version_id => '', :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
:attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}} assert_response :redirect
assert_response :redirect
end
end end
assert_redirected_to '/projects/ecookbook/files' assert_redirected_to '/projects/ecookbook/files'
a = Attachment.find(:first, :order => 'created_on DESC') a = Attachment.find(:first, :order => 'created_on DESC')
@@ -81,6 +80,7 @@ class FilesControllerTest < ActionController::TestCase
def test_create_version_file def test_create_version_file
set_tmp_attachments_directory set_tmp_attachments_directory
@request.session[:user_id] = 2 @request.session[:user_id] = 2
Setting.notified_events = ['file_added']
assert_difference 'Attachment.count' do assert_difference 'Attachment.count' do
post :create, :project_id => 1, :version_id => '2', post :create, :project_id => 1, :version_id => '2',
@@ -1305,7 +1305,6 @@ class IssuesControllerTest < ActionController::TestCase
:tag => 'input', :tag => 'input',
:attributes => {:type => 'file', :name => 'attachments[1][file]'} :attributes => {:type => 'file', :name => 'attachments[1][file]'}
} }
assert_select 'input[name=?][maxlength=255]', 'attachments[1][description]'
end end
def test_get_new_should_prefill_the_form_from_params def test_get_new_should_prefill_the_form_from_params
+2 -3
View File
@@ -91,12 +91,11 @@ class MessagesControllerTest < ActionController::TestCase
def test_post_new def test_post_new
@request.session[:user_id] = 2 @request.session[:user_id] = 2
ActionMailer::Base.deliveries.clear ActionMailer::Base.deliveries.clear
Setting.notified_events = ['message_posted']
with_settings :notified_events => %w(message_posted) do post :new, :board_id => 1,
post :new, :board_id => 1,
:message => { :subject => 'Test created message', :message => { :subject => 'Test created message',
:content => 'Message body'} :content => 'Message body'}
end
message = Message.find_by_subject('Test created message') message = Message.find_by_subject('Test created message')
assert_not_nil message assert_not_nil message
assert_redirected_to "/boards/1/topics/#{message.to_param}" assert_redirected_to "/boards/1/topics/#{message.to_param}"
+3 -4
View File
@@ -82,13 +82,12 @@ class NewsControllerTest < ActionController::TestCase
def test_post_create def test_post_create
ActionMailer::Base.deliveries.clear ActionMailer::Base.deliveries.clear
@request.session[:user_id] = 2 Setting.notified_events << 'news_added'
with_settings :notified_events => %w(news_added) do @request.session[:user_id] = 2
post :create, :project_id => 1, :news => { :title => 'NewsControllerTest', post :create, :project_id => 1, :news => { :title => 'NewsControllerTest',
:description => 'This is the description', :description => 'This is the description',
:summary => '' } :summary => '' }
end
assert_redirected_to '/projects/ecookbook/news' assert_redirected_to '/projects/ecookbook/news'
news = News.find_by_title('NewsControllerTest') news = News.find_by_title('NewsControllerTest')
@@ -53,6 +53,8 @@ class RepositoriesGitControllerTest < ActionController::TestCase
if @char_1.respond_to?(:force_encoding) if @char_1.respond_to?(:force_encoding)
@char_1.force_encoding('UTF-8') @char_1.force_encoding('UTF-8')
end end
Setting.default_language = 'en'
end end
def test_create_and_update def test_create_and_update
@@ -263,8 +265,6 @@ class RepositoriesGitControllerTest < ActionController::TestCase
end end
def test_diff def test_diff
assert_equal true, @repository.is_default
assert_nil @repository.identifier
assert_equal 0, @repository.changesets.count assert_equal 0, @repository.changesets.count
@repository.fetch_changesets @repository.fetch_changesets
@project.reload @project.reload
@@ -287,55 +287,26 @@ class RepositoriesGitControllerTest < ActionController::TestCase
end end
end end
def test_diff_with_rev_and_path
assert_equal 0, @repository.changesets.count
@repository.fetch_changesets
@project.reload
assert_equal NUM_REV, @repository.changesets.count
with_settings :diff_max_lines_displayed => 1000 do
# Full diff of changeset 2f9c0091
['inline', 'sbs'].each do |dt|
get :diff,
:id => PRJ_ID,
:rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7',
:path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param],
:type => dt
assert_response :success
assert_template 'diff'
# Line 22 removed
assert_tag :tag => 'th',
:content => '22',
:sibling => { :tag => 'td',
:attributes => { :class => /diff_out/ },
:content => /def remove/ }
assert_tag :tag => 'h2', :content => /2f9c0091/
end
end
end
def test_diff_truncated def test_diff_truncated
assert_equal 0, @repository.changesets.count assert_equal 0, @repository.changesets.count
@repository.fetch_changesets @repository.fetch_changesets
@project.reload @project.reload
assert_equal NUM_REV, @repository.changesets.count assert_equal NUM_REV, @repository.changesets.count
Setting.diff_max_lines_displayed = 5
with_settings :diff_max_lines_displayed => 5 do # Truncated diff of changeset 2f9c0091
# Truncated diff of changeset 2f9c0091 with_cache do
with_cache do get :diff, :id => PRJ_ID, :type => 'inline',
with_settings :default_language => 'en' do :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
get :diff, :id => PRJ_ID, :type => 'inline', assert_response :success
:rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7' assert @response.body.include?("... This diff was truncated")
assert_response :success
assert @response.body.include?("... This diff was truncated") Setting.default_language = 'fr'
end get :diff, :id => PRJ_ID, :type => 'inline',
with_settings :default_language => 'fr' do :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
get :diff, :id => PRJ_ID, :type => 'inline', assert_response :success
:rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7' assert ! @response.body.include?("... This diff was truncated")
assert_response :success assert @response.body.include?("... Ce diff")
assert ! @response.body.include?("... This diff was truncated")
assert @response.body.include?("... Ce diff")
end
end
end end
end end
@@ -355,55 +326,9 @@ class RepositoriesGitControllerTest < ActionController::TestCase
diff = assigns(:diff) diff = assigns(:diff)
assert_not_nil diff assert_not_nil diff
assert_tag :tag => 'h2', :content => /2f9c0091:61b685fb/ assert_tag :tag => 'h2', :content => /2f9c0091:61b685fb/
assert_tag :tag => "form",
:attributes => {
:action => "/projects/subproject1/repository/revisions/" +
"61b685fbe55ab05b5ac68402d5720c1a6ac973d1/diff"
}
assert_tag :tag => 'input',
:attributes => {
:id => "rev_to",
:name => "rev_to",
:type => "hidden",
:value => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
}
end end
end end
def test_diff_path_in_subrepo
repo = Repository::Git.create(
:project => @project,
:url => REPOSITORY_PATH,
:identifier => 'test-diff-path',
:path_encoding => 'ISO-8859-1'
);
assert repo
assert_equal false, repo.is_default
assert_equal 'test-diff-path', repo.identifier
get :diff,
:id => PRJ_ID,
:repository_id => 'test-diff-path',
:rev => '61b685fbe55ab05b',
:rev_to => '2f9c0091c754a91a',
:type => 'inline'
assert_response :success
assert_template 'diff'
diff = assigns(:diff)
assert_not_nil diff
assert_tag :tag => "form",
:attributes => {
:action => "/projects/subproject1/repository/test-diff-path/" +
"revisions/61b685fbe55ab05b/diff"
}
assert_tag :tag => 'input',
:attributes => {
:id => "rev_to",
:name => "rev_to",
:type => "hidden",
:value => '2f9c0091c754a91a'
}
end
def test_diff_latin_1 def test_diff_latin_1
if @ruby19_non_utf8_pass if @ruby19_non_utf8_pass
puts_ruby19_non_utf8_pass() puts_ruby19_non_utf8_pass()
@@ -435,13 +360,8 @@ class RepositoriesGitControllerTest < ActionController::TestCase
end end
def test_save_diff_type def test_save_diff_type
user1 = User.find(1)
user1.pref[:diff_type] = nil
user1.preference.save
user = User.find(1)
assert_nil user.pref[:diff_type]
@request.session[:user_id] = 1 # admin @request.session[:user_id] = 1 # admin
user = User.find(1)
get :diff, get :diff,
:id => PRJ_ID, :id => PRJ_ID,
:rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7' :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
@@ -547,21 +467,6 @@ class RepositoriesGitControllerTest < ActionController::TestCase
end end
end end
def test_revisions
assert_equal 0, @repository.changesets.count
@repository.fetch_changesets
@project.reload
assert_equal NUM_REV, @repository.changesets.count
get :revisions, :id => PRJ_ID
assert_response :success
assert_template 'revisions'
assert_tag :tag => 'form',
:attributes => {
:method => 'get',
:action => '/projects/subproject1/repository/revision'
}
end
def test_revision def test_revision
assert_equal 0, @repository.changesets.count assert_equal 0, @repository.changesets.count
@repository.fetch_changesets @repository.fetch_changesets
@@ -57,7 +57,6 @@ class SettingsControllerTest < ActionController::TestCase
assert !Setting.bcc_recipients? assert !Setting.bcc_recipients?
assert_equal %w(issue_added issue_updated news_added), Setting.notified_events assert_equal %w(issue_added issue_updated news_added), Setting.notified_events
assert_equal 'Test footer', Setting.emails_footer assert_equal 'Test footer', Setting.emails_footer
Setting.clear_cache
end end
def test_get_plugin_settings def test_get_plugin_settings
-4
View File
@@ -33,10 +33,6 @@ class SysControllerTest < ActionController::TestCase
Setting.enabled_scm = %w(Subversion Git) Setting.enabled_scm = %w(Subversion Git)
end end
def teardown
Setting.clear_cache
end
def test_projects_with_repository_enabled def test_projects_with_repository_enabled
get :projects get :projects
assert_response :success assert_response :success
-1
View File
@@ -25,7 +25,6 @@ class ApiTest::IssuesTest < ActionController::IntegrationTest
:member_roles, :member_roles,
:issues, :issues,
:issue_statuses, :issue_statuses,
:issue_relations,
:versions, :versions,
:trackers, :trackers,
:projects_trackers, :projects_trackers,
+9 -5
View File
@@ -103,11 +103,15 @@ class ApiTest::VersionsTest < ActionController::IntegrationTest
assert_response :success assert_response :success
assert_equal 'application/xml', @response.content_type assert_equal 'application/xml', @response.content_type
assert_select 'version' do assert_tag 'version',
assert_select 'id', :text => '2' :child => {
assert_select 'name', :text => '1.0' :tag => 'id',
assert_select 'sharing', :text => 'none' :content => '2',
end :sibling => {
:tag => 'name',
:content => '1.0'
}
}
end end
end end
-6
View File
@@ -75,12 +75,6 @@ class AttachmentTest < ActiveSupport::TestCase
end end
end end
def test_description_length_should_be_validated
a = Attachment.new(:description => 'a' * 300)
assert !a.save
assert_not_nil a.errors[:description]
end
def test_destroy def test_destroy
a = Attachment.new(:container => Issue.find(1), a = Attachment.new(:container => Issue.find(1),
:file => uploaded_test_file("testfile.txt", "text/plain"), :file => uploaded_test_file("testfile.txt", "text/plain"),
+1 -2
View File
@@ -179,8 +179,7 @@ class ChangesetTest < ActiveSupport::TestCase
end end
def test_commit_closing_a_subproject_issue def test_commit_closing_a_subproject_issue
with_settings :commit_fix_status_id => 5, :commit_fix_keywords => 'closes', with_settings :commit_fix_status_id => 5, :commit_fix_keywords => 'closes' do
:default_language => 'en' do
issue = Issue.find(5) issue = Issue.find(5)
assert !issue.closed? assert !issue.closed?
assert_difference 'Journal.count' do assert_difference 'Journal.count' do
+3 -4
View File
@@ -33,12 +33,11 @@ class CommentTest < ActiveSupport::TestCase
end end
def test_create_should_send_notification def test_create_should_send_notification
Setting.notified_events << 'news_comment_added'
Watcher.create!(:watchable => @news, :user => @jsmith) Watcher.create!(:watchable => @news, :user => @jsmith)
with_settings :notified_events => %w(news_comment_added) do assert_difference 'ActionMailer::Base.deliveries.size' do
assert_difference 'ActionMailer::Base.deliveries.size' do Comment.create!(:commented => @news, :author => @jsmith, :comments => "my comment")
Comment.create!(:commented => @news, :author => @jsmith, :comments => "my comment")
end
end end
end end
-12
View File
@@ -32,16 +32,4 @@ class DocumentCategoryTest < ActiveSupport::TestCase
def test_option_name def test_option_name
assert_equal :enumeration_doc_categories, DocumentCategory.new.option_name assert_equal :enumeration_doc_categories, DocumentCategory.new.option_name
end end
def test_default
assert_nil DocumentCategory.find(:first, :conditions => { :is_default => true })
e = Enumeration.find_by_name('Technical documentation')
e.update_attributes(:is_default => true)
assert_equal 3, DocumentCategory.default.id
end
def test_force_default
assert_nil DocumentCategory.find(:first, :conditions => { :is_default => true })
assert_equal 1, DocumentCategory.default.id
end
end end
+5 -9
View File
@@ -18,10 +18,7 @@
require File.expand_path('../../test_helper', __FILE__) require File.expand_path('../../test_helper', __FILE__)
class DocumentTest < ActiveSupport::TestCase class DocumentTest < ActiveSupport::TestCase
fixtures :projects, :enumerations, :documents, :attachments, fixtures :projects, :enumerations, :documents, :attachments
:enabled_modules,
:users, :members, :member_roles, :roles,
:groups_users
def test_create def test_create
doc = Document.new(:project => Project.find(1), :title => 'New document', :category => Enumeration.find_by_name('User documentation')) doc = Document.new(:project => Project.find(1), :title => 'New document', :category => Enumeration.find_by_name('User documentation'))
@@ -30,11 +27,10 @@ class DocumentTest < ActiveSupport::TestCase
def test_create_should_send_email_notification def test_create_should_send_email_notification
ActionMailer::Base.deliveries.clear ActionMailer::Base.deliveries.clear
Setting.notified_events << 'document_added'
with_settings :notified_events => %w(document_added) do doc = Document.new(:project => Project.find(1), :title => 'New document', :category => Enumeration.find_by_name('User documentation'))
doc = Document.new(:project => Project.find(1), :title => 'New document', :category => Enumeration.find_by_name('User documentation'))
assert doc.save assert doc.save
end
assert_equal 1, ActionMailer::Base.deliveries.size assert_equal 1, ActionMailer::Base.deliveries.size
end end
+8 -36
View File
@@ -107,53 +107,25 @@ class IssuesHelperTest < ActionView::TestCase
context "with a start_date attribute" do context "with a start_date attribute" do
should "format the current date" do should "format the current date" do
@detail = JournalDetail.new( @detail = JournalDetail.new(:property => 'attr', :old_value => '2010-01-01', :value => '2010-01-31', :prop_key => 'start_date')
:property => 'attr', assert_match "01/31/2010", show_detail(@detail, true)
:old_value => '2010-01-01',
:value => '2010-01-31',
:prop_key => 'start_date'
)
with_settings :date_format => '%m/%d/%Y' do
assert_match "01/31/2010", show_detail(@detail, true)
end
end end
should "format the old date" do should "format the old date" do
@detail = JournalDetail.new( @detail = JournalDetail.new(:property => 'attr', :old_value => '2010-01-01', :value => '2010-01-31', :prop_key => 'start_date')
:property => 'attr', assert_match "01/01/2010", show_detail(@detail, true)
:old_value => '2010-01-01',
:value => '2010-01-31',
:prop_key => 'start_date'
)
with_settings :date_format => '%m/%d/%Y' do
assert_match "01/01/2010", show_detail(@detail, true)
end
end end
end end
context "with a due_date attribute" do context "with a due_date attribute" do
should "format the current date" do should "format the current date" do
@detail = JournalDetail.new( @detail = JournalDetail.new(:property => 'attr', :old_value => '2010-01-01', :value => '2010-01-31', :prop_key => 'due_date')
:property => 'attr', assert_match "01/31/2010", show_detail(@detail, true)
:old_value => '2010-01-01',
:value => '2010-01-31',
:prop_key => 'due_date'
)
with_settings :date_format => '%m/%d/%Y' do
assert_match "01/31/2010", show_detail(@detail, true)
end
end end
should "format the old date" do should "format the old date" do
@detail = JournalDetail.new( @detail = JournalDetail.new(:property => 'attr', :old_value => '2010-01-01', :value => '2010-01-31', :prop_key => 'due_date')
:property => 'attr', assert_match "01/01/2010", show_detail(@detail, true)
:old_value => '2010-01-01',
:value => '2010-01-31',
:prop_key => 'due_date'
)
with_settings :date_format => '%m/%d/%Y' do
assert_match "01/01/2010", show_detail(@detail, true)
end
end end
end end
+1 -11
View File
@@ -18,17 +18,7 @@
require File.expand_path('../../test_helper', __FILE__) require File.expand_path('../../test_helper', __FILE__)
class IssueRelationTest < ActiveSupport::TestCase class IssueRelationTest < ActiveSupport::TestCase
fixtures :projects, fixtures :issue_relations, :issues
:users,
:roles,
:members,
:member_roles,
:issues,
:issue_statuses,
:issue_relations,
:enabled_modules,
:enumerations,
:trackers
def test_create def test_create
from = Issue.find(1) from = Issue.find(1)
+18 -27
View File
@@ -27,111 +27,102 @@ class JournalObserverTest < ActiveSupport::TestCase
# context: issue_updated notified_events # context: issue_updated notified_events
def test_create_should_send_email_notification_with_issue_updated def test_create_should_send_email_notification_with_issue_updated
Setting.notified_events = ['issue_updated']
issue = Issue.find(:first) issue = Issue.find(:first)
user = User.find(:first) user = User.find(:first)
journal = issue.init_journal(user, issue) journal = issue.init_journal(user, issue)
with_settings :notified_events => %w(issue_updated) do assert journal.save
assert journal.save
end
assert_equal 1, ActionMailer::Base.deliveries.size assert_equal 1, ActionMailer::Base.deliveries.size
end end
def test_create_should_not_send_email_notification_with_notify_set_to_false def test_create_should_not_send_email_notification_with_notify_set_to_false
Setting.notified_events = ['issue_updated']
issue = Issue.find(:first) issue = Issue.find(:first)
user = User.find(:first) user = User.find(:first)
journal = issue.init_journal(user, issue) journal = issue.init_journal(user, issue)
journal.notify = false journal.notify = false
with_settings :notified_events => %w(issue_updated) do assert journal.save
assert journal.save
end
assert_equal 0, ActionMailer::Base.deliveries.size assert_equal 0, ActionMailer::Base.deliveries.size
end end
def test_create_should_not_send_email_notification_without_issue_updated def test_create_should_not_send_email_notification_without_issue_updated
Setting.notified_events = []
issue = Issue.find(:first) issue = Issue.find(:first)
user = User.find(:first) user = User.find(:first)
journal = issue.init_journal(user, issue) journal = issue.init_journal(user, issue)
with_settings :notified_events => [] do assert journal.save
assert journal.save
end
assert_equal 0, ActionMailer::Base.deliveries.size assert_equal 0, ActionMailer::Base.deliveries.size
end end
# context: issue_note_added notified_events # context: issue_note_added notified_events
def test_create_should_send_email_notification_with_issue_note_added def test_create_should_send_email_notification_with_issue_note_added
Setting.notified_events = ['issue_note_added']
issue = Issue.find(:first) issue = Issue.find(:first)
user = User.find(:first) user = User.find(:first)
journal = issue.init_journal(user, issue) journal = issue.init_journal(user, issue)
journal.notes = 'This update has a note' journal.notes = 'This update has a note'
with_settings :notified_events => %w(issue_note_added) do assert journal.save
assert journal.save
end
assert_equal 1, ActionMailer::Base.deliveries.size assert_equal 1, ActionMailer::Base.deliveries.size
end end
def test_create_should_not_send_email_notification_without_issue_note_added def test_create_should_not_send_email_notification_without_issue_note_added
Setting.notified_events = []
issue = Issue.find(:first) issue = Issue.find(:first)
user = User.find(:first) user = User.find(:first)
journal = issue.init_journal(user, issue) journal = issue.init_journal(user, issue)
journal.notes = 'This update has a note' journal.notes = 'This update has a note'
with_settings :notified_events => [] do assert journal.save
assert journal.save
end
assert_equal 0, ActionMailer::Base.deliveries.size assert_equal 0, ActionMailer::Base.deliveries.size
end end
# context: issue_status_updated notified_events # context: issue_status_updated notified_events
def test_create_should_send_email_notification_with_issue_status_updated def test_create_should_send_email_notification_with_issue_status_updated
Setting.notified_events = ['issue_status_updated']
issue = Issue.find(:first) issue = Issue.find(:first)
user = User.find(:first) user = User.find(:first)
issue.init_journal(user, issue) issue.init_journal(user, issue)
issue.status = IssueStatus.last issue.status = IssueStatus.last
with_settings :notified_events => %w(issue_status_updated) do assert issue.save
assert issue.save
end
assert_equal 1, ActionMailer::Base.deliveries.size assert_equal 1, ActionMailer::Base.deliveries.size
end end
def test_create_should_not_send_email_notification_without_issue_status_updated def test_create_should_not_send_email_notification_without_issue_status_updated
Setting.notified_events = []
issue = Issue.find(:first) issue = Issue.find(:first)
user = User.find(:first) user = User.find(:first)
issue.init_journal(user, issue) issue.init_journal(user, issue)
issue.status = IssueStatus.last issue.status = IssueStatus.last
with_settings :notified_events => [] do assert issue.save
assert issue.save
end
assert_equal 0, ActionMailer::Base.deliveries.size assert_equal 0, ActionMailer::Base.deliveries.size
end end
# context: issue_priority_updated notified_events # context: issue_priority_updated notified_events
def test_create_should_send_email_notification_with_issue_priority_updated def test_create_should_send_email_notification_with_issue_priority_updated
Setting.notified_events = ['issue_priority_updated']
issue = Issue.find(:first) issue = Issue.find(:first)
user = User.find(:first) user = User.find(:first)
issue.init_journal(user, issue) issue.init_journal(user, issue)
issue.priority = IssuePriority.last issue.priority = IssuePriority.last
with_settings :notified_events => %w(issue_priority_updated) do assert issue.save
assert issue.save
end
assert_equal 1, ActionMailer::Base.deliveries.size assert_equal 1, ActionMailer::Base.deliveries.size
end end
def test_create_should_not_send_email_notification_without_issue_priority_updated def test_create_should_not_send_email_notification_without_issue_priority_updated
Setting.notified_events = []
issue = Issue.find(:first) issue = Issue.find(:first)
user = User.find(:first) user = User.find(:first)
issue.init_journal(user, issue) issue.init_journal(user, issue)
issue.priority = IssuePriority.last issue.priority = IssuePriority.last
with_settings :notified_events => [] do assert issue.save
assert issue.save
end
assert_equal 0, ActionMailer::Base.deliveries.size assert_equal 0, ActionMailer::Base.deliveries.size
end end
end end
+2 -8
View File
@@ -18,14 +18,8 @@
require File.expand_path('../../../../test_helper', __FILE__) require File.expand_path('../../../../test_helper', __FILE__)
class Redmine::Hook::ManagerTest < ActiveSupport::TestCase class Redmine::Hook::ManagerTest < ActiveSupport::TestCase
fixtures :projects, :users, :members, :member_roles, :roles,
:groups_users, fixtures :issues
:trackers, :projects_trackers,
:enabled_modules,
:versions,
:issue_statuses, :issue_categories, :issue_relations, :workflows,
:enumerations,
:issues
# Some hooks that are manually registered in these tests # Some hooks that are manually registered in these tests
class TestHook < Redmine::Hook::ViewListener; end class TestHook < Redmine::Hook::ViewListener; end
-18
View File
@@ -126,24 +126,6 @@ class Redmine::I18nTest < ActiveSupport::TestCase
end end
end end
def test_number_to_currency_for_each_language
valid_languages.each do |lang|
set_language_if_valid lang
assert_nothing_raised "#{lang} failure" do
number_to_currency(-1000.2)
end
end
end
def test_number_to_currency_default
set_language_if_valid 'bs'
assert_equal "KM -1000,20", number_to_currency(-1000.2)
set_language_if_valid 'de'
euro_sign = "\xe2\x82\xac"
euro_sign.force_encoding('UTF-8') if euro_sign.respond_to?(:force_encoding)
assert_equal "-1000,20 #{euro_sign}", number_to_currency(-1000.2)
end
def test_valid_languages def test_valid_languages
assert valid_languages.is_a?(Array) assert valid_languages.is_a?(Array)
assert valid_languages.first.is_a?(Symbol) assert valid_languages.first.is_a?(Symbol)
@@ -18,7 +18,6 @@
require File.expand_path('../../../../test_helper', __FILE__) require File.expand_path('../../../../test_helper', __FILE__)
class Redmine::SafeAttributesTest < ActiveSupport::TestCase class Redmine::SafeAttributesTest < ActiveSupport::TestCase
fixtures :users
class Base class Base
def attributes=(attrs) def attributes=(attrs)
@@ -10,6 +10,16 @@ begin
FELIX_HEX = "Felix Sch\xC3\xA4fer" FELIX_HEX = "Felix Sch\xC3\xA4fer"
CHAR_1_HEX = "\xc3\x9c" CHAR_1_HEX = "\xc3\x9c"
## Ruby uses ANSI api to fork a process on Windows.
## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
## and these are incompatible with ASCII.
## Git for Windows (msysGit) changed internal API from ANSI to Unicode in 1.7.10
## http://code.google.com/p/msysgit/issues/detail?id=80
## So, Latin-1 path tests fail on Japanese Windows
WINDOWS_PASS = (Redmine::Platform.mswin? &&
Redmine::Scm::Adapters::GitAdapter.client_version_above?([1, 7, 10]))
WINDOWS_SKIP_STR = "TODO: This test fails in Git for Windows above 1.7.10"
## Git, Mercurial and CVS path encodings are binary. ## Git, Mercurial and CVS path encodings are binary.
## Subversion supports URL encoding for path. ## Subversion supports URL encoding for path.
## Redmine Mercurial adapter and extension use URL encoding. ## Redmine Mercurial adapter and extension use URL encoding.
@@ -19,16 +29,6 @@ begin
JRUBY_SKIP_STR = "TODO: This test fails in JRuby" JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
if File.directory?(REPOSITORY_PATH) if File.directory?(REPOSITORY_PATH)
## Ruby uses ANSI api to fork a process on Windows.
## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
## and these are incompatible with ASCII.
## Git for Windows (msysGit) changed internal API from ANSI to Unicode in 1.7.10
## http://code.google.com/p/msysgit/issues/detail?id=80
## So, Latin-1 path tests fail on Japanese Windows
WINDOWS_PASS = (Redmine::Platform.mswin? &&
Redmine::Scm::Adapters::GitAdapter.client_version_above?([1, 7, 10]))
WINDOWS_SKIP_STR = "TODO: This test fails in Git for Windows above 1.7.10"
def setup def setup
adapter_class = Redmine::Scm::Adapters::GitAdapter adapter_class = Redmine::Scm::Adapters::GitAdapter
assert adapter_class assert adapter_class
+1 -6
View File
@@ -35,10 +35,6 @@ class MailHandlerTest < ActiveSupport::TestCase
Setting.notified_events = Redmine::Notifiable.all.collect(&:name) Setting.notified_events = Redmine::Notifiable.all.collect(&:name)
end end
def teardown
Setting.clear_cache
end
def test_add_issue def test_add_issue
ActionMailer::Base.deliveries.clear ActionMailer::Base.deliveries.clear
# This email contains: 'Project: onlinestore' # This email contains: 'Project: onlinestore'
@@ -367,8 +363,7 @@ class MailHandlerTest < ActiveSupport::TestCase
[ [
"X-Auto-Response-Suppress: OOF", "X-Auto-Response-Suppress: OOF",
"Auto-Submitted: auto-replied", "Auto-Submitted: auto-replied",
"Auto-Submitted: Auto-Replied", "Auto-Submitted: Auto-Replied"
"Auto-Submitted: auto-generated"
].each do |header| ].each do |header|
raw = IO.read(File.join(FIXTURES_PATH, 'ticket_on_given_project.eml')) raw = IO.read(File.join(FIXTURES_PATH, 'ticket_on_given_project.eml'))
raw = header + "\n" + raw raw = header + "\n" + raw
+2 -3
View File
@@ -29,11 +29,10 @@ class NewsTest < ActiveSupport::TestCase
def test_create_should_send_email_notification def test_create_should_send_email_notification
ActionMailer::Base.deliveries.clear ActionMailer::Base.deliveries.clear
Setting.notified_events << 'news_added'
news = Project.find(1).news.new(valid_news) news = Project.find(1).news.new(valid_news)
with_settings :notified_events => %w(news_added) do assert news.save
assert news.save
end
assert_equal 1, ActionMailer::Base.deliveries.size assert_equal 1, ActionMailer::Base.deliveries.size
end end
-31
View File
@@ -18,8 +18,6 @@
require File.expand_path('../../test_helper', __FILE__) require File.expand_path('../../test_helper', __FILE__)
class QueryTest < ActiveSupport::TestCase class QueryTest < ActiveSupport::TestCase
include Redmine::I18n
fixtures :projects, :enabled_modules, :users, :members, fixtures :projects, :enabled_modules, :users, :members,
:member_roles, :roles, :trackers, :issue_statuses, :member_roles, :roles, :trackers, :issue_statuses,
:issue_categories, :enumerations, :issues, :issue_categories, :enumerations, :issues,
@@ -180,20 +178,6 @@ class QueryTest < ActiveSupport::TestCase
assert_equal 2, issues.first.id assert_equal 2, issues.first.id
end end
def test_operator_is_on_integer_custom_field_should_accept_negative_value
f = IssueCustomField.create!(:name => 'filter', :field_format => 'int', :is_for_all => true, :is_filter => true)
CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => '7')
CustomValue.create!(:custom_field => f, :customized => Issue.find(2), :value => '-12')
CustomValue.create!(:custom_field => f, :customized => Issue.find(3), :value => '')
query = Query.new(:name => '_')
query.add_filter("cf_#{f.id}", '=', ['-12'])
assert query.valid?
issues = find_issues_with_query(query)
assert_equal 1, issues.size
assert_equal 2, issues.first.id
end
def test_operator_is_on_float_custom_field def test_operator_is_on_float_custom_field
f = IssueCustomField.create!(:name => 'filter', :field_format => 'float', :is_filter => true, :is_for_all => true) f = IssueCustomField.create!(:name => 'filter', :field_format => 'float', :is_filter => true, :is_for_all => true)
CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => '7.3') CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => '7.3')
@@ -207,20 +191,6 @@ class QueryTest < ActiveSupport::TestCase
assert_equal 2, issues.first.id assert_equal 2, issues.first.id
end end
def test_operator_is_on_float_custom_field_should_accept_negative_value
f = IssueCustomField.create!(:name => 'filter', :field_format => 'float', :is_filter => true, :is_for_all => true)
CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => '7.3')
CustomValue.create!(:custom_field => f, :customized => Issue.find(2), :value => '-12.7')
CustomValue.create!(:custom_field => f, :customized => Issue.find(3), :value => '')
query = Query.new(:name => '_')
query.add_filter("cf_#{f.id}", '=', ['-12.7'])
assert query.valid?
issues = find_issues_with_query(query)
assert_equal 1, issues.size
assert_equal 2, issues.first.id
end
def test_operator_is_on_multi_list_custom_field def test_operator_is_on_multi_list_custom_field
f = IssueCustomField.create!(:name => 'filter', :field_format => 'list', :is_filter => true, :is_for_all => true, f = IssueCustomField.create!(:name => 'filter', :field_format => 'list', :is_filter => true, :is_for_all => true,
:possible_values => ['value1', 'value2', 'value3'], :multiple => true) :possible_values => ['value1', 'value2', 'value3'], :multiple => true)
@@ -759,7 +729,6 @@ class QueryTest < ActiveSupport::TestCase
end end
def test_label_for def test_label_for
set_language_if_valid 'en'
q = Query.new q = Query.new
assert_equal 'Assignee', q.label_for('assigned_to_id') assert_equal 'Assignee', q.label_for('assigned_to_id')
end end
-34
View File
@@ -212,40 +212,6 @@ class RepositoryGitTest < ActiveSupport::TestCase
assert_equal h1, h2 assert_equal h1, h2
end end
def test_keep_extra_report_last_commit_in_clear_changesets
assert_nil @repository.extra_info
h = {}
h["extra_report_last_commit"] = "1"
@repository.merge_extra_info(h)
@repository.save
@project.reload
assert_equal 0, @repository.changesets.count
@repository.fetch_changesets
@project.reload
assert_equal NUM_REV, @repository.changesets.count
@repository.send(:clear_changesets)
assert_equal 1, @repository.extra_info.size
assert_equal "1", @repository.extra_info["extra_report_last_commit"]
end
def test_refetch_after_clear_changesets
assert_nil @repository.extra_info
assert_equal 0, @repository.changesets.count
@repository.fetch_changesets
@project.reload
assert_equal NUM_REV, @repository.changesets.count
@repository.send(:clear_changesets)
@project.reload
assert_equal 0, @repository.changesets.count
@repository.fetch_changesets
@project.reload
assert_equal NUM_REV, @repository.changesets.count
end
def test_parents def test_parents
assert_equal 0, @repository.changesets.count assert_equal 0, @repository.changesets.count
@repository.fetch_changesets @repository.fetch_changesets
+2 -12
View File
@@ -97,15 +97,6 @@ class RepositoryTest < ActiveSupport::TestCase
assert_equal [repository1, repository2], Project.find(3).repositories.sort assert_equal [repository1, repository2], Project.find(3).repositories.sort
end end
def test_identifier_should_accept_letters_digits_dashes_and_underscores
r = Repository::Subversion.new(
:project_id => 3,
:identifier => 'svn-123_45',
:url => 'file:///svn'
)
assert r.save
end
def test_destroy def test_destroy
changesets = Changeset.count(:all, :conditions => "repository_id = 10") changesets = Changeset.count(:all, :conditions => "repository_id = 10")
changes = Change.count(:all, :conditions => "repository_id = 10", changes = Change.count(:all, :conditions => "repository_id = 10",
@@ -148,6 +139,7 @@ class RepositoryTest < ActiveSupport::TestCase
def test_scan_changesets_for_issue_ids def test_scan_changesets_for_issue_ids
Setting.default_language = 'en' Setting.default_language = 'en'
Setting.notified_events = ['issue_added','issue_updated']
# choosing a status to apply to fix issues # choosing a status to apply to fix issues
Setting.commit_fix_status_id = IssueStatus.find( Setting.commit_fix_status_id = IssueStatus.find(
@@ -164,9 +156,7 @@ class RepositoryTest < ActiveSupport::TestCase
assert !fixed_issue.status.is_closed? assert !fixed_issue.status.is_closed?
old_status = fixed_issue.status old_status = fixed_issue.status
with_settings :notified_events => %w(issue_added issue_updated) do Repository.scan_changesets_for_issue_ids
Repository.scan_changesets_for_issue_ids
end
assert_equal [101, 102], Issue.find(3).changeset_ids assert_equal [101, 102], Issue.find(3).changeset_ids
# fixed issues # fixed issues
-4
View File
@@ -19,10 +19,6 @@ require File.expand_path('../../test_helper', __FILE__)
class SettingTest < ActiveSupport::TestCase class SettingTest < ActiveSupport::TestCase
def teardown
Setting.clear_cache
end
def test_read_default def test_read_default
assert_equal "Redmine", Setting.app_title assert_equal "Redmine", Setting.app_title
assert Setting.self_registration? assert Setting.self_registration?
+4 -8
View File
@@ -44,13 +44,11 @@ class WikiContentTest < ActiveSupport::TestCase
end end
def test_create_should_send_email_notification def test_create_should_send_email_notification
Setting.notified_events = ['wiki_content_added']
ActionMailer::Base.deliveries.clear ActionMailer::Base.deliveries.clear
page = WikiPage.new(:wiki => @wiki, :title => "A new page") page = WikiPage.new(:wiki => @wiki, :title => "A new page")
page.content = WikiContent.new(:text => "Content text", :author => User.find(1), :comments => "My comment") page.content = WikiContent.new(:text => "Content text", :author => User.find(1), :comments => "My comment")
assert page.save
with_settings :notified_events => %w(wiki_content_added) do
assert page.save
end
assert_equal 1, ActionMailer::Base.deliveries.size assert_equal 1, ActionMailer::Base.deliveries.size
end end
@@ -66,13 +64,11 @@ class WikiContentTest < ActiveSupport::TestCase
end end
def test_update_should_send_email_notification def test_update_should_send_email_notification
Setting.notified_events = ['wiki_content_updated']
ActionMailer::Base.deliveries.clear ActionMailer::Base.deliveries.clear
content = @page.content content = @page.content
content.text = "My new content" content.text = "My new content"
assert content.save
with_settings :notified_events => %w(wiki_content_updated) do
assert content.save
end
assert_equal 1, ActionMailer::Base.deliveries.size assert_equal 1, ActionMailer::Base.deliveries.size
end end
View File