Revision 1298:4f746d8966dd .svn/pristine/1e

View differences:

.svn/pristine/1e/1e249c4fe7dcd1453c3738c60c059927f1f93080.svn-base
1
source 'https://rubygems.org'
2

  
3
gem "rails", "3.2.13"
4
gem "jquery-rails", "~> 2.0.2"
5
gem "i18n", "~> 0.6.0"
6
gem "coderay", "~> 1.0.9"
7
gem "fastercsv", "~> 1.5.0", :platforms => [:mri_18, :mingw_18, :jruby]
8
gem "builder", "3.0.0"
9

  
10
# Optional gem for LDAP authentication
11
group :ldap do
12
  gem "net-ldap", "~> 0.3.1"
13
end
14

  
15
# Optional gem for OpenID authentication
16
group :openid do
17
  gem "ruby-openid", "~> 2.1.4", :require => "openid"
18
  gem "rack-openid"
19
end
20

  
21
# Optional gem for exporting the gantt to a PNG file, not supported with jruby
22
platforms :mri, :mingw do
23
  group :rmagick do
24
    # RMagick 2 supports ruby 1.9
25
    # RMagick 1 would be fine for ruby 1.8 but Bundler does not support
26
    # different requirements for the same gem on different platforms
27
    gem "rmagick", ">= 2.0.0"
28
  end
29
end
30

  
31
platforms :jruby do
32
  # jruby-openssl is bundled with JRuby 1.7.0
33
  gem "jruby-openssl" if Object.const_defined?(:JRUBY_VERSION) && JRUBY_VERSION < '1.7.0'
34
  gem "activerecord-jdbc-adapter", "1.2.5"
35
end
36

  
37
# Include database gems for the adapters found in the database
38
# configuration file
39
require 'erb'
40
require 'yaml'
41
database_file = File.join(File.dirname(__FILE__), "config/database.yml")
42
if File.exist?(database_file)
43
  database_config = YAML::load(ERB.new(IO.read(database_file)).result)
44
  adapters = database_config.values.map {|c| c['adapter']}.compact.uniq
45
  if adapters.any?
46
    adapters.each do |adapter|
47
      case adapter
48
      when 'mysql2'
49
        gem "mysql2", "~> 0.3.11", :platforms => [:mri, :mingw]
50
        gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
51
      when 'mysql'
52
        gem "mysql", "~> 2.8.1", :platforms => [:mri, :mingw]
53
        gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
54
      when /postgresql/
55
        gem "pg", ">= 0.11.0", :platforms => [:mri, :mingw]
56
        gem "activerecord-jdbcpostgresql-adapter", :platforms => :jruby
57
      when /sqlite3/
58
        gem "sqlite3", :platforms => [:mri, :mingw]
59
        gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
60
      when /sqlserver/
61
        gem "tiny_tds", "~> 0.5.1", :platforms => [:mri, :mingw]
62
        gem "activerecord-sqlserver-adapter", :platforms => [:mri, :mingw]
63
      else
64
        warn("Unknown database adapter `#{adapter}` found in config/database.yml, use Gemfile.local to load your own database gems")
65
      end
66
    end
67
  else
68
    warn("No adapter found in config/database.yml, please configure it first")
69
  end
70
else
71
  warn("Please configure your config/database.yml first")
72
end
73

  
74
group :development do
75
  gem "rdoc", ">= 2.4.2"
76
  gem "yard"
77
end
78

  
79
group :test do
80
  gem "shoulda", "~> 3.3.2"
81
  gem "mocha", "~> 0.13.3"
82
  gem 'capybara', '~> 2.0.0'
83
  gem 'nokogiri', '< 1.6.0'
84
end
85

  
86
local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
87
if File.exists?(local_gemfile)
88
  puts "Loading Gemfile.local ..." if $DEBUG # `ruby -d` or `bundle -v`
89
  instance_eval File.read(local_gemfile)
90
end
91

  
92
# Load plugins' Gemfiles
93
Dir.glob File.expand_path("../plugins/*/Gemfile", __FILE__) do |file|
94
  puts "Loading #{file} ..." if $DEBUG # `ruby -d` or `bundle -v`
95
  instance_eval File.read(file)
96
end
.svn/pristine/1e/1e483084ac442168a4ba45984a0f145a415a7cad.svn-base
1
# Redmine - project management software
2
# Copyright (C) 2006-2011  Jean-Philippe Lang
3
#
4
# This program is free software; you can redistribute it and/or
5
# modify it under the terms of the GNU General Public License
6
# as published by the Free Software Foundation; either version 2
7
# of the License, or (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17

  
18
class DocumentObserver < ActiveRecord::Observer
19
  def after_create(document)
20
    Mailer.deliver_document_added(document) if Setting.notified_events.include?('document_added')
21
  end
22
end
.svn/pristine/1e/1e54d19d4970142ec949fe4202f5ffe30b1f8dbf.svn-base
1
# Redmine - project management software
2
# Copyright (C) 2006-2013  Jean-Philippe Lang
3
#
4
# This program is free software; you can redistribute it and/or
5
# modify it under the terms of the GNU General Public License
6
# as published by the Free Software Foundation; either version 2
7
# of the License, or (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17

  
18
require File.expand_path('../../../test_helper', __FILE__)
19

  
20
class Redmine::ApiTest::DisabledRestApiTest < Redmine::ApiTest::Base
21
  fixtures :projects, :trackers, :issue_statuses, :issues,
22
           :enumerations, :users, :issue_categories,
23
           :projects_trackers,
24
           :roles,
25
           :member_roles,
26
           :members,
27
           :enabled_modules
28

  
29
  def setup
30
    Setting.rest_api_enabled = '0'
31
    Setting.login_required = '1'
32
  end
33

  
34
  def teardown
35
    Setting.rest_api_enabled = '1'
36
    Setting.login_required = '0'
37
  end
38

  
39
  def test_with_a_valid_api_token
40
    @user = User.generate!
41
    @token = Token.create!(:user => @user, :action => 'api')
42

  
43
    get "/news.xml?key=#{@token.value}"
44
    assert_response :unauthorized
45
    assert_equal User.anonymous, User.current
46

  
47
    get "/news.json?key=#{@token.value}"
48
    assert_response :unauthorized
49
    assert_equal User.anonymous, User.current
50
  end
51

  
52
  def test_with_valid_username_password_http_authentication
53
    @user = User.generate! do |user|
54
      user.password = 'my_password'
55
    end
56

  
57
    get "/news.xml", nil, credentials(@user.login, 'my_password')
58
    assert_response :unauthorized
59
    assert_equal User.anonymous, User.current
60

  
61
    get "/news.json", nil, credentials(@user.login, 'my_password')
62
    assert_response :unauthorized
63
    assert_equal User.anonymous, User.current
64
  end
65

  
66
  def test_with_valid_token_http_authentication
67
    @user = User.generate!
68
    @token = Token.create!(:user => @user, :action => 'api')
69

  
70
    get "/news.xml", nil, credentials(@token.value, 'X')
71
    assert_response :unauthorized
72
    assert_equal User.anonymous, User.current
73

  
74
    get "/news.json", nil, credentials(@token.value, 'X')
75
    assert_response :unauthorized
76
    assert_equal User.anonymous, User.current
77
  end
78
end
.svn/pristine/1e/1e6be947d792b95e6881bfbd4ea45738a1aaae9e.svn-base
1
# Tests in this file ensure that:
2
#
3
# * the application /app/[controllers|helpers|models] and /lib 
4
#   paths preceed the corresponding plugin paths
5
# * the plugin paths are added to $LOAD_PATH in the order in which plugins are 
6
#   loaded
7

  
8
require File.dirname(__FILE__) + '/../test_helper'
9

  
10
class LoadPathTest < Test::Unit::TestCase
11
  def setup
12
    @load_path = expand_paths($LOAD_PATH)
13
  end
14
  
15
  # Not sure if these test actually make sense as this now essentially tests
16
  # Rails core functionality. On the other hand Engines relies on this to some
17
  # extend so this will choke if something important changes in Rails.
18
  
19
  # the application app/... and lib/ directories should appear
20
  # before any plugin directories
21
  
22
  def test_application_app_libs_should_precede_all_plugin_app_libs
23
    types = %w(app/controllers app/helpers app/models lib)
24
    types.each do |t|
25
      app_index = load_path_index(File.join(RAILS_ROOT, t))
26
      assert_not_nil app_index, "#{t} is missing in $LOAD_PATH"
27
      Engines.plugins.each do |plugin|
28
        first_plugin_index = load_path_index(File.join(plugin.directory, t))
29
        assert(app_index < first_plugin_index) unless first_plugin_index.nil?
30
      end
31
    end
32
  end
33
  
34
  # the engine directories should appear in the proper order based on
35
  # the order they were started  
36
  
37
  def test_plugin_dirs_should_appear_in_reverse_plugin_loading_order
38
    app_paths = %w(app/controllers/ app app/models app/helpers lib)
39
    app_paths.map { |p| File.join(RAILS_ROOT, p)}
40
    plugin_paths = Engines.plugins.reverse.collect { |plugin| plugin.load_paths.reverse }.flatten    
41
    
42
    expected_paths = expand_paths(app_paths + plugin_paths)    
43
    # only look at those paths that are also present in expected_paths so
