Feature #7360 » default_custom_trunk_r17417.patch
app/controllers/issues_controller.rb | ||
---|---|---|
23 | 23 |
before_action :authorize, :except => [:index, :new, :create] |
24 | 24 |
before_action :find_optional_project, :only => [:index, :new, :create] |
25 | 25 |
before_action :build_new_issue_from_params, :only => [:new, :create] |
26 |
before_action :with_default_query, only: [:index] |
|
26 | 27 |
accept_rss_auth :index, :show |
27 | 28 |
accept_api_auth :index, :show, :create, :update, :destroy |
28 | 29 | |
... | ... | |
414 | 415 | |
415 | 416 |
private |
416 | 417 | |
418 |
def with_default_query |
|
419 |
return if params[:query_id].present? |
|
420 |
return if api_request? |
|
421 |
return if params[:set_filter] && params.key?(:op) && params.key?(:f) |
|
422 |
params[:set_filter] = 1 and return if params[:without_default].present? |
|
423 |
apply_default_query! and return if params[:set_filter] && [:op, :f].all? {|k| !params.key?(k) } |
|
424 |
if session[:issue_query] |
|
425 |
query_id, project_id = session[:issue_query].values_at(:id, :project_id) |
|
426 |
unless query_id && (project_id == @project.id) && IssueQuery.available_query?(@project.id, query_id) |
|
427 |
apply_default_query! |
|
428 |
end |
|
429 |
else |
|
430 |
apply_default_query! |
|
431 |
end |
|
432 |
end |
|
433 | ||
434 |
def apply_default_query! |
|
435 |
if default_query = find_default_query |
|
436 |
params[:query_id] = default_query.id |
|
437 |
end |
|
438 |
end |
|
439 | ||
417 | 440 |
def retrieve_previous_and_next_issue_ids |
418 | 441 |
if params[:prev_issue_id].present? || params[:next_issue_id].present? |
419 | 442 |
@prev_issue_id = params[:prev_issue_id].presence.try(:to_i) |
app/helpers/projects_helper.rb | ||
---|---|---|
95 | 95 |
principals_options_for_select(assignable_users, project.default_assigned_to) |
96 | 96 |
end |
97 | 97 | |
98 |
def project_default_query_options(project) |
|
99 |
grouped = Hash.new {|h,k| h[k] = []} |
|
100 |
IssueQuery.only_public.where(project_id: nil).each do |query| |
|
101 |
grouped[l('label_default_queries.for_all_projects')] << [query.name, query.id] |
|
102 |
end |
|
103 |
IssueQuery.only_public.where(project: project).each do |query| |
|
104 |
grouped[l('label_default_queries.for_current_project')] << [query.name, query.id] |
|
105 |
end |
|
106 |
grouped_options_for_select(grouped, project.default_query_id) |
|
107 |
end |
|
108 | ||
98 | 109 |
def format_version_sharing(sharing) |
99 | 110 |
sharing = 'none' unless Version::VERSION_SHARINGS.include?(sharing) |
100 | 111 |
l("label_version_sharing_#{sharing}") |
app/helpers/queries_helper.rb | ||
---|---|---|
335 | 335 |
@query.project = @project |
336 | 336 |
end |
337 | 337 |
@query |
338 |
else |
|
339 |
@query = find_default_query |
|
338 | 340 |
end |
339 | 341 |
end |
340 | 342 | |
343 |
private |
|
344 | ||
345 |
def find_default_query |
|
346 |
@project.default_query if @project.is_a?(Project) |
|
347 |
end |
|
348 | ||
341 | 349 |
# Returns the query definition as hidden field tags |
342 | 350 |
def query_as_hidden_field_tags(query) |
343 | 351 |
tags = hidden_field_tag("set_filter", "1", :id => nil) |
app/models/issue_query.rb | ||
---|---|---|
50 | 50 |
QueryColumn.new(:last_notes, :caption => :label_last_notes, :inline => false) |
51 | 51 |
] |
52 | 52 | |
53 |
has_many :projects, :foreign_key => 'default_query_id' |
|
54 |
after_update { self.projects.clear unless self.public_visibility? } |
|
55 |
after_destroy { self.projects.clear } |
|
56 | ||
57 |
scope :only_public, -> { |
|
58 |
where(:visibility => VISIBILITY_PUBLIC) |
|
59 |
} |
|
60 | ||
61 |
def self.available_query?(project_id, query_id) |
|
62 |
self.only_public |
|
63 |
.where('project_id is null or project_id = ?', project_id) |
|
64 |
.where(id: query_id).exists? |
|
65 |
end |
|
66 | ||
53 | 67 |
def initialize(attributes=nil, *args) |
54 | 68 |
super attributes |
55 | 69 |
self.filters ||= { 'status_id' => {:operator => "o", :values => [""]} } |
56 | 70 |
end |
57 | 71 | |
72 |
def public_visibility? |
|
73 |
visibility == VISIBILITY_PUBLIC |
|
74 |
end |
|
75 | ||
58 | 76 |
def draw_relations |
59 | 77 |
r = options[:draw_relations] |
60 | 78 |
r.nil? || r == '1' |
app/models/project.rb | ||
---|---|---|
56 | 56 |
:class_name => 'IssueCustomField', |
57 | 57 |
:join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}", |
58 | 58 |
:association_foreign_key => 'custom_field_id' |
59 |
# Default Custom Query |
|
60 |
belongs_to :default_query, :class_name => 'IssueQuery' |
|
59 | 61 | |
60 | 62 |
acts_as_attachable :view_permission => :view_files, |
61 | 63 |
:edit_permission => :manage_files, |
... | ... | |
756 | 758 |
'issue_custom_field_ids', |
757 | 759 |
'parent_id', |
758 | 760 |
'default_version_id', |
759 |
'default_assigned_to_id' |
|
761 |
'default_assigned_to_id', |
|
762 |
'default_query_id' |
|
760 | 763 | |
761 | 764 |
safe_attributes 'enabled_module_names', |
762 | 765 |
:if => lambda {|project, user| |
app/views/issues/_sidebar.html.erb | ||
---|---|---|
1 | 1 |
<h3><%= l(:label_issue_plural) %></h3> |
2 | 2 | |
3 | 3 |
<ul> |
4 |
<li><%= link_to l(:label_issue_view_all), _project_issues_path(@project, :set_filter => 1) %></li> |
|
4 |
<li><%= link_to l(:label_issue_view_all), _project_issues_path(@project, :set_filter => 1, :without_default => 1) %></li>
|
|
5 | 5 |
<% if @project %> |
6 | 6 |
<li><%= link_to l(:field_summary), project_issues_report_path(@project) %></li> |
7 | 7 |
<% end %> |
app/views/projects/_form.html.erb | ||
---|---|---|
23 | 23 |
<p><%= f.check_box :inherit_members %></p> |
24 | 24 |
<% end %> |
25 | 25 | |
26 |
<% if @project.safe_attribute?('default_query_id') && project_default_query_options(@project).present? %> |
|
27 |
<p> |
|
28 |
<%= f.select :default_query_id, project_default_query_options(@project), :include_blank => true %> |
|
29 |
<em class="info"><%=l 'text_allowed_queries_to_select' %></em> |
|
30 |
</p> |
|
31 |
<% end %> |
|
32 | ||
26 | 33 |
<%= wikitoolbar_for 'project_description' %> |
27 | 34 | |
28 | 35 |
<% @project.custom_field_values.each do |value| %> |
app/views/projects/copy.html.erb | ||
---|---|---|
27 | 27 | |
28 | 28 |
<%= submit_tag l(:button_copy) %> |
29 | 29 |
<% end %> |
30 | ||
31 |
<%= javascript_tag do %> |
|
32 |
$('input[value="queries"]').change(function() { |
|
33 |
if ($(this).prop('checked')){ |
|
34 |
$('select#project_default_query_id optgroup[label="For current project"] option').prop("disabled", false); |
|
35 |
}else{ |
|
36 |
$('select#project_default_query_id optgroup[label="For current project"] option').prop("disabled", true); |
|
37 |
} |
|
38 |
}); |
|
39 |
<% end %> |
config/locales/en.yml | ||
---|---|---|
371 | 371 |
field_time_entries_visibility: Time logs visibility |
372 | 372 |
field_total_estimated_hours: Total estimated time |
373 | 373 |
field_default_version: Default version |
374 |
field_default_query: Default Query |
|
374 | 375 |
field_remote_ip: IP address |
375 | 376 |
field_textarea_font: Font used for text areas |
376 | 377 |
field_updated_by: Updated by |
... | ... | |
1026 | 1027 |
label_font_monospace: Monospaced font |
1027 | 1028 |
label_font_proportional: Proportional font |
1028 | 1029 |
label_last_notes: Last notes |
1030 |
label_default_queries: |
|
1031 |
for_all_projects: For all projects |
|
1032 |
for_current_project: For current project |
|
1029 | 1033 | |
1030 | 1034 |
button_login: Login |
1031 | 1035 |
button_submit: Submit |
... | ... | |
1217 | 1221 |
description_issue_category_reassign: Choose issue category |
1218 | 1222 |
description_wiki_subpages_reassign: Choose new parent page |
1219 | 1223 |
text_repository_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.' |
1224 |
text_allowed_queries_to_select: Public (to any users) queries only selectable |
|
1220 | 1225 |
text_login_required_html: When not requiring authentication, public projects and their contents are openly available on the network. You can <a href="%{anonymous_role_path}">edit the applicable permissions</a>. |
1221 | 1226 |
label_login_required_yes: "Yes" |
1222 | 1227 |
label_login_required_no: "No, allow anonymous access to public projects" |
config/locales/fr.yml | ||
---|---|---|
1228 | 1228 |
mail_body_security_notification_notify_enabled: Les notifications ont été activées pour l'adresse %{value} |
1229 | 1229 |
mail_body_security_notification_notify_disabled: Les notifications ont été désactivées pour l'adresse %{value} |
1230 | 1230 |
field_remote_ip: Adresse IP |
1231 | ||
1232 |
field_default_query: Rapport par défaut |
|
1233 |
label_default_queries: |
|
1234 |
for_all_projects: Pour tous les projets |
|
1235 |
for_current_project: Pour le projet en cours |
|
1236 |
text_allowed_queries_to_select: Seuls les rapports publics (pour tous les utilisateurs) sont sélectionnables |
|
1231 | 1237 |
label_no_preview: Aucun aperçu disponible |
1232 | 1238 |
label_no_preview_alternative_html: Aucun aperçu disponible. Veuillez %{link} le fichier. |
1233 | 1239 |
label_no_preview_download: télécharger |
config/locales/ru.yml | ||
---|---|---|
1284 | 1284 |
получает уведомления. |
1285 | 1285 |
mail_body_settings_updated: ! 'Следующие настройки были изменены:' |
1286 | 1286 |
field_remote_ip: IP адрес |
1287 | ||
1288 |
field_default_query: Выбор запроса по умолчанию |
|
1289 |
label_default_queries: |
|
1290 |
for_all_projects: Для всех проектов |
|
1291 |
for_current_project: Для текущего прооекта |
|
1292 |
text_allowed_queries_to_select: Для выбора доступны только публичные запросы (фильтры задач) |
|
1287 | 1293 |
label_wiki_page_new: Новая wiki-страница |
1288 | 1294 |
label_relations: Связи |
1289 | 1295 |
button_filter: Фильтр |
config/locales/tr.yml | ||
---|---|---|
1192 | 1192 |
receives notifications. |
1193 | 1193 |
mail_body_settings_updated: ! 'The following settings were changed:' |
1194 | 1194 |
field_remote_ip: IP address |
1195 | ||
1196 |
field_default_query: Öntanımlı özel sorgu |
|
1197 |
label_default_queries: |
|
1198 |
for_all_projects: Tüm birimler için |
|
1199 |
for_current_project: Simdiki birim için |
|
1200 |
text_allowed_queries_to_select: Herkese açık (tüm kullanıcılar) sorgular sadece seçilebilir |
|
1201 | ||
1195 | 1202 |
label_wiki_page_new: New wiki page |
1196 | 1203 |
label_relations: Relations |
1197 | 1204 |
button_filter: Filter |
db/migrate/20160404094730_add_projects_default_query_id.rb | ||
---|---|---|
1 |
class AddProjectsDefaultQueryId < ActiveRecord::Migration[4.2] |
|
2 |
def self.up |
|
3 |
unless column_exists?(:projects, :default_query_id, :integer) |
|
4 |
add_column :projects, :default_query_id, :integer, :default => nil |
|
5 |
end |
|
6 |
end |
|
7 | ||
8 |
def self.down |
|
9 |
remove_column :projects, :default_query_id |
|
10 |
end |
|
11 |
end |
test/functional/issues_controller_test.rb | ||
---|---|---|
508 | 508 |
assert_response :success |
509 | 509 |
end |
510 | 510 | |
511 |
def test_default_query_should_be_available_when_default_query_spacified |
|
512 |
project = Project.find(1) |
|
513 |
default_query = IssueQuery.create!(:name => "default_query", :user => User.find(2), :visibility => IssueQuery::VISIBILITY_PUBLIC, :project => nil) |
|
514 |
project.default_query_id = default_query.id |
|
515 |
project.save! |
|
516 | ||
517 |
@request.session[:user_id] = 3 |
|
518 | ||
519 |
get :index, :params => { |
|
520 |
:project_id => 1 |
|
521 |
} |
|
522 |
assert_response :success |
|
523 |
assert_select 'h2', text: default_query.name |
|
524 |
assert_select 'ul.queries a.selected', text: default_query.name |
|
525 |
end |
|
526 | ||
527 |
def test_default_query_should_be_unavailable_when_default_query_does_not_spacified |
|
528 |
project = Project.find(1) |
|
529 |
project.default_query_id = nil |
|
530 |
project.save! |
|
531 | ||
532 |
@request.session[:user_id] = 3 |
|
533 | ||
534 |
get :index, :params => { |
|
535 |
:project_id => 1 |
|
536 |
} |
|
537 |
assert_response :success |
|
538 |
assert_select 'h2', text: l(:label_issue_plural) |
|
539 |
assert_select 'ul.queries a.selected', false |
|
540 |
end |
|
541 | ||
542 |
def test_default_query_should_be_unavailable_when_default_query_spacified_but_params_query_id_spacifired |
|
543 |
project = Project.find(1) |
|
544 |
default_query = IssueQuery.create!(:name => "default_query", :user => User.find(2), :visibility => IssueQuery::VISIBILITY_PUBLIC, :project => nil) |
|
545 |
project.default_query_id = default_query.id |
|
546 |
project.save! |
|
547 |
other_query = IssueQuery.create!(:name => "other_query", :user => User.find(2), :visibility => IssueQuery::VISIBILITY_PUBLIC, :project => nil) |
|
548 | ||
549 |
@request.session[:user_id] = 3 |
|
550 | ||
551 |
get :index, :params => { |
|
552 |
:project_id => 1, :query_id => other_query.id |
|
553 |
} |
|
554 |
assert_response :success |
|
555 |
assert_select 'h2', text: other_query.name |
|
556 |
assert_select 'ul.queries a.selected', text: other_query.name |
|
557 |
end |
|
558 | ||
559 |
def test_default_query_should_be_unavailable_when_default_query_spacified_but_other_available_query_spacified_in_session |
|
560 |
project = Project.find(1) |
|
561 |
default_query = IssueQuery.create!(:name => "default_query", :user => User.find(2), :visibility => IssueQuery::VISIBILITY_PUBLIC, :project => nil) |
|
562 |
project.default_query_id = default_query.id |
|
563 |
project.save! |
|
564 |
other_query = IssueQuery.create!(:name => "other_query", :user => User.find(2), :visibility => IssueQuery::VISIBILITY_PUBLIC, :project => nil) |
|
565 | ||
566 |
@request.session[:user_id] = 3 |
|
567 |
@request.session[:issue_query] = {} |
|
568 |
@request.session[:issue_query][:id] = other_query.id |
|
569 |
@request.session[:issue_query][:project_id] = 1 |
|
570 | ||
571 |
get :index, :params => { |
|
572 |
:project_id => 1 |
|
573 |
} |
|
574 |
assert_response :success |
|
575 |
assert_select 'h2', text: other_query.name |
|
576 |
assert_select 'ul.queries a.selected', text: other_query.name |
|
577 |
end |
|
578 | ||
579 |
def test_default_query_should_be_unavailable_when_param_without_default_spacified |
|
580 |
project = Project.find(1) |
|
581 | ||
582 |
default_query = IssueQuery.create!(:name => "default_query", :user => User.find(2), :visibility => IssueQuery::VISIBILITY_PUBLIC, :project => nil) |
|
583 |
project.default_query_id = default_query.id |
|
584 |
project.save! |
|
585 | ||
586 |
@request.session[:user_id] = 3 |
|
587 | ||
588 |
get :index, :params => { |
|
589 |
:project_id => 1, :without_default => 1 |
|
590 |
} |
|
591 |
assert_response :success |
|
592 |
assert_select 'h2', text: l(:label_issue_plural) |
|
593 |
assert_select 'ul.queries a.selected', false |
|
594 |
end |
|
595 | ||
596 |
def test_default_query_should_be_unavailable_when_params_set_filter_and_op_and_f_spacified |
|
597 |
project = Project.find(1) |
|
598 | ||
599 |
default_query = IssueQuery.create!(:name => "default_custom_query", :user => User.find(2), :visibility => IssueQuery::VISIBILITY_PUBLIC, :project => nil) |
|
600 |
project.default_query_id = default_query.id |
|
601 |
project.save! |
|
602 | ||
603 |
@request.session[:user_id] = 3 |
|
604 | ||
605 |
get :index, :params => { |
|
606 |
:project_id => 1, :set_filter => 1, |
|
607 |
:f => ['start_date'], |
|
608 |
:op => { |
|
609 |
:start_date => '=' |
|
610 |
} |
|
611 |
} |
|
612 |
assert_response :success |
|
613 |
assert_select 'h2', text: l(:label_issue_plural) |
|
614 |
assert_select 'ul.queries a.selected', false |
|
615 |
end |
|
616 | ||
617 |
def test_default_query_should_be_available_when_default_query_spacified_and_other_unavailable_query_spacified_in_session |
|
618 |
project = Project.find(1) |
|
619 |
default_query = IssueQuery.create!(:name => "default_query", :user => User.find(2), :visibility => IssueQuery::VISIBILITY_PUBLIC, :project => nil) |
|
620 |
project.default_query_id = default_query.id |
|
621 |
project.save! |
|
622 |
other_query = IssueQuery.create!(:name => "other_query", :user => User.find(2), :visibility => IssueQuery::VISIBILITY_PUBLIC, :project => nil) |
|
623 | ||
624 |
@request.session[:user_id] = 3 |
|
625 |
@request.session[:issue_query] = {} |
|
626 |
@request.session[:issue_query][:id] = other_query.id |
|
627 |
@request.session[:issue_query][:project_id] = 1 |
|
628 | ||
629 |
other_query.visibility = IssueQuery::VISIBILITY_PRIVATE |
|
630 |
other_query.save! |
|
631 | ||
632 |
get :index, :params => { |
|
633 |
:project_id => 1 |
|
634 |
} |
|
635 |
assert_response :success |
|
636 |
assert_select 'h2', text: default_query.name |
|
637 |
assert_select 'ul.queries a.selected', text: default_query.name |
|
638 |
end |
|
639 | ||
511 | 640 |
def test_index_should_omit_page_param_in_export_links |
512 | 641 |
get :index, :params => { |
513 | 642 |
:page => 2 |
test/helpers/projects_helper_test.rb | ||
---|---|---|
75 | 75 |
assert_equal '', version_options_for_select([]) |
76 | 76 |
assert_equal '', version_options_for_select([], Version.find(1)) |
77 | 77 |
end |
78 | ||
79 |
def test_project_default_query_options |
|
80 |
project = Project.find(2) |
|
81 |
options = project_default_query_options(project) |
|
82 |
assert_includes options, l('label_default_queries.for_all_projects') |
|
83 | ||
84 |
assert_includes options, options_for_select(IssueQuery.only_public.where(:project_id => nil).collect{|q|[q.name, q.id]}) |
|
85 |
assert_includes options, l('label_default_queries.for_current_project') |
|
86 |
assert_includes options, options_for_select(IssueQuery.only_public.where(project: project).collect {|o| [o.name, o.id]}) |
|
87 |
end |
|
78 | 88 |
end |
test/unit/project_test.rb | ||
---|---|---|
1028 | 1028 |
Project.distinct.visible.to_a |
1029 | 1029 |
end |
1030 | 1030 |
end |
1031 | ||
1032 |
def test_default_query |
|
1033 |
query = IssueQuery.create!(:name => "test", :user_id => 1, :visibility => IssueQuery::VISIBILITY_PUBLIC, :project => @project) |
|
1034 |
project = Project.find(1) |
|
1035 |
project.default_query_id = query.id |
|
1036 |
project.save! |
|
1037 | ||
1038 |
assert_equal query, project.default_query |
|
1039 |
end |
|
1031 | 1040 |
end |
test/unit/query_test.rb | ||
---|---|---|
1285 | 1285 |
end |
1286 | 1286 |
end |
1287 | 1287 | |
1288 |
def test_available_query_should_return_true_when_public_query_existed_on_project |
|
1289 |
project = Project.find(1) |
|
1290 |
IssueQuery.only_public.destroy_all |
|
1291 |
public_issue_query_on_project = IssueQuery.create!(:name => "q", :user => User.find(2), :visibility => IssueQuery::VISIBILITY_PUBLIC, :project => project) |
|
1292 |
public_issue_query_nil_project = IssueQuery.create!(:name => "q", :user => User.find(2), :visibility => IssueQuery::VISIBILITY_PUBLIC, :project => nil) |
|
1293 |
assert IssueQuery.available_query?(project.id, public_issue_query_on_project.id) |
|
1294 |
assert IssueQuery.available_query?(project.id, public_issue_query_nil_project.id) |
|
1295 |
end |
|
1296 | ||
1297 |
def test_available_query_should_return_false_when_public_query_does_not_existed_on_project |
|
1298 |
project = Project.find(1) |
|
1299 |
IssueQuery.only_public.destroy_all |
|
1300 |
private_issue_query_on_project = IssueQuery.create!(:name => "q", :user => User.find(2), :visibility => IssueQuery::VISIBILITY_PRIVATE, :project => project) |
|
1301 |
public_issue_query_on_other = IssueQuery.create!(:name => "q", :user => User.find(2), :visibility => IssueQuery::VISIBILITY_PUBLIC, :project => Project.find(2)) |
|
1302 |
assert_equal false, IssueQuery.available_query?(project.id, private_issue_query_on_project.id) |
|
1303 |
assert_equal false, IssueQuery.available_query?(project.id, public_issue_query_on_other.id) |
|
1304 |
end |
|
1305 | ||
1288 | 1306 |
def test_default_columns |
1289 | 1307 |
q = IssueQuery.new |
1290 | 1308 |
assert q.columns.any? |
... | ... | |
1835 | 1853 |
assert_nil IssueQuery.visible(User.find(1)).find_by_id(q.id) |
1836 | 1854 |
end |
1837 | 1855 | |
1856 |
def test_project_default_query_should_clear_when_default_query_chenged_public_to_other |
|
1857 |
q = IssueQuery.create!(:name => 'DefaultQuery', :visibility => IssueQuery::VISIBILITY_PUBLIC, :user => User.find(7)) |
|
1858 |
projects = [Project.find(1), Project.find(2)] |
|
1859 |
projects.each { |p| p.update_attributes!(:default_query_id => q.id) } |
|
1860 | ||
1861 |
q.update_attributes!(:visibility => IssueQuery::VISIBILITY_PRIVATE) |
|
1862 |
projects.each { |p| assert_nil p.reload.default_query } |
|
1863 | ||
1864 |
q.update_attributes!(:visibility => IssueQuery::VISIBILITY_PUBLIC) |
|
1865 |
projects.each do |p| |
|
1866 |
p.update_attributes!(:default_query_id => q.id) |
|
1867 |
assert_equal q, p.default_query |
|
1868 |
end |
|
1869 | ||
1870 |
q.update_attributes!(:visibility => IssueQuery::VISIBILITY_ROLES, :role_ids => [1, 2]) |
|
1871 |
projects.each { |p| assert_nil p.reload.default_query } |
|
1872 |
end |
|
1873 | ||
1874 |
def test_project_default_query_should_clear_when_destroied_default_query |
|
1875 |
q = IssueQuery.create!(:name => 'DefaultQuery', :visibility => IssueQuery::VISIBILITY_PUBLIC, :user => User.find(7)) |
|
1876 |
projects = [Project.find(1), Project.find(2)] |
|
1877 |
projects.each { |p| p.update_attributes!(:default_query_id => q.id) } |
|
1878 | ||
1879 |
q.destroy |
|
1880 | ||
1881 |
projects.each { |p| assert_nil p.reload.default_query } |
|
1882 |
end |
|
1883 | ||
1838 | 1884 |
test "#available_filters should include users of visible projects in cross-project view" do |
1839 | 1885 |
users = IssueQuery.new.available_filters["assigned_to_id"] |
1840 | 1886 |
assert_not_nil users |