Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
72716d0e01 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -18,7 +18,6 @@
|
||||
/public/plugin_assets
|
||||
/tmp/*
|
||||
/tmp/cache/*
|
||||
/tmp/pdf/*
|
||||
/tmp/sessions/*
|
||||
/tmp/sockets/*
|
||||
/tmp/test/*
|
||||
|
||||
@@ -20,7 +20,6 @@ public/dispatch.*
|
||||
public/plugin_assets
|
||||
tmp/*
|
||||
tmp/cache/*
|
||||
tmp/pdf/*
|
||||
tmp/sessions/*
|
||||
tmp/sockets/*
|
||||
tmp/test/*
|
||||
|
||||
8
Gemfile
8
Gemfile
@@ -1,6 +1,6 @@
|
||||
source :rubygems
|
||||
|
||||
gem "rails", "2.3.15"
|
||||
gem "rails", "2.3.14"
|
||||
gem "i18n", "~> 0.4.2"
|
||||
gem "coderay", "~> 1.0.6"
|
||||
gem "fastercsv", "~> 1.5.0", :platforms => [:mri_18, :mingw_18, :jruby]
|
||||
@@ -39,7 +39,7 @@ end
|
||||
|
||||
platforms :mri_18, :mingw_18 do
|
||||
group :mysql do
|
||||
gem "mysql", "~> 2.8.1"
|
||||
gem "mysql"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -71,10 +71,8 @@ end
|
||||
|
||||
group :test do
|
||||
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 "mocha", "0.12.3"
|
||||
gem "mocha"
|
||||
end
|
||||
|
||||
local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
|
||||
|
||||
@@ -799,7 +799,7 @@ module ApplicationHelper
|
||||
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)
|
||||
return unless options[:edit_section_links]
|
||||
@@ -870,8 +870,6 @@ module ApplicationHelper
|
||||
# Renders the TOC with given headings
|
||||
def replace_toc(text, headings)
|
||||
text.gsub!(TOC_RE) do
|
||||
# Keep only the 4 first levels
|
||||
headings = headings.select{|level, anchor, item| level <= 4}
|
||||
if headings.empty?
|
||||
''
|
||||
else
|
||||
|
||||
@@ -24,7 +24,6 @@ class Attachment < ActiveRecord::Base
|
||||
validates_presence_of :filename, :author
|
||||
validates_length_of :filename, :maximum => 255
|
||||
validates_length_of :disk_filename, :maximum => 255
|
||||
validates_length_of :description, :maximum => 255, :allow_blank => true
|
||||
validate :validate_max_file_size
|
||||
|
||||
acts_as_event :title => :filename,
|
||||
|
||||
@@ -42,9 +42,7 @@ class Document < ActiveRecord::Base
|
||||
def initialize(attributes=nil, *args)
|
||||
super
|
||||
if new_record?
|
||||
# Rails3 use this instead
|
||||
# self.category ||= DocumentCategory.default
|
||||
self.category_id = DocumentCategory.default.id if self.category_id == 0
|
||||
self.category ||= DocumentCategory.default
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -31,12 +31,4 @@ class DocumentCategory < Enumeration
|
||||
def transfer_relations(to)
|
||||
documents.update_all("category_id = #{to.id}")
|
||||
end
|
||||
|
||||
def self.default
|
||||
d = super
|
||||
if d.nil?
|
||||
d = find(:first)
|
||||
end
|
||||
d
|
||||
end
|
||||
end
|
||||
|
||||
@@ -44,8 +44,8 @@ class MailHandler < ActionMailer::Base
|
||||
|
||||
cattr_accessor :ignored_emails_headers
|
||||
@@ignored_emails_headers = {
|
||||
'X-Auto-Response-Suppress' => 'oof',
|
||||
'Auto-Submitted' => /^auto-/
|
||||
'X-Auto-Response-Suppress' => 'OOF',
|
||||
'Auto-Submitted' => 'auto-replied'
|
||||
}
|
||||
|
||||
# Processes incoming emails
|
||||
@@ -63,14 +63,11 @@ class MailHandler < ActionMailer::Base
|
||||
# Ignore auto generated emails
|
||||
self.class.ignored_emails_headers.each do |key, ignored_value|
|
||||
value = email.header_string(key)
|
||||
if value
|
||||
value = value.to_s.downcase
|
||||
if (ignored_value.is_a?(Regexp) && value.match(ignored_value)) || value == ignored_value
|
||||
if logger && logger.info
|
||||
logger.info "MailHandler: ignoring email with #{key}:#{value} header"
|
||||
end
|
||||
return false
|
||||
if value && value.to_s.downcase == ignored_value.downcase
|
||||
if logger && logger.info
|
||||
logger.info "MailHandler: ignoring email with #{key}:#{value} header"
|
||||
end
|
||||
return false
|
||||
end
|
||||
end
|
||||
@user = User.find_by_mail(sender_email) if sender_email.present?
|
||||
|
||||
@@ -174,9 +174,9 @@ class Query < ActiveRecord::Base
|
||||
if values_for(field)
|
||||
case type_for(field)
|
||||
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
|
||||
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
|
||||
case operator_for(field)
|
||||
when "=", ">=", "<=", "><"
|
||||
|
||||
@@ -37,8 +37,8 @@ class Repository < ActiveRecord::Base
|
||||
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_exclusion_of :identifier, :in => %w(show entry raw changes annotate diff show stats graph)
|
||||
# donwcase letters, digits, dashes, underscores but not digits only
|
||||
validates_format_of :identifier, :with => /^(?!\d+$)[a-z0-9\-_]*$/, :allow_blank => true
|
||||
# donwcase letters, digits, dashes but not digits only
|
||||
validates_format_of :identifier, :with => /^(?!\d+$)[a-z0-9\-]*$/, :allow_blank => true
|
||||
# Checks if the SCM is enabled when creating a repository
|
||||
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 #{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}")
|
||||
clear_extra_info_of_changesets
|
||||
end
|
||||
|
||||
def clear_extra_info_of_changesets
|
||||
end
|
||||
end
|
||||
|
||||
@@ -255,15 +255,4 @@ class Repository::Git < Repository
|
||||
:order => 'committed_on DESC'
|
||||
)
|
||||
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
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<span>
|
||||
<%= 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)))}');" -%>
|
||||
<%= 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))) %>
|
||||
</span>
|
||||
</span>
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
<h2><%= l(:label_revision) %> <%= @diff_format_revisions %> <%=h @path %></h2>
|
||||
|
||||
<!-- Choose view type -->
|
||||
<% form_tag({:action => 'diff', :id => @project,
|
||||
:repository_id => @repository.identifier_param,
|
||||
:path => to_path_param(@path), :rev => @rev}, :method => 'get') do %>
|
||||
<% form_tag({:path => to_path_param(@path)}, :method => 'get') do %>
|
||||
<%= hidden_field_tag('rev', params[:rev]) if params[:rev] %>
|
||||
<%= hidden_field_tag('rev_to', params[:rev_to]) if params[:rev_to] %>
|
||||
<p>
|
||||
<label><%= l(:label_view_diff) %></label>
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
<div class="contextual">
|
||||
<% form_tag(
|
||||
{:action => 'revision', :id => @project,
|
||||
:repository_id => @repository.identifier_param},
|
||||
:method => :get
|
||||
:repository_id => @repository.identifier_param}
|
||||
) do %>
|
||||
<%= l(:label_revision) %>: <%= text_field_tag 'rev', @rev, :size => 8 %>
|
||||
<%= submit_tag 'OK' %>
|
||||
|
||||
@@ -8,7 +8,6 @@ api.array :versions, api_meta(:total_count => @versions.size) do
|
||||
api.description version.description
|
||||
api.status version.status
|
||||
api.due_date version.effective_date
|
||||
api.sharing version.sharing
|
||||
|
||||
render_api_custom_values version.custom_field_values, api
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ api.version do
|
||||
api.description @version.description
|
||||
api.status @version.status
|
||||
api.due_date @version.effective_date
|
||||
api.sharing @version.sharing
|
||||
|
||||
render_api_custom_values @version.custom_field_values, api
|
||||
|
||||
|
||||
@@ -115,3 +115,40 @@ module ActionController
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# CVE-2012-2695
|
||||
# https://groups.google.com/group/rubyonrails-security/browse_thread/thread/9782f44c4540cf59
|
||||
module ActiveRecord
|
||||
class Base
|
||||
class << self
|
||||
def sanitize_sql_hash_for_conditions(attrs, default_table_name = quoted_table_name, top_level = true)
|
||||
attrs = expand_hash_conditions_for_aggregates(attrs)
|
||||
|
||||
conditions = attrs.map do |attr, value|
|
||||
table_name = default_table_name
|
||||
|
||||
if not value.is_a?(Hash)
|
||||
attr = attr.to_s
|
||||
|
||||
# Extract table name from qualified attribute names.
|
||||
if attr.include?('.') and top_level
|
||||
attr_table_name, attr = attr.split('.', 2)
|
||||
attr_table_name = connection.quote_table_name(attr_table_name)
|
||||
else
|
||||
attr_table_name = table_name
|
||||
end
|
||||
|
||||
attribute_condition("#{attr_table_name}.#{connection.quote_column_name(attr)}", value)
|
||||
elsif top_level
|
||||
sanitize_sql_hash_for_conditions(value, connection.quote_table_name(attr.to_s), false)
|
||||
else
|
||||
raise ActiveRecord::StatementInvalid
|
||||
end
|
||||
end.join(' AND ')
|
||||
|
||||
replace_bind_variables(conditions, expand_range_bind_variables(attrs.values))
|
||||
end
|
||||
alias_method :sanitize_sql_hash, :sanitize_sql_hash_for_conditions
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1019,8 +1019,8 @@ de:
|
||||
description_date_from: Startdatum eintragen
|
||||
description_date_to: Enddatum eintragen
|
||||
|
||||
label_parent_revision: Vorgänger
|
||||
label_child_revision: Nachfolger
|
||||
label_parent_revision: Parent
|
||||
label_child_revision: Child
|
||||
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
|
||||
button_edit_section: Diesen Bereich bearbeiten
|
||||
@@ -1052,8 +1052,8 @@ de:
|
||||
setting_unsubscribe: Erlaubt Benutzern das eigene Benutzerkonto zu 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.
|
||||
error_session_expired: Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.
|
||||
text_session_expiration_settings: "Achtung: Änderungen können aktuelle Sitzungen beenden, Ihre eingeschlossen!"
|
||||
setting_session_lifetime: Längste Dauer einer Sitzung
|
||||
setting_session_timeout: Zeitüberschreitung bei Inaktivität
|
||||
label_session_expiration: Ende einer Sitzung
|
||||
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."
|
||||
setting_session_lifetime: Session maximum lifetime
|
||||
setting_session_timeout: Session inactivity timeout
|
||||
label_session_expiration: Session expiration
|
||||
|
||||
@@ -761,7 +761,7 @@ ja:
|
||||
label_week: 週
|
||||
label_date_from: "日付指定: "
|
||||
label_date_to: から
|
||||
label_language_based: ユーザの言語の設定に従う
|
||||
label_language_based: 既定の言語の設定に従う
|
||||
label_sort_by: "並び替え %{value}"
|
||||
label_send_test_email: テストメールを送信
|
||||
label_feeds_access_key: RSSアクセスキー
|
||||
|
||||
@@ -49,7 +49,7 @@ nl:
|
||||
one: "ongeveer 1 uur"
|
||||
other: "ongeveer %{count} uren"
|
||||
x_hours:
|
||||
one: "1 uur"
|
||||
one: "1 hour"
|
||||
other: "%{count} hours"
|
||||
x_days:
|
||||
one: "1 dag"
|
||||
@@ -990,37 +990,34 @@ nl:
|
||||
description_all_columns: Alle kolommen
|
||||
button_export: Exporteren
|
||||
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})
|
||||
notice_failed_to_save_time_entries: "Opslaan gefaald voor %{count} tijdsnotatie(s) van %{total} geselecteerde: %{ids}."
|
||||
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}."
|
||||
label_x_issues:
|
||||
zero: 0 incidenten
|
||||
one: 1 incidenten
|
||||
other: "%{count} incidenten"
|
||||
label_repository_new: Nieuw repository
|
||||
field_repository_is_default: Hoofd repository
|
||||
label_copy_attachments: Copieer bijlage(n)
|
||||
zero: 0 issue
|
||||
one: 1 issue
|
||||
other: "%{count} issues"
|
||||
label_repository_new: New repository
|
||||
field_repository_is_default: Main repository
|
||||
label_copy_attachments: Copy attachments
|
||||
label_item_position: "%{position}/%{count}"
|
||||
label_completed_versions: Versies compleet
|
||||
field_multiple: Meerdere waardes
|
||||
setting_commit_cross_project_ref: Sta toe om incidenten van alle projecten te refereren en oplossen
|
||||
text_issue_conflict_resolution_add_notes: Voeg mijn notities toe en annuleer andere wijzigingen
|
||||
text_issue_conflict_resolution_overwrite: Voeg mijn wijzigingen alsnog toe (voorgaande notities worden bewaard, maar sommige kunnen overschreden worden)
|
||||
notice_issue_update_conflict: Dit incident is reeds geupdate door een andere gebruiker terwijl jij bezig was
|
||||
text_issue_conflict_resolution_cancel: Annuleer mijn wijzigingen en geef pagina opnieuw weer %{link}
|
||||
permission_manage_related_issues: Beheer gerelateerde incidenten
|
||||
|
||||
label_completed_versions: Completed versions
|
||||
field_multiple: Multiple values
|
||||
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_overwrite: Apply my changes anyway (previous notes will be kept but some changes may be overwritten)
|
||||
notice_issue_update_conflict: The issue has been updated by an other user while you were editing it.
|
||||
text_issue_conflict_resolution_cancel: Discard all my changes and redisplay %{link}
|
||||
permission_manage_related_issues: Manage related issues
|
||||
field_ldap_filter: LDAP filter
|
||||
|
||||
label_search_for_watchers: Zoek om monitoorders toe te voegen
|
||||
notice_account_deleted: Uw account is permanent verwijderd
|
||||
setting_unsubscribe: Sta gebruikers toe hun eigen account te verwijderen
|
||||
button_delete_my_account: Verwijder mijn account
|
||||
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Weet u zeker dat u door wilt gaan?
|
||||
Uw account wordt permanent verwijderd zonder mogelijkheid deze te heractiveren.
|
||||
error_session_expired: Uw sessie is verlopen. U dient opnieuw in te loggen.
|
||||
text_session_expiration_settings: "Waarschuwing: door deze instelling te wijzigen kan sessies laten verlopen inclusief de uwe"
|
||||
setting_session_lifetime: Maximale sessieduur
|
||||
setting_session_timeout: Sessie inactiviteit timeout
|
||||
label_session_expiration: Sessie verlopen
|
||||
Are you sure you want to proceed?
|
||||
Your account will be permanently deleted, with no way to reactivate it.
|
||||
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."
|
||||
setting_session_lifetime: Session maximum lifetime
|
||||
setting_session_timeout: Session inactivity timeout
|
||||
label_session_expiration: Session expiration
|
||||
|
||||
@@ -971,61 +971,61 @@
|
||||
setting_issue_group_assignment: Tillat tildeling av saker til grupper
|
||||
label_diff: diff
|
||||
|
||||
description_query_sort_criteria_direction: Sorteringsretning
|
||||
description_query_sort_criteria_direction: Sort direction
|
||||
description_project_scope: Search scope
|
||||
description_filter: Filter
|
||||
description_user_mail_notification: Mail notification settings
|
||||
description_date_from: Oppgi startdato
|
||||
description_message_content: Meldingsinnhold
|
||||
description_available_columns: Tilgjengelige kolonner
|
||||
description_date_range_interval: Velg datointervall ved å spesifisere start- og sluttdato
|
||||
description_date_from: Enter start date
|
||||
description_message_content: Message content
|
||||
description_available_columns: Available Columns
|
||||
description_date_range_interval: Choose range by selecting start and end date
|
||||
description_issue_category_reassign: Choose issue category
|
||||
description_search: Søkefelt
|
||||
description_search: Searchfield
|
||||
description_notes: Notes
|
||||
description_date_range_list: Choose range from list
|
||||
description_choose_project: Prosjekter
|
||||
description_date_to: Oppgi sluttdato
|
||||
description_choose_project: Projects
|
||||
description_date_to: Enter end date
|
||||
description_query_sort_criteria_attribute: Sort attribute
|
||||
description_wiki_subpages_reassign: Velg ny overordnet side
|
||||
description_selected_columns: Valgte kolonner
|
||||
label_parent_revision: Overordnet
|
||||
label_child_revision: Underordnet
|
||||
description_wiki_subpages_reassign: Choose new parent page
|
||||
description_selected_columns: Selected Columns
|
||||
label_parent_revision: Parent
|
||||
label_child_revision: Child
|
||||
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
|
||||
button_edit_section: Rediger denne seksjonen
|
||||
setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
|
||||
button_edit_section: Edit this section
|
||||
setting_repositories_encodings: Attachments and repositories encodings
|
||||
description_all_columns: Alle kolonnene
|
||||
button_export: Eksporter
|
||||
label_export_options: "%{export_format} eksportvalg"
|
||||
error_attachment_too_big: Filen overstiger maksimum filstørrelse (%{max_size}) og kan derfor ikke lastes opp
|
||||
description_all_columns: All Columns
|
||||
button_export: Export
|
||||
label_export_options: "%{export_format} export options"
|
||||
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}."
|
||||
label_x_issues:
|
||||
zero: 0 sak
|
||||
one: 1 sak
|
||||
other: "%{count} saker"
|
||||
label_repository_new: Nytt depot
|
||||
field_repository_is_default: Hoveddepot
|
||||
label_copy_attachments: Kopier vedlegg
|
||||
label_repository_new: New repository
|
||||
field_repository_is_default: Main repository
|
||||
label_copy_attachments: Copy attachments
|
||||
label_item_position: "%{position}/%{count}"
|
||||
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.
|
||||
field_multiple: Flere verdier
|
||||
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: Multiple values
|
||||
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_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.
|
||||
text_issue_conflict_resolution_cancel: Forkast alle endringen mine og vis %{link} på nytt
|
||||
notice_issue_update_conflict: The issue has been updated by an other user while you were editing it.
|
||||
text_issue_conflict_resolution_cancel: Discard all my changes and redisplay %{link}
|
||||
permission_manage_related_issues: Manage related issues
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Din konto er ugjenkallelig slettet.
|
||||
setting_unsubscribe: Tillat brukere å slette sin egen konto
|
||||
button_delete_my_account: Slett kontoen min
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Er du sikker på at du ønsker å fortsette?
|
||||
Kontoen din vil bli ugjenkallelig slettet uten mulighet for å reaktiveres igjen.
|
||||
error_session_expired: Økten har gått ut på tid. Vennligst logg på igjen.
|
||||
text_session_expiration_settings: "Advarsel: ved å endre disse innstillingene kan aktive økter gå ut på tid, inkludert din egen."
|
||||
setting_session_lifetime: Øktenes makslengde
|
||||
setting_session_timeout: Økten er avsluttet på grunn av inaktivitet
|
||||
label_session_expiration: Økten er avsluttet
|
||||
Are you sure you want to proceed?
|
||||
Your account will be permanently deleted, with no way to reactivate it.
|
||||
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."
|
||||
setting_session_lifetime: Session maximum lifetime
|
||||
setting_session_timeout: Session inactivity timeout
|
||||
label_session_expiration: Session expiration
|
||||
|
||||
@@ -18,10 +18,10 @@ pt-BR:
|
||||
|
||||
time:
|
||||
formats:
|
||||
default: "%A, %d de %B de %Y, %H:%M h"
|
||||
time: "%H:%M h"
|
||||
short: "%d/%m, %H:%M h"
|
||||
long: "%A, %d de %B de %Y, %H:%M h"
|
||||
default: "%A, %d de %B de %Y, %H:%M hs"
|
||||
time: "%H:%M hs"
|
||||
short: "%d/%m, %H:%M hs"
|
||||
long: "%A, %d de %B de %Y, %H:%M hs"
|
||||
only_second: "%S"
|
||||
datetime:
|
||||
formats:
|
||||
|
||||
@@ -117,8 +117,8 @@ ru:
|
||||
many: "около %{count} часов"
|
||||
other: "около %{count} часа"
|
||||
x_hours:
|
||||
one: "1 час"
|
||||
other: "%{count} часов"
|
||||
one: "1 hour"
|
||||
other: "%{count} hours"
|
||||
x_days:
|
||||
one: "%{count} день"
|
||||
few: "%{count} дня"
|
||||
@@ -1092,11 +1092,11 @@ ru:
|
||||
notice_issue_successful_create: Задача %{id} создана.
|
||||
label_between: между
|
||||
setting_issue_group_assignment: Разрешить назначение задач группам пользователей
|
||||
label_diff: Разница(diff)
|
||||
label_diff: diff
|
||||
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_filter: Фильтр
|
||||
description_filter: Filter
|
||||
description_user_mail_notification: Mail notification settings
|
||||
description_date_from: Enter start date
|
||||
description_message_content: Message content
|
||||
@@ -1104,51 +1104,51 @@ ru:
|
||||
description_date_range_interval: Choose range by selecting start and end date
|
||||
description_issue_category_reassign: Choose issue category
|
||||
description_search: Searchfield
|
||||
description_notes: Примечания
|
||||
description_date_range_list: Выберите диапазон из списка
|
||||
description_choose_project: Проекты
|
||||
description_date_to: Введите дату выполнения
|
||||
description_query_sort_criteria_attribute: Критерий сортировки
|
||||
description_wiki_subpages_reassign: Выбрать новую родительскую страницу
|
||||
description_selected_columns: Выбранные столбцы
|
||||
label_parent_revision: Родительский
|
||||
label_child_revision: Дочерний
|
||||
error_scm_annotate_big_text_file: Комментарий невозможен из-за превышения максимального размера текстового файла.
|
||||
setting_default_issue_start_date_to_creation_date: Использовать текущую дату в качестве даты начала для новых задач
|
||||
button_edit_section: Редактировать эту секцию
|
||||
setting_repositories_encodings: Кодировка вложений и хранилищ
|
||||
description_all_columns: Все столбцы
|
||||
button_export: Экспорт
|
||||
label_export_options: "%{export_format} параметры экспорта"
|
||||
error_attachment_too_big: Этот файл нельзя загрузить из-за превышения максимального размера файла (%{max_size})
|
||||
notice_failed_to_save_time_entries: "Невозможно сохранить %{count} затраченное время для %{total} выбранных: %{ids}."
|
||||
description_notes: Notes
|
||||
description_date_range_list: Choose range from list
|
||||
description_choose_project: Projects
|
||||
description_date_to: Enter end date
|
||||
description_query_sort_criteria_attribute: Sort attribute
|
||||
description_wiki_subpages_reassign: Choose new parent page
|
||||
description_selected_columns: Selected Columns
|
||||
label_parent_revision: Parent
|
||||
label_child_revision: Child
|
||||
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: Use current date as start date for new issues
|
||||
button_edit_section: Edit this section
|
||||
setting_repositories_encodings: Attachments and repositories encodings
|
||||
description_all_columns: All Columns
|
||||
button_export: Export
|
||||
label_export_options: "%{export_format} export options"
|
||||
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}."
|
||||
label_x_issues:
|
||||
zero: 0 Задач
|
||||
one: 1 Задача
|
||||
few: "%{count} Задач"
|
||||
many: "%{count} Задач"
|
||||
other: "%{count} Задач"
|
||||
label_repository_new: Новое хранилище
|
||||
field_repository_is_default: Хранилище по умолчанию
|
||||
label_copy_attachments: Копировать вложения
|
||||
label_repository_new: New repository
|
||||
field_repository_is_default: Main repository
|
||||
label_copy_attachments: Copy attachments
|
||||
label_item_position: "%{position}/%{count}"
|
||||
label_completed_versions: Завершенные версии
|
||||
text_project_identifier_info: Допускаются только строчные латинские буквы (a-z), цифры, тире и подчеркивания.<br />После сохранения идентификатор изменить нельзя.
|
||||
field_multiple: Множественные значения
|
||||
setting_commit_cross_project_ref: Разрешить ссылаться и исправлять задачи во всех остальных проектах
|
||||
text_issue_conflict_resolution_add_notes: Добавить мои примечания и отказаться от моих изменений
|
||||
text_issue_conflict_resolution_overwrite: Применить мои изменения (все предыдущие замечания будут сохранены, но некоторые изменения могут быть перезаписаны)
|
||||
notice_issue_update_conflict: Кто-то изменил задачу, пока вы ее редактировали.
|
||||
text_issue_conflict_resolution_cancel: Отменить мои изменения и показать задачу заново %{link}
|
||||
permission_manage_related_issues: Управление связанными задачами
|
||||
field_ldap_filter: Фильтр LDAP
|
||||
label_search_for_watchers: Найти наблюдателей
|
||||
label_completed_versions: Completed versions
|
||||
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: Multiple values
|
||||
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_overwrite: Apply my changes anyway (previous notes will be kept but some changes may be overwritten)
|
||||
notice_issue_update_conflict: The issue has been updated by an other user while you were editing it.
|
||||
text_issue_conflict_resolution_cancel: Discard all my changes and redisplay %{link}
|
||||
permission_manage_related_issues: Manage related issues
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: "Ваша учетная запись полностью удалена"
|
||||
setting_unsubscribe: "Разрешить пользователям удалять свои учетные записи"
|
||||
button_delete_my_account: "Удалить мою учетную запись"
|
||||
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."
|
||||
setting_session_lifetime: Максимальная продолжительность сессии
|
||||
setting_session_timeout: Таймут сессии
|
||||
label_session_expiration: Срок истечения сессии
|
||||
setting_session_lifetime: Session maximum lifetime
|
||||
setting_session_timeout: Session inactivity timeout
|
||||
label_session_expiration: Session expiration
|
||||
|
||||
@@ -52,8 +52,8 @@ zh:
|
||||
one: "大约一小时"
|
||||
other: "大约 %{count} 小时"
|
||||
x_hours:
|
||||
one: "1 小时"
|
||||
other: "%{count} 小时"
|
||||
one: "1 hour"
|
||||
other: "%{count} hours"
|
||||
x_days:
|
||||
one: "一天"
|
||||
other: "%{count} 天"
|
||||
|
||||
@@ -4,36 +4,6 @@ Redmine - project management software
|
||||
Copyright (C) 2006-2012 Jean-Philippe Lang
|
||||
http://www.redmine.org/
|
||||
|
||||
== 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
|
||||
|
||||
* Defect #10688: PDF export from Wiki - Problems with tables
|
||||
|
||||
@@ -4,7 +4,7 @@ module Redmine
|
||||
module VERSION #:nodoc:
|
||||
MAJOR = 1
|
||||
MINOR = 4
|
||||
TINY = 6
|
||||
TINY = 4
|
||||
|
||||
# Branch values:
|
||||
# * official release: nil
|
||||
|
||||
@@ -29,7 +29,7 @@ module Redmine
|
||||
end
|
||||
|
||||
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
|
||||
else
|
||||
super
|
||||
|
||||
4
test/fixtures/enumerations.yml
vendored
4
test/fixtures/enumerations.yml
vendored
@@ -4,19 +4,16 @@ enumerations_001:
|
||||
id: 1
|
||||
type: DocumentCategory
|
||||
active: true
|
||||
position: 1
|
||||
enumerations_002:
|
||||
name: User documentation
|
||||
id: 2
|
||||
type: DocumentCategory
|
||||
active: true
|
||||
position: 2
|
||||
enumerations_003:
|
||||
name: Technical documentation
|
||||
id: 3
|
||||
type: DocumentCategory
|
||||
active: true
|
||||
position: 3
|
||||
enumerations_004:
|
||||
name: Low
|
||||
id: 4
|
||||
@@ -95,4 +92,3 @@ enumerations_016:
|
||||
id: 16
|
||||
type: DocumentCategory
|
||||
active: false
|
||||
position: 4
|
||||
|
||||
@@ -96,13 +96,8 @@ class AttachmentsControllerTest < ActionController::TestCase
|
||||
end
|
||||
|
||||
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
|
||||
user = User.find(1)
|
||||
get :show, :id => 5
|
||||
assert_response :success
|
||||
assert_template 'diff'
|
||||
|
||||
@@ -18,9 +18,7 @@
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class DocumentsControllerTest < ActionController::TestCase
|
||||
fixtures :projects, :users, :roles, :members, :member_roles,
|
||||
:enabled_modules, :documents, :enumerations,
|
||||
:groups_users, :attachments
|
||||
fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :documents, :enumerations
|
||||
|
||||
def setup
|
||||
User.current = nil
|
||||
@@ -97,16 +95,16 @@ LOREM
|
||||
|
||||
def test_create_with_one_attachment
|
||||
ActionMailer::Base.deliveries.clear
|
||||
Setting.notified_events << 'document_added'
|
||||
@request.session[:user_id] = 2
|
||||
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',
|
||||
:description => 'This is a new document',
|
||||
:category_id => 2},
|
||||
:attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
|
||||
end
|
||||
|
||||
assert_redirected_to '/projects/ecookbook/documents'
|
||||
|
||||
document = Document.find_by_title('DocumentsControllerTest#test_post_new')
|
||||
@@ -126,23 +124,6 @@ LOREM
|
||||
assert_template 'new'
|
||||
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
|
||||
@request.session[:user_id] = 2
|
||||
get :edit, :id => 1
|
||||
|
||||
@@ -58,14 +58,13 @@ class FilesControllerTest < ActionController::TestCase
|
||||
def test_create_file
|
||||
set_tmp_attachments_directory
|
||||
@request.session[:user_id] = 2
|
||||
Setting.notified_events = ['file_added']
|
||||
ActionMailer::Base.deliveries.clear
|
||||
|
||||
with_settings :notified_events => %w(file_added) do
|
||||
assert_difference 'Attachment.count' do
|
||||
post :create, :project_id => 1, :version_id => '',
|
||||
:attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
|
||||
assert_response :redirect
|
||||
end
|
||||
assert_difference 'Attachment.count' do
|
||||
post :create, :project_id => 1, :version_id => '',
|
||||
:attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
|
||||
assert_response :redirect
|
||||
end
|
||||
assert_redirected_to '/projects/ecookbook/files'
|
||||
a = Attachment.find(:first, :order => 'created_on DESC')
|
||||
@@ -81,6 +80,7 @@ class FilesControllerTest < ActionController::TestCase
|
||||
def test_create_version_file
|
||||
set_tmp_attachments_directory
|
||||
@request.session[:user_id] = 2
|
||||
Setting.notified_events = ['file_added']
|
||||
|
||||
assert_difference 'Attachment.count' do
|
||||
post :create, :project_id => 1, :version_id => '2',
|
||||
|
||||
@@ -1305,7 +1305,6 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
:tag => 'input',
|
||||
:attributes => {:type => 'file', :name => 'attachments[1][file]'}
|
||||
}
|
||||
assert_select 'input[name=?][maxlength=255]', 'attachments[1][description]'
|
||||
end
|
||||
|
||||
def test_get_new_should_prefill_the_form_from_params
|
||||
|
||||
@@ -91,12 +91,11 @@ class MessagesControllerTest < ActionController::TestCase
|
||||
def test_post_new
|
||||
@request.session[:user_id] = 2
|
||||
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',
|
||||
:content => 'Message body'}
|
||||
end
|
||||
message = Message.find_by_subject('Test created message')
|
||||
assert_not_nil message
|
||||
assert_redirected_to "/boards/1/topics/#{message.to_param}"
|
||||
|
||||
@@ -82,13 +82,12 @@ class NewsControllerTest < ActionController::TestCase
|
||||
|
||||
def test_post_create
|
||||
ActionMailer::Base.deliveries.clear
|
||||
@request.session[:user_id] = 2
|
||||
Setting.notified_events << 'news_added'
|
||||
|
||||
with_settings :notified_events => %w(news_added) do
|
||||
post :create, :project_id => 1, :news => { :title => 'NewsControllerTest',
|
||||
@request.session[:user_id] = 2
|
||||
post :create, :project_id => 1, :news => { :title => 'NewsControllerTest',
|
||||
:description => 'This is the description',
|
||||
:summary => '' }
|
||||
end
|
||||
assert_redirected_to '/projects/ecookbook/news'
|
||||
|
||||
news = News.find_by_title('NewsControllerTest')
|
||||
|
||||
@@ -53,6 +53,8 @@ class RepositoriesGitControllerTest < ActionController::TestCase
|
||||
if @char_1.respond_to?(:force_encoding)
|
||||
@char_1.force_encoding('UTF-8')
|
||||
end
|
||||
|
||||
Setting.default_language = 'en'
|
||||
end
|
||||
|
||||
def test_create_and_update
|
||||
@@ -263,8 +265,6 @@ class RepositoriesGitControllerTest < ActionController::TestCase
|
||||
end
|
||||
|
||||
def test_diff
|
||||
assert_equal true, @repository.is_default
|
||||
assert_nil @repository.identifier
|
||||
assert_equal 0, @repository.changesets.count
|
||||
@repository.fetch_changesets
|
||||
@project.reload
|
||||
@@ -287,55 +287,26 @@ class RepositoriesGitControllerTest < ActionController::TestCase
|
||||
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
|
||||
assert_equal 0, @repository.changesets.count
|
||||
@repository.fetch_changesets
|
||||
@project.reload
|
||||
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
|
||||
with_cache do
|
||||
with_settings :default_language => 'en' do
|
||||
get :diff, :id => PRJ_ID, :type => 'inline',
|
||||
:rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
|
||||
assert_response :success
|
||||
assert @response.body.include?("... This diff was truncated")
|
||||
end
|
||||
with_settings :default_language => 'fr' do
|
||||
get :diff, :id => PRJ_ID, :type => 'inline',
|
||||
:rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
|
||||
assert_response :success
|
||||
assert ! @response.body.include?("... This diff was truncated")
|
||||
assert @response.body.include?("... Ce diff")
|
||||
end
|
||||
end
|
||||
# Truncated diff of changeset 2f9c0091
|
||||
with_cache do
|
||||
get :diff, :id => PRJ_ID, :type => 'inline',
|
||||
:rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
|
||||
assert_response :success
|
||||
assert @response.body.include?("... This diff was truncated")
|
||||
|
||||
Setting.default_language = 'fr'
|
||||
get :diff, :id => PRJ_ID, :type => 'inline',
|
||||
:rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
|
||||
assert_response :success
|
||||
assert ! @response.body.include?("... This diff was truncated")
|
||||
assert @response.body.include?("... Ce diff")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -355,55 +326,9 @@ class RepositoriesGitControllerTest < ActionController::TestCase
|
||||
diff = assigns(:diff)
|
||||
assert_not_nil diff
|
||||
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
|
||||
|
||||
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
|
||||
if @ruby19_non_utf8_pass
|
||||
puts_ruby19_non_utf8_pass()
|
||||
@@ -435,13 +360,8 @@ class RepositoriesGitControllerTest < ActionController::TestCase
|
||||
end
|
||||
|
||||
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
|
||||
user = User.find(1)
|
||||
get :diff,
|
||||
:id => PRJ_ID,
|
||||
:rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
|
||||
@@ -547,21 +467,6 @@ class RepositoriesGitControllerTest < ActionController::TestCase
|
||||
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
|
||||
assert_equal 0, @repository.changesets.count
|
||||
@repository.fetch_changesets
|
||||
|
||||
@@ -57,7 +57,6 @@ class SettingsControllerTest < ActionController::TestCase
|
||||
assert !Setting.bcc_recipients?
|
||||
assert_equal %w(issue_added issue_updated news_added), Setting.notified_events
|
||||
assert_equal 'Test footer', Setting.emails_footer
|
||||
Setting.clear_cache
|
||||
end
|
||||
|
||||
def test_get_plugin_settings
|
||||
|
||||
@@ -33,10 +33,6 @@ class SysControllerTest < ActionController::TestCase
|
||||
Setting.enabled_scm = %w(Subversion Git)
|
||||
end
|
||||
|
||||
def teardown
|
||||
Setting.clear_cache
|
||||
end
|
||||
|
||||
def test_projects_with_repository_enabled
|
||||
get :projects
|
||||
assert_response :success
|
||||
|
||||
@@ -25,7 +25,6 @@ class ApiTest::IssuesTest < ActionController::IntegrationTest
|
||||
:member_roles,
|
||||
:issues,
|
||||
:issue_statuses,
|
||||
:issue_relations,
|
||||
:versions,
|
||||
:trackers,
|
||||
:projects_trackers,
|
||||
|
||||
@@ -103,11 +103,15 @@ class ApiTest::VersionsTest < ActionController::IntegrationTest
|
||||
|
||||
assert_response :success
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
assert_select 'version' do
|
||||
assert_select 'id', :text => '2'
|
||||
assert_select 'name', :text => '1.0'
|
||||
assert_select 'sharing', :text => 'none'
|
||||
end
|
||||
assert_tag 'version',
|
||||
:child => {
|
||||
:tag => 'id',
|
||||
:content => '2',
|
||||
:sibling => {
|
||||
:tag => 'name',
|
||||
:content => '1.0'
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -75,12 +75,6 @@ class AttachmentTest < ActiveSupport::TestCase
|
||||
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
|
||||
a = Attachment.new(:container => Issue.find(1),
|
||||
:file => uploaded_test_file("testfile.txt", "text/plain"),
|
||||
|
||||
@@ -179,8 +179,7 @@ class ChangesetTest < ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
def test_commit_closing_a_subproject_issue
|
||||
with_settings :commit_fix_status_id => 5, :commit_fix_keywords => 'closes',
|
||||
:default_language => 'en' do
|
||||
with_settings :commit_fix_status_id => 5, :commit_fix_keywords => 'closes' do
|
||||
issue = Issue.find(5)
|
||||
assert !issue.closed?
|
||||
assert_difference 'Journal.count' do
|
||||
|
||||
@@ -33,12 +33,11 @@ class CommentTest < ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
def test_create_should_send_notification
|
||||
Setting.notified_events << 'news_comment_added'
|
||||
Watcher.create!(:watchable => @news, :user => @jsmith)
|
||||
|
||||
with_settings :notified_events => %w(news_comment_added) do
|
||||
assert_difference 'ActionMailer::Base.deliveries.size' do
|
||||
Comment.create!(:commented => @news, :author => @jsmith, :comments => "my comment")
|
||||
end
|
||||
assert_difference 'ActionMailer::Base.deliveries.size' do
|
||||
Comment.create!(:commented => @news, :author => @jsmith, :comments => "my comment")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -32,16 +32,4 @@ class DocumentCategoryTest < ActiveSupport::TestCase
|
||||
def test_option_name
|
||||
assert_equal :enumeration_doc_categories, DocumentCategory.new.option_name
|
||||
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
|
||||
|
||||
@@ -18,10 +18,7 @@
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class DocumentTest < ActiveSupport::TestCase
|
||||
fixtures :projects, :enumerations, :documents, :attachments,
|
||||
:enabled_modules,
|
||||
:users, :members, :member_roles, :roles,
|
||||
:groups_users
|
||||
fixtures :projects, :enumerations, :documents, :attachments
|
||||
|
||||
def test_create
|
||||
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
|
||||
ActionMailer::Base.deliveries.clear
|
||||
|
||||
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'))
|
||||
assert doc.save
|
||||
end
|
||||
Setting.notified_events << 'document_added'
|
||||
doc = Document.new(:project => Project.find(1), :title => 'New document', :category => Enumeration.find_by_name('User documentation'))
|
||||
|
||||
assert doc.save
|
||||
assert_equal 1, ActionMailer::Base.deliveries.size
|
||||
end
|
||||
|
||||
|
||||
@@ -107,53 +107,25 @@ class IssuesHelperTest < ActionView::TestCase
|
||||
|
||||
context "with a start_date attribute" do
|
||||
should "format the current date" do
|
||||
@detail = JournalDetail.new(
|
||||
:property => 'attr',
|
||||
: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
|
||||
@detail = JournalDetail.new(:property => 'attr', :old_value => '2010-01-01', :value => '2010-01-31', :prop_key => 'start_date')
|
||||
assert_match "01/31/2010", show_detail(@detail, true)
|
||||
end
|
||||
|
||||
should "format the old date" do
|
||||
@detail = JournalDetail.new(
|
||||
:property => 'attr',
|
||||
: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
|
||||
@detail = JournalDetail.new(:property => 'attr', :old_value => '2010-01-01', :value => '2010-01-31', :prop_key => 'start_date')
|
||||
assert_match "01/01/2010", show_detail(@detail, true)
|
||||
end
|
||||
end
|
||||
|
||||
context "with a due_date attribute" do
|
||||
should "format the current date" do
|
||||
@detail = JournalDetail.new(
|
||||
:property => 'attr',
|
||||
: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
|
||||
@detail = JournalDetail.new(:property => 'attr', :old_value => '2010-01-01', :value => '2010-01-31', :prop_key => 'due_date')
|
||||
assert_match "01/31/2010", show_detail(@detail, true)
|
||||
end
|
||||
|
||||
should "format the old date" do
|
||||
@detail = JournalDetail.new(
|
||||
:property => 'attr',
|
||||
: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
|
||||
@detail = JournalDetail.new(:property => 'attr', :old_value => '2010-01-01', :value => '2010-01-31', :prop_key => 'due_date')
|
||||
assert_match "01/01/2010", show_detail(@detail, true)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -18,17 +18,7 @@
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class IssueRelationTest < ActiveSupport::TestCase
|
||||
fixtures :projects,
|
||||
:users,
|
||||
:roles,
|
||||
:members,
|
||||
:member_roles,
|
||||
:issues,
|
||||
:issue_statuses,
|
||||
:issue_relations,
|
||||
:enabled_modules,
|
||||
:enumerations,
|
||||
:trackers
|
||||
fixtures :issue_relations, :issues
|
||||
|
||||
def test_create
|
||||
from = Issue.find(1)
|
||||
|
||||
@@ -27,111 +27,102 @@ class JournalObserverTest < ActiveSupport::TestCase
|
||||
|
||||
# context: issue_updated notified_events
|
||||
def test_create_should_send_email_notification_with_issue_updated
|
||||
Setting.notified_events = ['issue_updated']
|
||||
issue = Issue.find(:first)
|
||||
user = User.find(:first)
|
||||
journal = issue.init_journal(user, issue)
|
||||
|
||||
with_settings :notified_events => %w(issue_updated) do
|
||||
assert journal.save
|
||||
end
|
||||
assert journal.save
|
||||
assert_equal 1, ActionMailer::Base.deliveries.size
|
||||
end
|
||||
|
||||
def test_create_should_not_send_email_notification_with_notify_set_to_false
|
||||
Setting.notified_events = ['issue_updated']
|
||||
issue = Issue.find(:first)
|
||||
user = User.find(:first)
|
||||
journal = issue.init_journal(user, issue)
|
||||
journal.notify = false
|
||||
|
||||
with_settings :notified_events => %w(issue_updated) do
|
||||
assert journal.save
|
||||
end
|
||||
assert journal.save
|
||||
assert_equal 0, ActionMailer::Base.deliveries.size
|
||||
end
|
||||
|
||||
def test_create_should_not_send_email_notification_without_issue_updated
|
||||
Setting.notified_events = []
|
||||
issue = Issue.find(:first)
|
||||
user = User.find(:first)
|
||||
journal = issue.init_journal(user, issue)
|
||||
|
||||
with_settings :notified_events => [] do
|
||||
assert journal.save
|
||||
end
|
||||
assert journal.save
|
||||
assert_equal 0, ActionMailer::Base.deliveries.size
|
||||
end
|
||||
|
||||
# context: issue_note_added notified_events
|
||||
def test_create_should_send_email_notification_with_issue_note_added
|
||||
Setting.notified_events = ['issue_note_added']
|
||||
issue = Issue.find(:first)
|
||||
user = User.find(:first)
|
||||
journal = issue.init_journal(user, issue)
|
||||
journal.notes = 'This update has a note'
|
||||
|
||||
with_settings :notified_events => %w(issue_note_added) do
|
||||
assert journal.save
|
||||
end
|
||||
assert journal.save
|
||||
assert_equal 1, ActionMailer::Base.deliveries.size
|
||||
end
|
||||
|
||||
def test_create_should_not_send_email_notification_without_issue_note_added
|
||||
Setting.notified_events = []
|
||||
issue = Issue.find(:first)
|
||||
user = User.find(:first)
|
||||
journal = issue.init_journal(user, issue)
|
||||
journal.notes = 'This update has a note'
|
||||
|
||||
with_settings :notified_events => [] do
|
||||
assert journal.save
|
||||
end
|
||||
assert journal.save
|
||||
assert_equal 0, ActionMailer::Base.deliveries.size
|
||||
end
|
||||
|
||||
# context: issue_status_updated notified_events
|
||||
def test_create_should_send_email_notification_with_issue_status_updated
|
||||
Setting.notified_events = ['issue_status_updated']
|
||||
issue = Issue.find(:first)
|
||||
user = User.find(:first)
|
||||
issue.init_journal(user, issue)
|
||||
issue.status = IssueStatus.last
|
||||
|
||||
with_settings :notified_events => %w(issue_status_updated) do
|
||||
assert issue.save
|
||||
end
|
||||
assert issue.save
|
||||
assert_equal 1, ActionMailer::Base.deliveries.size
|
||||
end
|
||||
|
||||
def test_create_should_not_send_email_notification_without_issue_status_updated
|
||||
Setting.notified_events = []
|
||||
issue = Issue.find(:first)
|
||||
user = User.find(:first)
|
||||
issue.init_journal(user, issue)
|
||||
issue.status = IssueStatus.last
|
||||
|
||||
with_settings :notified_events => [] do
|
||||
assert issue.save
|
||||
end
|
||||
assert issue.save
|
||||
assert_equal 0, ActionMailer::Base.deliveries.size
|
||||
end
|
||||
|
||||
# context: issue_priority_updated notified_events
|
||||
def test_create_should_send_email_notification_with_issue_priority_updated
|
||||
Setting.notified_events = ['issue_priority_updated']
|
||||
issue = Issue.find(:first)
|
||||
user = User.find(:first)
|
||||
issue.init_journal(user, issue)
|
||||
issue.priority = IssuePriority.last
|
||||
|
||||
with_settings :notified_events => %w(issue_priority_updated) do
|
||||
assert issue.save
|
||||
end
|
||||
assert issue.save
|
||||
assert_equal 1, ActionMailer::Base.deliveries.size
|
||||
end
|
||||
|
||||
def test_create_should_not_send_email_notification_without_issue_priority_updated
|
||||
Setting.notified_events = []
|
||||
issue = Issue.find(:first)
|
||||
user = User.find(:first)
|
||||
issue.init_journal(user, issue)
|
||||
issue.priority = IssuePriority.last
|
||||
|
||||
with_settings :notified_events => [] do
|
||||
assert issue.save
|
||||
end
|
||||
assert issue.save
|
||||
assert_equal 0, ActionMailer::Base.deliveries.size
|
||||
end
|
||||
end
|
||||
|
||||
@@ -18,14 +18,8 @@
|
||||
require File.expand_path('../../../../test_helper', __FILE__)
|
||||
|
||||
class Redmine::Hook::ManagerTest < ActiveSupport::TestCase
|
||||
fixtures :projects, :users, :members, :member_roles, :roles,
|
||||
:groups_users,
|
||||
:trackers, :projects_trackers,
|
||||
:enabled_modules,
|
||||
:versions,
|
||||
:issue_statuses, :issue_categories, :issue_relations, :workflows,
|
||||
:enumerations,
|
||||
:issues
|
||||
|
||||
fixtures :issues
|
||||
|
||||
# Some hooks that are manually registered in these tests
|
||||
class TestHook < Redmine::Hook::ViewListener; end
|
||||
|
||||
@@ -126,24 +126,6 @@ class Redmine::I18nTest < ActiveSupport::TestCase
|
||||
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
|
||||
assert valid_languages.is_a?(Array)
|
||||
assert valid_languages.first.is_a?(Symbol)
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
require File.expand_path('../../../../test_helper', __FILE__)
|
||||
|
||||
class Redmine::SafeAttributesTest < ActiveSupport::TestCase
|
||||
fixtures :users
|
||||
|
||||
class Base
|
||||
def attributes=(attrs)
|
||||
|
||||
@@ -10,6 +10,16 @@ begin
|
||||
FELIX_HEX = "Felix Sch\xC3\xA4fer"
|
||||
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.
|
||||
## Subversion supports URL encoding for path.
|
||||
## Redmine Mercurial adapter and extension use URL encoding.
|
||||
@@ -19,16 +29,6 @@ begin
|
||||
JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
|
||||
|
||||
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
|
||||
adapter_class = Redmine::Scm::Adapters::GitAdapter
|
||||
assert adapter_class
|
||||
|
||||
@@ -35,10 +35,6 @@ class MailHandlerTest < ActiveSupport::TestCase
|
||||
Setting.notified_events = Redmine::Notifiable.all.collect(&:name)
|
||||
end
|
||||
|
||||
def teardown
|
||||
Setting.clear_cache
|
||||
end
|
||||
|
||||
def test_add_issue
|
||||
ActionMailer::Base.deliveries.clear
|
||||
# This email contains: 'Project: onlinestore'
|
||||
@@ -367,8 +363,7 @@ class MailHandlerTest < ActiveSupport::TestCase
|
||||
[
|
||||
"X-Auto-Response-Suppress: OOF",
|
||||
"Auto-Submitted: auto-replied",
|
||||
"Auto-Submitted: Auto-Replied",
|
||||
"Auto-Submitted: auto-generated"
|
||||
"Auto-Submitted: Auto-Replied"
|
||||
].each do |header|
|
||||
raw = IO.read(File.join(FIXTURES_PATH, 'ticket_on_given_project.eml'))
|
||||
raw = header + "\n" + raw
|
||||
|
||||
@@ -29,11 +29,10 @@ class NewsTest < ActiveSupport::TestCase
|
||||
|
||||
def test_create_should_send_email_notification
|
||||
ActionMailer::Base.deliveries.clear
|
||||
Setting.notified_events << 'news_added'
|
||||
news = Project.find(1).news.new(valid_news)
|
||||
|
||||
with_settings :notified_events => %w(news_added) do
|
||||
assert news.save
|
||||
end
|
||||
assert news.save
|
||||
assert_equal 1, ActionMailer::Base.deliveries.size
|
||||
end
|
||||
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class QueryTest < ActiveSupport::TestCase
|
||||
include Redmine::I18n
|
||||
|
||||
fixtures :projects, :enabled_modules, :users, :members,
|
||||
:member_roles, :roles, :trackers, :issue_statuses,
|
||||
:issue_categories, :enumerations, :issues,
|
||||
@@ -180,20 +178,6 @@ class QueryTest < ActiveSupport::TestCase
|
||||
assert_equal 2, issues.first.id
|
||||
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
|
||||
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')
|
||||
@@ -207,20 +191,6 @@ class QueryTest < ActiveSupport::TestCase
|
||||
assert_equal 2, issues.first.id
|
||||
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
|
||||
f = IssueCustomField.create!(:name => 'filter', :field_format => 'list', :is_filter => true, :is_for_all => true,
|
||||
:possible_values => ['value1', 'value2', 'value3'], :multiple => true)
|
||||
@@ -759,7 +729,6 @@ class QueryTest < ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
def test_label_for
|
||||
set_language_if_valid 'en'
|
||||
q = Query.new
|
||||
assert_equal 'Assignee', q.label_for('assigned_to_id')
|
||||
end
|
||||
|
||||
@@ -212,40 +212,6 @@ class RepositoryGitTest < ActiveSupport::TestCase
|
||||
assert_equal h1, h2
|
||||
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
|
||||
assert_equal 0, @repository.changesets.count
|
||||
@repository.fetch_changesets
|
||||
|
||||
@@ -97,15 +97,6 @@ class RepositoryTest < ActiveSupport::TestCase
|
||||
assert_equal [repository1, repository2], Project.find(3).repositories.sort
|
||||
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
|
||||
changesets = Changeset.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
|
||||
Setting.default_language = 'en'
|
||||
Setting.notified_events = ['issue_added','issue_updated']
|
||||
|
||||
# choosing a status to apply to fix issues
|
||||
Setting.commit_fix_status_id = IssueStatus.find(
|
||||
@@ -164,9 +156,7 @@ class RepositoryTest < ActiveSupport::TestCase
|
||||
assert !fixed_issue.status.is_closed?
|
||||
old_status = fixed_issue.status
|
||||
|
||||
with_settings :notified_events => %w(issue_added issue_updated) do
|
||||
Repository.scan_changesets_for_issue_ids
|
||||
end
|
||||
Repository.scan_changesets_for_issue_ids
|
||||
assert_equal [101, 102], Issue.find(3).changeset_ids
|
||||
|
||||
# fixed issues
|
||||
|
||||
@@ -19,10 +19,6 @@ require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class SettingTest < ActiveSupport::TestCase
|
||||
|
||||
def teardown
|
||||
Setting.clear_cache
|
||||
end
|
||||
|
||||
def test_read_default
|
||||
assert_equal "Redmine", Setting.app_title
|
||||
assert Setting.self_registration?
|
||||
|
||||
@@ -44,13 +44,11 @@ class WikiContentTest < ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
def test_create_should_send_email_notification
|
||||
Setting.notified_events = ['wiki_content_added']
|
||||
ActionMailer::Base.deliveries.clear
|
||||
page = WikiPage.new(:wiki => @wiki, :title => "A new page")
|
||||
page.content = WikiContent.new(:text => "Content text", :author => User.find(1), :comments => "My comment")
|
||||
|
||||
with_settings :notified_events => %w(wiki_content_added) do
|
||||
assert page.save
|
||||
end
|
||||
assert page.save
|
||||
|
||||
assert_equal 1, ActionMailer::Base.deliveries.size
|
||||
end
|
||||
@@ -66,13 +64,11 @@ class WikiContentTest < ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
def test_update_should_send_email_notification
|
||||
Setting.notified_events = ['wiki_content_updated']
|
||||
ActionMailer::Base.deliveries.clear
|
||||
content = @page.content
|
||||
content.text = "My new content"
|
||||
|
||||
with_settings :notified_events => %w(wiki_content_updated) do
|
||||
assert content.save
|
||||
end
|
||||
assert content.save
|
||||
|
||||
assert_equal 1, ActionMailer::Base.deliveries.size
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user