44
    # the only difference would be in the order of the paths
45
    actual_paths = @load_path & expected_paths 
46
    
47
    assert_equal expected_paths, actual_paths
48
  end
49
  
50
  protected    
51
    def expand_paths(paths)
52
      paths.collect { |p| File.expand_path(p) }
53
    end
54
    
55
    def load_path_index(dir)
56
      @load_path.index(File.expand_path(dir))
57
    end  
58
end
.svn/pristine/1e/1ee7b5168bf92e876c9f4c10698beed4d4ba3f9d.svn-base
1
fa:
2
  # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
3
  direction: rtl
4
  date:
5
    formats:
6
      # Use the strftime parameters for formats.
7
      # When no format has been given, it uses default.
8
      # You can provide other formats here if you like!
9
      default: "%Y/%m/%d"
10
      short: "%b %d"
11
      long: "%B %d, %Y"
12
      
13
    day_names: [یک‌شنبه, دوشنبه, سه‌شنبه, چهارشنبه, پنج‌شنبه, آدینه, شنبه]
14
    abbr_day_names: [یک, دو, سه, چهار, پنج, آدینه, شنبه]
15
      
16
    # Don't forget the nil at the beginning; there's no such thing as a 0th month
17
    month_names: [~, ژانویه, فوریه, مارس, آوریل, مه, ژوئن, ژوئیه, اوت, سپتامبر, اکتبر, نوامبر, دسامبر]
18
    abbr_month_names: [~, ژان, فور, مار, آور, مه, ژوئن, ژوئیه, اوت, سپت, اکت, نوا, دسا]
19
    # Used in date_select and datime_select.
20
    order:
21
      - :year
22
      - :month
23
      - :day
24

  
25
  time:
26
    formats:
27
      default: "%Y/%m/%d - %H:%M"
28
      time: "%H:%M"
29
      short: "%d %b %H:%M"
30
      long: "%d %B %Y ساعت %H:%M"
31
    am: "صبح"
32
    pm: "عصر"
33
      
34
  datetime:
35
    distance_in_words:
36
      half_a_minute: "نیم دقیقه"
37
      less_than_x_seconds:
38
        one:   "کمتر از 1 ثانیه"
39
        other: "کمتر از %{count} ثانیه"
40
      x_seconds:
41
        one:   "1 ثانیه"
42
        other: "%{count} ثانیه"
43
      less_than_x_minutes:
44
        one:   "کمتر از 1 دقیقه"
45
        other: "کمتر از %{count} دقیقه"
46
      x_minutes:
47
        one:   "1 دقیقه"
48
        other: "%{count} دقیقه"
49
      about_x_hours:
50
        one:   "نزدیک 1 ساعت"
51
        other: "نزدیک %{count} ساعت"
52
      x_days:
53
        one:   "1 روز"
54
        other: "%{count} روز"
55
      about_x_months:
56
        one:   "نزدیک 1 ماه"
57
        other: "نزدیک %{count} ماه"
58
      x_months:
59
        one:   "1 ماه"
60
        other: "%{count} ماه"
61
      about_x_years:
62
        one:   "نزدیک 1 سال"
63
        other: "نزدیک %{count} سال"
64
      over_x_years:
65
        one:   "بیش از 1 سال"
66
        other: "بیش از %{count} سال"
67
      almost_x_years:
68
        one:   "نزدیک 1 سال"
69
        other: "نزدیک %{count} سال"
70

  
71
  number:
72
    # Default format for numbers
73
    format:
74
      separator: "٫" 
75
      delimiter: ""
76
      precision: 3
77
    human:
78
      format:
79
        delimiter: ""
80
        precision: 1
81
      storage_units:
82
        format: "%n %u"
83
        units:
84
          byte:
85
            one: "بایت"
86
            other: "بایت"
87
          kb: "کیلوبایت"
88
          mb: "مگابایت"
89
          gb: "گیگابایت"
90
          tb: "ترابایت"
91

  
92
        
93
# Used in array.to_sentence.
94
  support:
95
    array:
96
      sentence_connector: "و"
97
      skip_last_comma: false
98
      
99
  activerecord:
100
    errors:
101
      template:
102
        header:
103
          one:    "1 ایراد از ذخیره سازی این %{model} جلوگیری کرد"
104
          other:  "%{count} ایراد از ذخیره سازی این %{model} جلوگیری کرد"
105
      messages:
106
        inclusion: "در فهرست نیامده است"
107
        exclusion: "رزرو شده است"
108
        invalid: "نادرست است"
109
        confirmation: "با بررسی سازگاری ندارد"
110
        accepted: "باید پذیرفته شود"
111
        empty: "نمی‌تواند تهی باشد"
112
        blank: "نمی‌تواند تهی باشد"
113
        too_long: "خیلی بلند است (بیشترین اندازه %{count} نویسه است)"
114
        too_short: "خیلی کوتاه است (کمترین اندازه %{count} نویسه است)"
115
        wrong_length: "اندازه نادرست است (باید %{count} نویسه باشد)"
116
        taken: "پیش از این گرفته شده است"
117
        not_a_number: "شماره درستی نیست"
118
        not_a_date: "تاریخ درستی نیست"
119
        greater_than: "باید بزرگتر از %{count} باشد"
120
        greater_than_or_equal_to: "باید بزرگتر از یا برابر با %{count} باشد"
121
        equal_to: "باید برابر با %{count} باشد"
122
        less_than: "باید کمتر از %{count} باشد"
123
        less_than_or_equal_to: "باید کمتر از یا برابر با %{count} باشد"
124
        odd: "باید فرد باشد"
125
        even: "باید زوج باشد"
126
        greater_than_start_date: "باید از تاریخ آغاز بزرگتر باشد"
127
        not_same_project: "به همان پروژه وابسته نیست"
128
        circular_dependency: "این وابستگی یک وابستگی دایره وار خواهد ساخت"
129
        cant_link_an_issue_with_a_descendant: "یک پیامد نمی‌تواند به یکی از زیر کارهایش پیوند بخورد"
130

  
131
  actionview_instancetag_blank_option: گزینش کنید
132
  
133
  general_text_No: 'خیر'
134
  general_text_Yes: 'آری'
135
  general_text_no: 'خیر'
136
  general_text_yes: 'آری'
137
  general_lang_name: 'Persian (پارسی)'
138
  general_csv_separator: ','
139
  general_csv_decimal_separator: '.'
140
  general_csv_encoding: UTF-8
141
  general_pdf_encoding: UTF-8
142
  general_first_day_of_week: '6'
143
  
144
  notice_account_updated: حساب شما بروز شد.
145
  notice_account_invalid_creditentials: نام کاربری یا گذرواژه نادرست است
146
  notice_account_password_updated: گذرواژه بروز شد
147
  notice_account_wrong_password: گذرواژه نادرست است
148
  notice_account_register_done: حساب ساخته شد. برای فعال نمودن آن، روی پیوندی که به شما ایمیل شده کلیک کنید.
149
  notice_account_unknown_email: کاربر شناخته نشد.
150
  notice_can_t_change_password:  این حساب یک روش شناسایی بیرونی را به کار گرفته است. گذرواژه را نمی‌توان جایگزین کرد.
151
  notice_account_lost_email_sent: یک ایمیل با راهنمایی درباره گزینش گذرواژه تازه برای شما فرستاده شد.
152
  notice_account_activated: حساب شما فعال شده است. اکنون می‌توانید وارد شوید.
153
  notice_successful_create: با موفقیت ساخته شد.
154
  notice_successful_update: با موفقیت بروز شد.
155
  notice_successful_delete: با موفقیت برداشته شد.
156
  notice_successful_connection: با موفقیت متصل شد.
157
  notice_file_not_found: برگه درخواستی شما در دسترس نیست یا پاک شده است.
158
  notice_locking_conflict: داده‌ها را کاربر دیگری بروز کرده است.
159
  notice_not_authorized: شما به این برگه دسترسی ندارید.
160
  notice_not_authorized_archived_project: پروژه درخواستی شما بایگانی شده است.
161
  notice_email_sent: "یک ایمیل به %{value} فرستاده شد."
162
  notice_email_error: "یک ایراد در فرستادن ایمیل پیش آمد (%{value})."
163
  notice_feeds_access_key_reseted: کلید دسترسی RSS شما بازنشانی شد.
164
  notice_api_access_key_reseted: کلید دسترسی API شما بازنشانی شد.
165
  notice_failed_to_save_issues: "ذخیره سازی %{count} پیامد از %{total} پیامد گزینش شده شکست خورد: %{ids}."
166
  notice_failed_to_save_members: "ذخیره سازی اعضا شکست خورد: %{errors}."
167
  notice_no_issue_selected: "هیچ پیامدی برگزیده نشده است! پیامدهایی که می‌خواهید ویرایش کنید را برگزینید."
168
  notice_account_pending: "حساب شما ساخته شد و اکنون چشم به راه روادید سرپرست است."
169
  notice_default_data_loaded: پیکربندی پیش‌گزیده با موفقیت بار شد.
170
  notice_unable_delete_version: نگارش را نمی‌توان پاک کرد.
171
  notice_unable_delete_time_entry: زمان گزارش شده را نمی‌توان پاک کرد.
172
  notice_issue_done_ratios_updated: اندازه انجام شده پیامد بروز شد.
173
  notice_gantt_chart_truncated: "نمودار بریده شد چون از بیشترین شماری که می‌توان نشان داد بزگتر است (%{max})."
174
  
175
  error_can_t_load_default_data: "پیکربندی پیش‌گزیده نمی‌تواند بار شود: %{value}"
176
  error_scm_not_found: "بخش یا نگارش در انباره پیدا نشد."
177
  error_scm_command_failed: "ایرادی در دسترسی به انباره پیش آمد: %{value}"
178
  error_scm_annotate: "بخش پیدا نشد یا نمی‌توان برای آن یادداشت نوشت."
179
  error_issue_not_found_in_project: 'پیامد پیدا نشد یا به این پروژه وابسته نیست.'
180
  error_no_tracker_in_project: 'هیچ پیگردی به این پروژه پیوسته نشده است. پیکربندی پروژه را بررسی کنید.'
181
  error_no_default_issue_status: 'هیچ وضعیت پیامد پیش‌گزیده‌ای مشخص نشده است. پیکربندی را بررسی کنید (به «پیکربندی -> وضعیت‌های پیامد» بروید).'
182
  error_can_not_delete_custom_field: فیلد سفارشی را نمی‌توان پاک کرد.
183
  error_can_not_delete_tracker: "این پیگرد دارای پیامد است و نمی‌توان آن را پاک کرد."
184
  error_can_not_remove_role: "این نقش به کار گرفته شده است و نمی‌توان آن را پاک کرد."
185
  error_can_not_reopen_issue_on_closed_version: 'یک پیامد که به یک نگارش بسته شده وابسته است را نمی‌توان باز کرد.'
186
  error_can_not_archive_project: این پروژه را نمی‌توان بایگانی کرد.
187
  error_issue_done_ratios_not_updated: "اندازه انجام شده پیامد بروز نشد."
188
  error_workflow_copy_source: 'یک پیگرد یا نقش منبع را برگزینید.'
189
  error_workflow_copy_target: 'پیگردها یا نقش‌های مقصد را برگزینید.'
190
  error_unable_delete_issue_status: 'وضعیت پیامد را نمی‌توان پاک کرد.'
191
  error_unable_to_connect: "نمی‌توان متصل شد (%{value})"
192
  warning_attachments_not_saved: "%{count} پرونده ذخیره نشد."
193
  
194
  mail_subject_lost_password: "گذرواژه حساب %{value} شما"
195
  mail_body_lost_password: 'برای جایگزینی گذرواژه خود، بر روی پیوند زیر کلیک کنید:'
196
  mail_subject_register: "فعالسازی حساب %{value} شما"
197
  mail_body_register: 'برای فعالسازی حساب خود، بر روی پیوند زیر کلیک کنید:'
198
  mail_body_account_information_external: "شما می‌توانید حساب %{value} خود را برای ورود به کار برید."
199
  mail_body_account_information: داده‌های حساب شما
200
  mail_subject_account_activation_request: "درخواست فعالسازی حساب %{value}"
201
  mail_body_account_activation_request: "یک کاربر تازه (%{value}) نامنویسی کرده است. این حساب چشم به راه روادید شماست:"
202
  mail_subject_reminder: "زمان رسیدگی به %{count} پیامد در %{days} روز آینده سر می‌رسد"
203
  mail_body_reminder: "زمان رسیدگی به %{count} پیامد که به شما واگذار شده است، در %{days} روز آینده سر می‌رسد:"
204
  mail_subject_wiki_content_added: "برگه ویکی «%{id}» افزوده شد"
205
  mail_body_wiki_content_added: "برگه ویکی «%{id}» به دست %{author} افزوده شد."
206
  mail_subject_wiki_content_updated: "برگه ویکی «%{id}» بروز شد"
207
  mail_body_wiki_content_updated: "برگه ویکی «%{id}» به دست %{author} بروز شد."
208
  
209
  gui_validation_error: 1 ایراد
210
  gui_validation_error_plural: "%{count} ایراد"
211
  
212
  field_name: نام
213
  field_description: یادداشت
214
  field_summary: خلاصه
215
  field_is_required: الزامی
216
  field_firstname: نام کوچک
217
  field_lastname: نام خانوادگی
218
  field_mail: ایمیل
219
  field_filename: پرونده
220
  field_filesize: اندازه
221
  field_downloads: دریافت‌ها
222
  field_author: نویسنده
223
  field_created_on: ساخته شده در
224
  field_updated_on: بروز شده در
225
  field_field_format: قالب
226
  field_is_for_all: برای همه پروژه‌ها
227
  field_possible_values: مقادیر ممکن
228
  field_regexp: عبارت منظم
229
  field_min_length: کمترین اندازه
230
  field_max_length: بیشترین اندازه
231
  field_value: مقدار
232
  field_category: دسته
233
  field_title: عنوان
234
  field_project: پروژه
235
  field_issue: پیامد
236
  field_status: وضعیت
237
  field_notes: یادداشت
238
  field_is_closed: پیامد بسته شده
239
  field_is_default: مقدار پیش‌گزیده
240
  field_tracker: پیگرد
241
  field_subject: موضوع
242
  field_due_date: زمان سررسید
243
  field_assigned_to: واگذار شده به
244
  field_priority: برتری
245
  field_fixed_version: نگارش هدف
246
  field_user: کاربر
247
  field_principal: دستور دهنده
248
  field_role: نقش
249
  field_homepage: برگه خانه
250
  field_is_public: همگانی
251
  field_parent: پروژه پدر
252
  field_is_in_roadmap: این پیامدها در چشم‌انداز نشان داده شوند
253
  field_login: ورود
254
  field_mail_notification: آگاه سازی‌های ایمیلی
255
  field_admin: سرپرست
256
  field_last_login_on: آخرین ورود
257
  field_language: زبان
258
  field_effective_date: تاریخ
259
  field_password: گذرواژه
260
  field_new_password: گذرواژه تازه
261
  field_password_confirmation: بررسی گذرواژه
262
  field_version: نگارش
263
  field_type: گونه
264
  field_host: میزبان
265
  field_port: درگاه
266
  field_account: حساب
267
  field_base_dn: DN پایه
268
  field_attr_login: نشانه ورود
269
  field_attr_firstname: نشانه نام کوچک
270
  field_attr_lastname: نشانه نام خانوادگی
271
  field_attr_mail: نشانه ایمیل
272
  field_onthefly: ساخت کاربر بیدرنگ
273
  field_start_date: تاریخ آغاز
274
  field_done_ratio: ٪ انجام شده
275
  field_auth_source: روش شناسایی
276
  field_hide_mail: ایمیل من پنهان شود
277
  field_comments: دیدگاه
278
  field_url: نشانی
279
  field_start_page: برگه آغاز
280
  field_subproject: زیر پروژه
281
  field_hours: ساعت‌
282
  field_activity: گزارش
283
  field_spent_on: در تاریخ
284
  field_identifier: شناسه
285
  field_is_filter: پالایش پذیر
286
  field_issue_to: پیامد وابسته
287
  field_delay: دیرکرد
288
  field_assignable: پیامدها می‌توانند به این نقش واگذار شوند
289
  field_redirect_existing_links: پیوندهای پیشین  به پیوند تازه راهنمایی شوند
290
  field_estimated_hours: زمان برآورد شده
291
  field_column_names: ستون‌ها
292
  field_time_entries: زمان نوشتن
293
  field_time_zone: پهنه زمانی
294
  field_searchable: جستجو پذیر
295
  field_default_value: مقدار پیش‌گزیده
296
  field_comments_sorting: نمایش دیدگاه‌ها
297
  field_parent_title: برگه پدر
298
  field_editable: ویرایش پذیر
299
  field_watcher: دیده‌بان
300
  field_identity_url: نشانی OpenID
301
  field_content: محتوا
302
  field_group_by: دسته بندی با
303
  field_sharing: اشتراک گذاری
304
  field_parent_issue: کار پدر
305
  field_member_of_group: "دسته واگذار شونده"
306
  field_assigned_to_role: "نقش واگذار شونده"
307
  field_text: فیلد متنی
308
  field_visible: آشکار
309
  
310
  setting_app_title: نام برنامه
311
  setting_app_subtitle: زیرنام برنامه
312
  setting_welcome_text: نوشتار خوش‌آمد گویی
313
  setting_default_language: زبان پیش‌گزیده
314
  setting_login_required: الزامی بودن ورود
315
  setting_self_registration: خود نام نویسی
316
  setting_attachment_max_size: بیشترین اندازه پیوست
317
  setting_issues_export_limit: کرانه صدور پییامدها
318
  setting_mail_from: نشانی فرستنده ایمیل
319
  setting_bcc_recipients: گیرندگان ایمیل دیده نشوند (bcc)
320
  setting_plain_text_mail: ایمیل نوشته ساده (بدون HTML)
321
  setting_host_name: نام میزبان و نشانی
322
  setting_text_formatting: قالب بندی نوشته
323
  setting_wiki_compression: فشرده‌سازی پیشینه ویکی
324
  setting_feeds_limit: کرانه محتوای خوراک
325
  setting_default_projects_public: حالت پیش‌گزیده پروژه‌های تازه، همگانی است
326
  setting_autofetch_changesets: دریافت خودکار تغییرات
327
  setting_sys_api_enabled: فعال سازی وب سرویس برای سرپرستی انباره
328
  setting_commit_ref_keywords: کلیدواژه‌های نشانه
329
  setting_commit_fix_keywords: کلیدواژه‌های انجام
330
  setting_autologin: ورود خودکار
331
  setting_date_format: قالب تاریخ
332
  setting_time_format: قالب زمان
333
  setting_cross_project_issue_relations: توانایی وابستگی میان پروژه‌ای پیامدها
334
  setting_issue_list_default_columns: ستون‌های پیش‌گزیده نمایش داده شده در فهرست پیامدها
335
  setting_emails_header: سرنویس ایمیل‌ها
336
  setting_emails_footer: پانویس ایمیل‌ها
337
  setting_protocol: پیوندنامه
338
  setting_per_page_options: گزینه‌های اندازه داده‌های هر برگ
339
  setting_user_format: قالب نمایشی کاربران
340
  setting_activity_days_default: روزهای نمایش داده شده در گزارش پروژه
341
  setting_display_subprojects_issues: پیش‌گزیده نمایش پیامدهای زیرپروژه در پروژه پدر
342
  setting_enabled_scm: فعالسازی SCM
343
  setting_mail_handler_body_delimiters: "بریدن ایمیل‌ها پس از یکی از این ردیف‌ها"
344
  setting_mail_handler_api_enabled: فعالسازی وب سرویس برای ایمیل‌های آمده
345
  setting_mail_handler_api_key: کلید API
346
  setting_sequential_project_identifiers: ساخت پشت سر هم شناسه پروژه
347
  setting_gravatar_enabled: کاربرد Gravatar برای عکس کاربر
348
  setting_gravatar_default: عکس Gravatar پیش‌گزیده
349
  setting_diff_max_lines_displayed: بیشترین اندازه ردیف‌های تفاوت نشان داده شده
350
  setting_file_max_size_displayed: بیشترین اندازه پرونده‌های نمایش داده شده درون خطی
351
  setting_repository_log_display_limit: بیشترین شمار نگارش‌های نمایش داده شده در گزارش پرونده
352
  setting_openid: پذیرش ورود و نام نویسی با OpenID
353
  setting_password_min_length: کمترین اندازه گذرواژه
354
  setting_new_project_user_role_id: نقش داده شده به کاربری که سرپرست نیست و پروژه می‌سازد
355
  setting_default_projects_modules: پیمانه‌های پیش‌گزیده فعال برای پروژه‌های تازه
356
  setting_issue_done_ratio: برآورد اندازه انجام شده پیامد با
357
  setting_issue_done_ratio_issue_field: کاربرد فیلد پیامد
358
  setting_issue_done_ratio_issue_status: کاربرد وضعیت پیامد
359
  setting_start_of_week: آغاز گاهشمار از
360
  setting_rest_api_enabled: فعالسازی وب سرویس‌های REST
361
  setting_cache_formatted_text: نهان سازی نوشته‌های قالب بندی شده
362
  setting_default_notification_option: آگاه سازی پیش‌گزیده
363
  setting_commit_logtime_enabled: فعالسازی زمان گذاشته شده
364
  setting_commit_logtime_activity_id: کار زمان گذاشته شده
365
  setting_gantt_items_limit: بیشترین شمار بخش‌های نمایش داده شده در نمودار گانت
366
  
367
  permission_add_project: ساخت پروژه
368
  permission_add_subprojects: ساخت زیرپروژه
369
  permission_edit_project: ویرایش پروژه
370
  permission_select_project_modules: گزینش پیمانه‌های پروژه
371
  permission_manage_members: سرپرستی اعضا
372
  permission_manage_project_activities: سرپرستی کارهای پروژه
373
  permission_manage_versions: سرپرستی نگارش‌ها
374
  permission_manage_categories: سرپرستی دسته‌های پیامد
375
  permission_view_issues: دیدن پیامدها
376
  permission_add_issues: افزودن پیامدها
377
  permission_edit_issues: ویرایش پیامدها
378
  permission_manage_issue_relations: سرپرستی وابستگی پیامدها
379
  permission_add_issue_notes: افزودن یادداشت
380
  permission_edit_issue_notes: ویرایش یادداشت
381
  permission_edit_own_issue_notes: ویرایش یادداشت خود
382
  permission_move_issues: جابجایی پیامدها
383
  permission_delete_issues: پاک کردن پیامدها
384
  permission_manage_public_queries: سرپرستی پرس‌وجوهای همگانی
385
  permission_save_queries: ذخیره سازی پرس‌وجوها
386
  permission_view_gantt: دیدن نمودار گانت
387
  permission_view_calendar: دیدن گاهشمار
388
  permission_view_issue_watchers: دیدن فهرست دیده‌بان‌ها
389
  permission_add_issue_watchers: افزودن دیده‌بان‌ها
390
  permission_delete_issue_watchers: پاک کردن دیده‌بان‌ها
391
  permission_log_time: نوشتن زمان گذاشته شده
392
  permission_view_time_entries: دیدن زمان گذاشته شده
393
  permission_edit_time_entries: ویرایش زمان گذاشته شده
394
  permission_edit_own_time_entries: ویرایش زمان گذاشته شده خود
395
  permission_manage_news: سرپرستی رویدادها
396
  permission_comment_news: گذاشتن دیدگاه روی رویدادها
397
  permission_manage_documents: سرپرستی نوشتارها
398
  permission_view_documents: دیدن نوشتارها
399
  permission_manage_files: سرپرستی پرونده‌ها
400
  permission_view_files: دیدن پرونده‌ها
401
  permission_manage_wiki: سرپرستی ویکی
402
  permission_rename_wiki_pages: نامگذاری برگه ویکی
403
  permission_delete_wiki_pages: پاک کردن برگه ویکی
404
  permission_view_wiki_pages: دیدن ویکی
405
  permission_view_wiki_edits: دیدن پیشینه ویکی
406
  permission_edit_wiki_pages: ویرایش برگه‌های ویکی
407
  permission_delete_wiki_pages_attachments: پاک کردن پیوست‌های برگه ویکی
408
  permission_protect_wiki_pages: نگه‌داری برگه‌های ویکی
409
  permission_manage_repository: سرپرستی انباره
410
  permission_browse_repository: چریدن در انباره
411
  permission_view_changesets: دیدن تغییرات
412
  permission_commit_access: دسترسی تغییر انباره
413
  permission_manage_boards: سرپرستی انجمن‌ها
414
  permission_view_messages: دیدن پیام‌ها
415
  permission_add_messages: فرستادن پیام‌ها
416
  permission_edit_messages: ویرایش پیام‌ها
417
  permission_edit_own_messages: ویرایش پیام خود
418
  permission_delete_messages: پاک کردن پیام‌ها
419
  permission_delete_own_messages: پاک کردن پیام خود
420
  permission_export_wiki_pages: صدور برگه‌های ویکی
421
  permission_manage_subtasks: سرپرستی زیرکارها
422
  
423
  project_module_issue_tracking: پیگیری پیامدها
424
  project_module_time_tracking: پیگیری زمان
425
  project_module_news: رویدادها
426
  project_module_documents: نوشتارها
427
  project_module_files: پرونده‌ها
428
  project_module_wiki: ویکی
429
  project_module_repository: انباره
430
  project_module_boards: انجمن‌ها
431
  project_module_calendar: گاهشمار
432
  project_module_gantt: گانت
433
  
434
  label_user: کاربر
435
  label_user_plural: کاربر
436
  label_user_new: کاربر تازه
437
  label_user_anonymous: ناشناس
438
  label_project: پروژه
439
  label_project_new: پروژه تازه
440
  label_project_plural: پروژه
441
  label_x_projects:
442
    zero:  بدون پروژه
443
    one:   "1 پروژه"
444
    other: "%{count} پروژه"
445
  label_project_all: همه پروژه‌ها
446
  label_project_latest: آخرین پروژه‌ها
447
  label_issue: پیامد
448
  label_issue_new: پیامد تازه
449
  label_issue_plural: پیامد
450
  label_issue_view_all: دیدن همه پیامدها
451
  label_issues_by: "دسته‌بندی پیامدها با %{value}"
452
  label_issue_added: پیامد افزوده شد
453
  label_issue_updated: پیامد بروز شد
454
  label_document: نوشتار
455
  label_document_new: نوشتار تازه
456
  label_document_plural: نوشتار
457
  label_document_added: نوشتار افزوده شد
458
  label_role: نقش
459
  label_role_plural: نقش
460
  label_role_new: نقش تازه
461
  label_role_and_permissions: نقش‌ها و پروانه‌ها
462
  label_member: عضو
463
  label_member_new: عضو تازه
464
  label_member_plural: عضو
465
  label_tracker: پیگرد
466
  label_tracker_plural: پیگرد
467
  label_tracker_new: پیگرد تازه
468
  label_workflow: گردش کار
469
  label_issue_status: وضعیت پیامد
470
  label_issue_status_plural: وضعیت پیامد
471
  label_issue_status_new: وضعیت تازه
472
  label_issue_category: دسته پیامد
473
  label_issue_category_plural: دسته پیامد
474
  label_issue_category_new: دسته تازه
475
  label_custom_field: فیلد سفارشی
476
  label_custom_field_plural: فیلد سفارشی
477
  label_custom_field_new: فیلد سفارشی تازه
478
  label_enumerations: برشمردنی‌ها
479
  label_enumeration_new: مقدار تازه
480
  label_information: داده
481
  label_information_plural: داده
482
  label_please_login: وارد شوید
483
  label_register: نام نویسی کنید
484
  label_login_with_open_id_option: یا با OpenID وارد شوید
485
  label_password_lost: بازیافت گذرواژه
486
  label_home: سرآغاز
487
  label_my_page: برگه من
488
  label_my_account: حساب من
489
  label_my_projects: پروژه‌های من
490
  label_my_page_block: بخش برگه من
491
  label_administration: سرپرستی
492
  label_login: ورود
493
  label_logout: خروج
494
  label_help: راهنما
495
  label_reported_issues: پیامدهای گزارش شده
496
  label_assigned_to_me_issues: پیامدهای واگذار شده به من
497
  label_last_login: آخرین ورود
498
  label_registered_on: نام نویسی شده در
499
  label_activity: گزارش
500
  label_overall_activity: گزارش روی هم رفته
501
  label_user_activity: "گزارش %{value}"
502
  label_new: تازه
503
  label_logged_as: "نام کاربری:"
504
  label_environment: محیط
505
  label_authentication: شناسایی
506
  label_auth_source: روش شناسایی
507
  label_auth_source_new: روش شناسایی تازه
508
  label_auth_source_plural: روش شناسایی
509
  label_subproject_plural: زیرپروژه
510
  label_subproject_new: زیرپروژه تازه
511
  label_and_its_subprojects: "%{value} و زیرپروژه‌هایش"
512
  label_min_max_length: کمترین و بیشترین اندازه
513
  label_list: فهرست
514
  label_date: تاریخ
515
  label_integer: شماره درست
516
  label_float: شماره شناور
517
  label_boolean: درست/نادرست
518
  label_string: نوشته
519
  label_text: نوشته بلند
520
  label_attribute: نشانه
521
  label_attribute_plural: نشانه
522
  label_download: "%{count} بار دریافت شده"
523
  label_download_plural: "%{count} بار دریافت شده"
524
  label_no_data: هیچ داده‌ای برای نمایش نیست
525
  label_change_status: جایگزینی وضعیت
526
  label_history: پیشینه
527
  label_attachment: پرونده
528
  label_attachment_new: پرونده تازه
529
  label_attachment_delete: پاک کردن پرونده
530
  label_attachment_plural: پرونده
531
  label_file_added: پرونده افزوده شد
532
  label_report: گزارش
533
  label_report_plural: گزارش
534
  label_news: رویداد
535
  label_news_new: افزودن رویداد
536
  label_news_plural: رویداد
537
  label_news_latest: آخرین رویدادها
538
  label_news_view_all: دیدن همه رویدادها
539
  label_news_added: رویداد افزوده شد
540
  label_settings: پیکربندی
541
  label_overview: در یک نگاه
542
  label_version: نگارش
543
  label_version_new: نگارش تازه
544
  label_version_plural: نگارش
545
  label_close_versions: بستن نگارش‌های انجام شده
546
  label_confirmation: بررسی
547
  label_export_to: 'قالب‌های دیگر:'
548
  label_read: خواندن...
549
  label_public_projects: پروژه‌های همگانی
550
  label_open_issues: باز
551
  label_open_issues_plural: باز
552
  label_closed_issues: بسته
553
  label_closed_issues_plural: بسته
554
  label_x_open_issues_abbr_on_total:
555
    zero:  0 باز از %{total}
556
    one:   1 باز از %{total}
557
    other: "%{count} باز از %{total}"
558
  label_x_open_issues_abbr:
559
    zero:  0 باز
560
    one:   1 باز
561
    other: "%{count} باز"
562
  label_x_closed_issues_abbr:
563
    zero:  0 بسته
564
    one:   1 بسته
565
    other: "%{count} بسته"
566
  label_total: جمله
567
  label_permissions: پروانه‌ها
568
  label_current_status: وضعیت کنونی
569
  label_new_statuses_allowed: وضعیت‌های پذیرفتنی تازه
570
  label_all: همه
571
  label_none: هیچ
572
  label_nobody: هیچکس
573
  label_next: پسین
574
  label_previous: پیشین
575
  label_used_by: به کار رفته در
576
  label_details: ریزه‌کاری
577
  label_add_note: افزودن یادداشت
578
  label_per_page: ردیف‌ها در هر برگه
579
  label_calendar: گاهشمار
580
  label_months_from: از ماه
581
  label_gantt: گانت
582
  label_internal: درونی
583
  label_last_changes: "%{count} تغییر آخر"
584
  label_change_view_all: دیدن همه تغییرات
585
  label_personalize_page: سفارشی نمودن این برگه
586
  label_comment: دیدگاه
587
  label_comment_plural: دیدگاه
588
  label_x_comments:
589
    zero: بدون دیدگاه
590
    one: 1 دیدگاه
591
    other: "%{count} دیدگاه"
592
  label_comment_add: افزودن دیدگاه
593
  label_comment_added: دیدگاه افزوده شد
594
  label_comment_delete: پاک کردن دیدگاه‌ها
595
  label_query: پرس‌وجوی سفارشی
596
  label_query_plural: پرس‌وجوی سفارشی
597
  label_query_new: پرس‌وجوی تازه
598
  label_filter_add: افزودن پالایه
599
  label_filter_plural: پالایه
600
  label_equals: برابر است با
601
  label_not_equals: برابر نیست با
602
  label_in_less_than: کمتر است از
603
  label_in_more_than: بیشتر است از
604
  label_greater_or_equal: بیشتر یا برابر است با
605
  label_less_or_equal: کمتر یا برابر است با
606
  label_in: در
607
  label_today: امروز
608
  label_all_time: همیشه
609
  label_yesterday: دیروز
610
  label_this_week: این هفته
611
  label_last_week: هفته پیشین
612
  label_last_n_days: "%{count} روز گذشته"
613
  label_this_month: این ماه
614
  label_last_month: ماه پیشین
615
  label_this_year: امسال
616
  label_date_range: بازه تاریخ
617
  label_less_than_ago: کمتر از چند روز پیشین
618
  label_more_than_ago: بیشتر از چند روز پیشین
619
  label_ago: روز پیشین
620
  label_contains: دارد
621
  label_not_contains: ندارد
622
  label_day_plural: روز
623
  label_repository: انباره
624
  label_repository_plural: انباره
625
  label_browse: چریدن
626
  label_modification: "%{count} جایگذاری"
627
  label_modification_plural: "%{count} جایگذاری"
628
  label_branch: شاخه
629
  label_tag: برچسب
630
  label_revision: بازبینی
631
  label_revision_plural: بازبینی
632
  label_revision_id: "بازبینی %{value}"
633
  label_associated_revisions: بازبینی‌های وابسته
634
  label_added: افزوده شده
635
  label_modified: پیراسته شده
636
  label_copied: رونویسی شده
637
  label_renamed: نامگذاری شده
638
  label_deleted: پاکسازی شده
639
  label_latest_revision: آخرین بازبینی
640
  label_latest_revision_plural: آخرین بازبینی
641
  label_view_revisions: دیدن بازبینی‌ها
642
  label_view_all_revisions: دیدن همه بازبینی‌ها
643
  label_max_size: بیشترین اندازه
644
  label_sort_highest: بردن به آغاز
645
  label_sort_higher: بردن به بالا
646
  label_sort_lower: بردن به پایین
647
  label_sort_lowest: بردن به پایان
648
  label_roadmap: چشم‌انداز
649
  label_roadmap_due_in: "سررسید در %{value}"
650
  label_roadmap_overdue: "%{value} دیرکرد"
651
  label_roadmap_no_issues: هیچ پیامدی برای این نگارش نیست
652
  label_search: جستجو
653
  label_result_plural: دست‌آورد
654
  label_all_words: همه واژه‌ها
655
  label_wiki: ویکی
656
  label_wiki_edit: ویرایش ویکی
657
  label_wiki_edit_plural: ویرایش ویکی
658
  label_wiki_page: برگه ویکی
659
  label_wiki_page_plural: برگه ویکی
660
  label_index_by_title: شاخص بر اساس نام
661
  label_index_by_date: شاخص بر اساس تاریخ
662
  label_current_version: نگارش کنونی
663
  label_preview: پیش‌نمایش
664
  label_feed_plural: خوراک
665
  label_changes_details: ریز همه جایگذاری‌ها
666
  label_issue_tracking: پیگیری پیامد
667
  label_spent_time: زمان گذاشته شده
668
  label_overall_spent_time: زمان گذاشته شده روی هم
669
  label_f_hour: "%{value} ساعت"
670
  label_f_hour_plural: "%{value} ساعت"
671
  label_time_tracking: پیگیری زمان
672
  label_change_plural: جایگذاری
673
  label_statistics: سرشماری
674
  label_commits_per_month: تغییر در هر ماه
675
  label_commits_per_author: تغییر هر نویسنده
676
  label_view_diff: دیدن تفاوت‌ها
677
  label_diff_inline: همراستا
678
  label_diff_side_by_side: کنار به کنار
679
  label_options: گزینه‌ها
680
  label_copy_workflow_from: رونویسی گردش کار از روی
681
  label_permissions_report: گزارش پروانه‌ها
682
  label_watched_issues: پیامدهای دیده‌بانی شده
683
  label_related_issues: پیامدهای وابسته
684
  label_applied_status: وضعیت به کار رفته
685
  label_loading: بار گذاری...
686
  label_relation_new: وابستگی تازه
687
  label_relation_delete: پاک کردن وابستگی
688
  label_relates_to: وابسته به
689
  label_duplicates: نگارش دیگری از
690
  label_duplicated_by: نگارشی دیگر در
691
  label_blocks: بازداشت‌ها
692
  label_blocked_by: بازداشت به دست
693
  label_precedes: جلوتر است از
694
  label_follows: پستر است از
695
  label_end_to_start: پایان به آغاز
696
  label_end_to_end: پایان به پایان
697
  label_start_to_start: آغاز به آغاز
698
  label_start_to_end: آغاز به پایان
699
  label_stay_logged_in: وارد شده بمانید
700
  label_disabled: غیرفعال
701
  label_show_completed_versions: نمایش نگارش‌های انجام شده
702
  label_me: من
703
  label_board: انجمن
704
  label_board_new: انجمن تازه
705
  label_board_plural: انجمن
706
  label_board_locked: قفل شده
707
  label_board_sticky: چسبناک
708
  label_topic_plural: سرفصل
709
  label_message_plural: پیام
710
  label_message_last: آخرین پیام
711
  label_message_new: پیام تازه
712
  label_message_posted: پیام افزوده شد
713
  label_reply_plural: پاسخ
714
  label_send_information: فرستادن داده‌های حساب به کاربر
715
  label_year: سال
716
  label_month: ماه
717
  label_week: هفته
718
  label_date_from: از
719
  label_date_to: تا
720
  label_language_based: بر اساس زبان کاربر
721
  label_sort_by: "جور کرد با %{value}"
722
  label_send_test_email: فرستادن ایمیل آزمایشی
723
  label_feeds_access_key: کلید دسترسی RSS
724
  label_missing_feeds_access_key: کلید دسترسی RSS در دسترس نیست
725
  label_feeds_access_key_created_on: "کلید دسترسی RSS %{value} پیش ساخته شده است"
726
  label_module_plural: پیمانه
727
  label_added_time_by: "افزوده شده به دست %{author} در %{age} پیش"
728
  label_updated_time_by: "بروز شده به دست %{author} در %{age} پیش"
729
  label_updated_time: "بروز شده در %{value} پیش"
730
  label_jump_to_a_project: پرش به یک پروژه...
731
  label_file_plural: پرونده
732
  label_changeset_plural: تغییر
733
  label_default_columns: ستون‌های پیش‌گزیده
734
  label_no_change_option: (بدون تغییر)
735
  label_bulk_edit_selected_issues: ویرایش دسته‌ای پیامدهای گزینش شده
736
  label_theme: پوسته
737
  label_default: پیش‌گزیده
738
  label_search_titles_only: تنها نام‌ها جستجو شود
739
  label_user_mail_option_all: "برای هر رویداد در همه پروژه‌ها"
740
  label_user_mail_option_selected: "برای هر رویداد تنها در پروژه‌های گزینش شده..."
741
  label_user_mail_option_none: "هیچ رویدادی"
742
  label_user_mail_option_only_my_events: "تنها برای چیزهایی که دیده‌بان هستم یا در آن‌ها درگیر هستم"
743
  label_user_mail_option_only_assigned: "تنها برای چیزهایی که به من واگذار شده"
744
  label_user_mail_option_only_owner: "تنها برای چیزهایی که من دارنده آن‌ها هستم"
745
  label_user_mail_no_self_notified: "نمی‌خواهم از تغییراتی که خودم می‌دهم آگاه شوم"
746
  label_registration_activation_by_email: فعالسازی حساب با ایمیل
747
  label_registration_manual_activation: فعالسازی حساب دستی
748
  label_registration_automatic_activation: فعالسازی حساب خودکار
749
  label_display_per_page: "ردیف‌ها در هر برگه: %{value}"
750
  label_age: سن
751
  label_change_properties: ویرایش ویژگی‌ها
752
  label_general: همگانی
753
  label_more: بیشتر
754
  label_scm: SCM
755
  label_plugins: افزونه‌ها
756
  label_ldap_authentication: شناساییLDAP
757
  label_downloads_abbr: دریافت
758
  label_optional_description: یادداشت دلخواه
759
  label_add_another_file: افزودن پرونده دیگر
760
  label_preferences: پسندها
761
  label_chronological_order: به ترتیب تاریخ
762
  label_reverse_chronological_order: برعکس ترتیب تاریخ
763
  label_planning: برنامه ریزی
764
  label_incoming_emails: ایمیل‌های آمده
765
  label_generate_key: ساخت کلید
766
  label_issue_watchers: دیده‌بان‌ها
767
  label_example: نمونه
768
  label_display: نمایش
769
  label_sort: جور کرد
770
  label_ascending: افزایشی
771
  label_descending: کاهشی
772
  label_date_from_to: از %{start} تا %{end}
773
  label_wiki_content_added: برگه ویکی افزوده شد
774
  label_wiki_content_updated: برگه ویکی بروز شد
775
  label_group: دسته
776
  label_group_plural: دسته
777
  label_group_new: دسته تازه
778
  label_time_entry_plural: زمان گذاشته شده
779
  label_version_sharing_none: بدون اشتراک
780
  label_version_sharing_descendants: با زیر پروژه‌ها
781
  label_version_sharing_hierarchy: با رشته پروژه‌ها
782
  label_version_sharing_tree: با درخت پروژه
783
  label_version_sharing_system: با همه پروژه‌ها
784
  label_update_issue_done_ratios: بروز رسانی اندازه انجام شده پیامد
785
  label_copy_source: منبع
786
  label_copy_target: مقصد
787
  label_copy_same_as_target: مانند مقصد
788
  label_display_used_statuses_only: تنها وضعیت‌هایی نشان داده شوند که در این پیگرد به کار رفته‌اند
789
  label_api_access_key: کلید دسترسی API
790
  label_missing_api_access_key: کلید دسترسی API در دسترس نیست
791
  label_api_access_key_created_on: "کلید دسترسی API %{value} پیش ساخته شده است"
792
  label_profile: نمایه
793
  label_subtask_plural: زیرکار
794
  label_project_copy_notifications: در هنگام رونویسی پروژه ایمیل‌های آگاه‌سازی را بفرست
795
  label_principal_search: "جستجو برای کاربر یا دسته:"
796
  label_user_search: "جستجو برای کاربر:"
797
  
798
  button_login: ورود
799
  button_submit: واگذاری
800
  button_save: نگهداری
801
  button_check_all: گزینش همه
802
  button_uncheck_all: گزینش هیچ
803
  button_delete: پاک
804
  button_create: ساخت
805
  button_create_and_continue: ساخت و ادامه
806
  button_test: آزمایش
807
  button_edit: ویرایش
808
  button_edit_associated_wikipage: "ویرایش برگه ویکی وابسته: %{page_title}"
809
  button_add: افزودن
810
  button_change: ویرایش
811
  button_apply: انجام
812
  button_clear: پاک
813
  button_lock: گذاشتن قفل
814
  button_unlock: برداشتن قفل
815
  button_download: دریافت
816
  button_list: فهرست
817
  button_view: دیدن
818
  button_move: جابجایی
819
  button_move_and_follow: جابجایی و ادامه
820
  button_back: برگشت
821
  button_cancel: بازگشت
822
  button_activate: فعالسازی
823
  button_sort: جور کرد
824
  button_log_time: زمان‌نویسی
825
  button_rollback: برگرد به این نگارش
826
  button_watch: دیده‌بانی
827
  button_unwatch: نا‌دیده‌بانی
828
  button_reply: پاسخ
829
  button_archive: بایگانی
830
  button_unarchive: برگشت از بایگانی
831
  button_reset: بازنشانی
832
  button_rename: نامگذاری
833
  button_change_password: جایگزینی گذرواژه
834
  button_copy: رونوشت
835
  button_copy_and_follow: رونوشت و ادامه
836
  button_annotate: یادداشت
837
  button_update: بروز رسانی
838
  button_configure: پیکربندی
839
  button_quote: نقل قول
840
  button_duplicate: نگارش دیگر
841
  button_show: نمایش
842
  
843
  status_active: فعال
844
  status_registered: نام‌نویسی شده
845
  status_locked: قفل
846
  
847
  version_status_open: باز
848
  version_status_locked: قفل
849
  version_status_closed: بسته
850

  
851
  field_active: فعال
852
  
853
  text_select_mail_notifications: فرمان‌هایی که برای آن‌ها باید ایمیل فرستاده شود را برگزینید.
854
  text_regexp_info: برای نمونه ^[A-Z0-9]+$
855
  text_min_max_length_info: 0 یعنی بدون کران
856
  text_project_destroy_confirmation: آیا براستی می‌خواهید این پروژه و همه داده‌های آن را پاک کنید؟
857
  text_subprojects_destroy_warning: "زیرپروژه‌های آن: %{value} هم پاک خواهند شد."
858
  text_workflow_edit: یک نقش و یک پیگرد را برای ویرایش گردش کار برگزینید
859
  text_are_you_sure: آیا این کار انجام شود؟
860
  text_are_you_sure_with_children: "آیا پیامد و همه زیرپیامدهای آن پاک شوند؟"
861
  text_journal_changed: "«%{label}» از «%{old}» به «%{new}» جایگزین شد"
862
  text_journal_set_to: "«%{label}» به «%{value}» نشانده شد"
863
  text_journal_deleted: "«%{label}» پاک شد (%{old})"
864
  text_journal_added: "«%{label}»، «%{value}» را افزود"
865
  text_tip_task_begin_day: روز آغاز پیامد
866
  text_tip_task_end_day: روز پایان پیامد
867
  text_tip_task_begin_end_day: روز آغاز و پایان پیامد
868
  text_project_identifier_info: 'تنها نویسه‌های کوچک (a-z)، شماره‌ها و خط تیره پذیرفتنی است.<br />پس از ذخیره سازی، شناسه نمی‌تواند جایگزین شود.'
869
  text_caracters_maximum: "بیشترین اندازه %{count} است."
870
  text_caracters_minimum: "کمترین اندازه %{count} است."
871
  text_length_between: "باید میان %{min} و %{max} نویسه باشد."
872
  text_tracker_no_workflow: هیچ گردش کاری برای این پیگرد مشخص نشده است
873
  text_unallowed_characters: نویسه‌های ناپسند
874
  text_comma_separated: چند مقدار پذیرفتنی است (با «,» از هم جدا شوند).
875
  text_line_separated: چند مقدار پذیرفتنی است (هر مقدار در یک خط).
876
  text_issues_ref_in_commit_messages: نشانه روی و بستن پیامدها در پیام‌های انباره
877
  text_issue_added: "پیامد %{id} به دست %{author} گزارش شد."
878
  text_issue_updated: "پیامد %{id} به دست %{author} بروز شد."
879
  text_wiki_destroy_confirmation: آیا براستی می‌خواهید این ویکی و همه محتوای آن را پاک کنید؟
880
  text_issue_category_destroy_question: "برخی پیامدها (%{count}) به این دسته واگذار شده‌اند. می‌خواهید چه کنید؟"
881
  text_issue_category_destroy_assignments: پاک کردن واگذاری به دسته
882
  text_issue_category_reassign_to: واگذاری دوباره پیامدها به این دسته
883
  text_user_mail_option: "برای پروژه‌های گزینش نشده، تنها ایمیل‌هایی درباره چیزهایی که دیده‌بان یا درگیر آن‌ها هستید دریافت خواهید کرد (مانند پیامدهایی که نویسنده آن‌ها هستید یا به شما واگذار شده‌اند)."
884
  text_no_configuration_data: "نقش‌ها، پیگردها، وضعیت‌های پیامد و گردش کار هنوز پیکربندی نشده‌اند. \nبه سختی پیشنهاد می‌شود که پیکربندی پیش‌گزیده را بار کنید. سپس می‌توانید آن را ویرایش کنید."
885
  text_load_default_configuration: بارگذاری پیکربندی پیش‌گزیده
886
  text_status_changed_by_changeset: "در تغییر %{value} بروز شده است."
887
  text_time_logged_by_changeset: "در تغییر %{value} نوشته شده است."
888
  text_issues_destroy_confirmation: 'آیا براستی می‌خواهید پیامدهای گزینش شده را پاک کنید؟'
889
  text_select_project_modules: 'پیمانه‌هایی که باید برای این پروژه فعال شوند را برگزینید:'
890
  text_default_administrator_account_changed: حساب سرپرستی پیش‌گزیده جایگزین شد
891
  text_file_repository_writable: پوشه پیوست‌ها نوشتنی است
892
  text_plugin_assets_writable: پوشه دارایی‌های افزونه‌ها نوشتنی است
893
  text_rmagick_available: RMagick در دسترس است (اختیاری)
894
  text_destroy_time_entries_question: "%{hours} ساعت روی پیامدهایی که می‌خواهید پاک کنید کار گزارش شده است. می‌خواهید چه کنید؟"
895
  text_destroy_time_entries: ساعت‌های گزارش شده پاک شوند
896
  text_assign_time_entries_to_project: ساعت‌های گزارش شده به پروژه واگذار شوند
897
  text_reassign_time_entries: 'ساعت‌های گزارش شده به این پیامد واگذار شوند:'
898
  text_user_wrote: "%{value} نوشت:"
899
  text_enumeration_destroy_question: "%{count} داده به این برشمردنی وابسته شده‌اند."
900
  text_enumeration_category_reassign_to: 'به این برشمردنی وابسته شوند:'
901
  text_email_delivery_not_configured: "دریافت ایمیل پیکربندی نشده است و آگاه‌سازی‌ها غیر فعال هستند.\nکارگزار SMTP خود را در config/configuration.yml پیکربندی کنید و برنامه را بازنشانی کنید تا فعال شوند."
902
  text_repository_usernames_mapping: "کاربر Redmine که به هر نام کاربری پیام‌های انباره نگاشت می‌شود را برگزینید.\nکاربرانی که نام کاربری یا ایمیل همسان دارند، خود به خود نگاشت می‌شوند."
903
  text_diff_truncated: '... این تفاوت بریده شده چون بیشتر از بیشترین اندازه نمایش دادنی است.'
904
  text_custom_field_possible_values_info: 'یک خط برای هر مقدار'
905
  text_wiki_page_destroy_question: "این برگه %{descendants} زیربرگه دارد.می‌خواهید چه کنید؟"
906
  text_wiki_page_nullify_children: "زیربرگه‌ها برگه ریشه شوند"
907
  text_wiki_page_destroy_children: "زیربرگه‌ها و زیربرگه‌های آن‌ها پاک شوند"
908
  text_wiki_page_reassign_children: "زیربرگه‌ها به زیر این برگه پدر بروند"
909
  text_own_membership_delete_confirmation: "شما دارید برخی یا همه پروانه‌های خود را برمی‌دارید و شاید پس از این دیگر نتوانید این پروژه را ویرایش کنید.\nآیا می‌خواهید این کار را بکنید؟"
910
  text_zoom_in: درشتنمایی
911
  text_zoom_out: ریزنمایی
912
  
913
  default_role_manager: سرپرست
914
  default_role_developer: برنامه‌نویس
915
  default_role_reporter: گزارش‌دهنده
916
  default_tracker_bug: ایراد
917
  default_tracker_feature: ویژگی
918
  default_tracker_support: پشتیبانی
919
  default_issue_status_new: تازه
920
  default_issue_status_in_progress: در گردش
921
  default_issue_status_resolved: درست شده
922
  default_issue_status_feedback: بازخورد
923
  default_issue_status_closed: بسته
924
  default_issue_status_rejected: برگشت خورده
925
  default_doc_category_user: نوشتار کاربر
926
  default_doc_category_tech: نوشتار فنی
927
  default_priority_low: پایین
928
  default_priority_normal: میانه
929
  default_priority_high: بالا
930
  default_priority_urgent: زود
931
  default_priority_immediate: بیدرنگ
932
  default_activity_design: طراحی
933
  default_activity_development: ساخت
934
  
935
  enumeration_issue_priorities: برتری‌های پیامد
936
  enumeration_doc_categories: دسته‌های نوشتار
937
  enumeration_activities: کارها (پیگیری زمان)
938
  enumeration_system_activity: کار سامانه
939

  
940
  text_tip_issue_begin_day: پیامد در این روز آغاز می‌شود
941
  field_warn_on_leaving_unsaved: هنگام ترک برگه‌ای که نوشته‌های آن نگهداری نشده، به من هشدار بده
942
  text_tip_issue_begin_end_day: پیامد در این روز آغاز می‌شود و پایان می‌پذیرد
943
  text_tip_issue_end_day: پیامد در این روز پایان می‌پذیرد
944
  text_warn_on_leaving_unsaved: این برگه دارای نوشته‌های نگهداری نشده است که اگر آن را ترک کنید، از میان می‌روند.
945
  label_my_queries: جستارهای سفارشی من
946
  text_journal_changed_no_detail: "%{label} بروز شد"
947
  label_news_comment_added: دیدگاه به یک رویداد افزوده شد
948
  button_expand_all: باز کردن همه
949
  button_collapse_all: بستن همه
950
  label_additional_workflow_transitions_for_assignee: زمانی که به کاربر واگذار شده، گذارهای بیشتر پذیرفته می‌شود
951
  label_additional_workflow_transitions_for_author: زمانی که کاربر نویسنده است، گذارهای بیشتر پذیرفته می‌شود
952
  label_bulk_edit_selected_time_entries: ویرایش دسته‌ای زمان‌های گزارش شده گزینش شده
953
  text_time_entries_destroy_confirmation: آیا می‌خواهید زمان‌های گزارش شده گزینش شده پاک شوند؟
954
  label_role_anonymous: ناشناس
955
  label_role_non_member: غیر عضو
956
  label_issue_note_added: یادداشت افزوده شد
957
  label_issue_status_updated: وضعیت بروز شد
958
  label_issue_priority_updated: برتری بروز شد
959
  label_issues_visibility_own: Issues created by or assigned to the user
960
  field_issues_visibility: Issues visibility
961
  label_issues_visibility_all: All issues
962
  permission_set_own_issues_private: Set own issues public or private
963
  field_is_private: Private
964
  permission_set_issues_private: Set issues public or private
965
  label_issues_visibility_public: All non private issues
966
  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
967
  field_commit_logs_encoding: کدگذاری پیام‌های انباره
968
  field_scm_path_encoding: Path encoding
969
  text_scm_path_encoding_note: "Default: UTF-8"
970
  field_path_to_repository: Path to repository
971
  field_root_directory: Root directory
972
  field_cvs_module: Module
973
  field_cvsroot: CVSROOT
974
  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
975
  text_scm_command: Command
976
  text_scm_command_version: Version
977
  label_git_report_last_commit: Report last commit for files and directories
978
  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
979
  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
980
  notice_issue_successful_create: Issue %{id} created.
981
  label_between: between
982
  setting_issue_group_assignment: Allow issue assignment to groups
983
  label_diff: diff
984
  text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo)
985
  description_query_sort_criteria_direction: Sort direction
986
  description_project_scope: Search scope
987
  description_filter: Filter
988
  description_user_mail_notification: Mail notification settings
989
  description_date_from: Enter start date
990
  description_message_content: Message content
991
  description_available_columns: Available Columns
992
  description_date_range_interval: Choose range by selecting start and end date
993
  description_issue_category_reassign: Choose issue category
994
  description_search: Searchfield
995
  description_notes: Notes
996
  description_date_range_list: Choose range from list
997
  description_choose_project: Projects
998
  description_date_to: Enter end date
999
  description_query_sort_criteria_attribute: Sort attribute
1000
  description_wiki_subpages_reassign: Choose new parent page
1001
  description_selected_columns: Selected Columns
1002
  label_parent_revision: Parent
1003
  label_child_revision: Child
1004
  error_scm_annotate_big_text_file: The entry cannot be annotated, as it exceeds the maximum text file size.
1005
  setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
1006
  button_edit_section: Edit this section
1007
  setting_repositories_encodings: Attachments and repositories encodings
1008
  description_all_columns: All Columns
1009
  button_export: Export
1010
  label_export_options: "%{export_format} export options"
1011
  error_attachment_too_big: This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})
.svn/pristine/1e/1eeb2d3cf254cdaa3fced154da1af384e6d301db.svn-base
1
# Redmine - project management software
2
# Copyright (C) 2006-2011  Jean-Philippe Lang
3
#
4
# This program is free software; you can redistribute it and/or
5
# modify it under the terms of the GNU General Public License
6
# as published by the Free Software Foundation; either version 2
7
# of the License, or (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17

  
18
require File.expand_path('../../test_helper', __FILE__)
19
require 'workflows_controller'
20

  
21
# Re-raise errors caught by the controller.
22
class WorkflowsController; def rescue_action(e) raise e end; end
23

  
24
class WorkflowsControllerTest < ActionController::TestCase
25
  fixtures :roles, :trackers, :workflows, :users, :issue_statuses
26

  
27
  def setup
28
    @controller = WorkflowsController.new
29
    @request    = ActionController::TestRequest.new
30
    @response   = ActionController::TestResponse.new
31
    User.current = nil
32
    @request.session[:user_id] = 1 # admin
33
  end
34

  
35
  def test_index
36
    get :index
37
    assert_response :success
38
    assert_template 'index'
39

  
40
    count = Workflow.count(:all, :conditions => 'role_id = 1 AND tracker_id = 2')
41
    assert_tag :tag => 'a', :content => count.to_s,
42
                            :attributes => { :href => '/workflows/edit?role_id=1&amp;tracker_id=2' }
43
  end
44

  
45
  def test_get_edit
46
    get :edit
47
    assert_response :success
48
    assert_template 'edit'
49
    assert_not_nil assigns(:roles)
50
    assert_not_nil assigns(:trackers)
51
  end
52

  
53
  def test_get_edit_with_role_and_tracker
54
    Workflow.delete_all
55
    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 2, :new_status_id => 3)
56
    Workflow.create!(:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 5)
57

  
58
    get :edit, :role_id => 2, :tracker_id => 1
59
    assert_response :success
60
    assert_template 'edit'
61

  
62
    # used status only
63
    assert_not_nil assigns(:statuses)
64
    assert_equal [2, 3, 5], assigns(:statuses).collect(&:id)
65

  
66
    # allowed transitions
67
    assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
68
                                                 :name => 'issue_status[3][5][]',
69
                                                 :value => 'always',
70
                                                 :checked => 'checked' }
71
    # not allowed
72
    assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
73
                                                 :name => 'issue_status[3][2][]',
74
                                                 :value => 'always',
75
                                                 :checked => nil }
76
    # unused
77
    assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox',
78
                                                    :name => 'issue_status[1][1][]' }
79
  end
80

  
81
  def test_get_edit_with_role_and_tracker_and_all_statuses
82
    Workflow.delete_all
83

  
84
    get :edit, :role_id => 2, :tracker_id => 1, :used_statuses_only => '0'
85
    assert_response :success
86
    assert_template 'edit'
87

  
88
    assert_not_nil assigns(:statuses)
89
    assert_equal IssueStatus.count, assigns(:statuses).size
90

  
91
    assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
92
                                                 :name => 'issue_status[1][1][]',
93
                                                 :value => 'always',
94
                                                 :checked => nil }
95
  end
96

  
97
  def test_post_edit
98
    post :edit, :role_id => 2, :tracker_id => 1,
99
      :issue_status => {
100
        '4' => {'5' => ['always']},
101
        '3' => {'1' => ['always'], '2' => ['always']}
102
      }
103
    assert_redirected_to '/workflows/edit?role_id=2&tracker_id=1'
104

  
105
    assert_equal 3, Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2})
106
    assert_not_nil  Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 2})
107
    assert_nil      Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 5, :new_status_id => 4})
108
  end
109

  
110
  def test_post_edit_with_additional_transitions
111
    post :edit, :role_id => 2, :tracker_id => 1,
112
      :issue_status => {
113
        '4' => {'5' => ['always']},
114
        '3' => {'1' => ['author'], '2' => ['assignee'], '4' => ['author', 'assignee']}
115
      }
116
    assert_redirected_to '/workflows/edit?role_id=2&tracker_id=1'
117

  
118
    assert_equal 4, Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2})
119

  
120
    w = Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 4, :new_status_id => 5})
121
    assert ! w.author
122
    assert ! w.assignee
123
    w = Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 1})
124
    assert w.author
125
    assert ! w.assignee
126
    w = Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 2})
127
    assert ! w.author
128
    assert w.assignee
129
    w = Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 4})
130
    assert w.author
131
    assert w.assignee
132
  end
133

  
134
  def test_clear_workflow
135
    assert Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2}) > 0
136

  
137
    post :edit, :role_id => 2, :tracker_id => 1
138
    assert_equal 0, Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2})
139
  end
140

  
141
  def test_get_copy
142
    get :copy
143
    assert_response :success
144
    assert_template 'copy'
145
  end
146

  
147
  def test_post_copy_one_to_one
148
    source_transitions = status_transitions(:tracker_id => 1, :role_id => 2)
149

  
150
    post :copy, :source_tracker_id => '1', :source_role_id => '2',
151
                :target_tracker_ids => ['3'], :target_role_ids => ['1']
152
    assert_response 302
153
    assert_equal source_transitions, status_transitions(:tracker_id => 3, :role_id => 1)
154
  end
155

  
156
  def test_post_copy_one_to_many
157
    source_transitions = status_transitions(:tracker_id => 1, :role_id => 2)
158

  
159
    post :copy, :source_tracker_id => '1', :source_role_id => '2',
160
                :target_tracker_ids => ['2', '3'], :target_role_ids => ['1', '3']
161
    assert_response 302
162
    assert_equal source_transitions, status_transitions(:tracker_id => 2, :role_id => 1)
163
    assert_equal source_transitions, status_transitions(:tracker_id => 3, :role_id => 1)
164
    assert_equal source_transitions, status_transitions(:tracker_id => 2, :role_id => 3)
165
    assert_equal source_transitions, status_transitions(:tracker_id => 3, :role_id => 3)
166
  end
167

  
168
  def test_post_copy_many_to_many
169
    source_t2 = status_transitions(:tracker_id => 2, :role_id => 2)
170
    source_t3 = status_transitions(:tracker_id => 3, :role_id => 2)
171

  
172
    post :copy, :source_tracker_id => 'any', :source_role_id => '2',
173
                :target_tracker_ids => ['2', '3'], :target_role_ids => ['1', '3']
174
    assert_response 302
175
    assert_equal source_t2, status_transitions(:tracker_id => 2, :role_id => 1)
176
    assert_equal source_t3, status_transitions(:tracker_id => 3, :role_id => 1)
177
    assert_equal source_t2, status_transitions(:tracker_id => 2, :role_id => 3)
178
    assert_equal source_t3, status_transitions(:tracker_id => 3, :role_id => 3)
179
  end
180

  
181
  # Returns an array of status transitions that can be compared
182
  def status_transitions(conditions)
183
    Workflow.find(:all, :conditions => conditions,
184
                        :order => 'tracker_id, role_id, old_status_id, new_status_id').collect {|w| [w.old_status, w.new_status_id]}
185
  end
186
end
.svn/pristine/1e/1ef1c1b3db8e0ec86373a9f847e88d0b2afb5d10.svn-base
1
class AssetsController < ApplicationController
2
end

Also available in: Unified diff