From d00ccd5dfc33077fa2648e9beb54a769ad33bc16 Mon Sep 17 00:00:00 2001
From: Marius BALTEANU
<%= setting_select :default_project_query, default_global_project_query_options %>
diff --git a/app/views/users/_preferences.html.erb b/app/views/users/_preferences.html.erb index 8074cb569..acc646913 100644 --- a/app/views/users/_preferences.html.erb +++ b/app/views/users/_preferences.html.erb @@ -8,4 +8,5 @@<%= pref_fields.select :history_default_tab, history_default_tab_options %>
<%= pref_fields.text_area :toolbar_language_options, :rows => 4 %>
<%= pref_fields.select :default_issue_query, default_issue_query_options(@user), include_blank: l(:label_none) %>
+<%= pref_fields.select :default_project_query, default_project_query_options(@user), include_blank: l(:label_none) %>
<% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 8fd84ff13..4c33f187b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -510,6 +510,7 @@ en: setting_project_list_defaults: Projects list defaults setting_twofa: Two-factor authentication setting_default_issue_query: Default Query + setting_default_project_query: Default Query permission_add_project: Create project permission_add_subprojects: Create subprojects diff --git a/config/settings.yml b/config/settings.yml index 64209bdfd..211d58087 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -249,6 +249,8 @@ project_list_defaults: - name - identifier - short_description +default_project_query: + default: '' issue_done_ratio: default: 'issue_field' default_projects_public: diff --git a/test/fixtures/queries.yml b/test/fixtures/queries.yml index 1b169baca..15c52c389 100644 --- a/test/fixtures/queries.yml +++ b/test/fixtures/queries.yml @@ -182,4 +182,37 @@ queries_010: --- - - spent_on - desc +queries_011: + id: 11 + type: ProjectQuery + visibility: 2 + name: Projects as list + filters: | + --- + id: + :values: + - "mine" + :operator: = + column_names: + group_by: + sort_criteria: + options: | + --- + :display_type: list +queries_012: + id: 12 + type: ProjectQuery + visibility: 1 + name: My bookmarks + filters: | + --- + id: + :values: + - "bookmarks" + :operator: = + + user_id: 1 + options: | + --- + :display_type: board diff --git a/test/functional/projects_controller_test.rb b/test/functional/projects_controller_test.rb index f7d2dee26..a26793a20 100644 --- a/test/functional/projects_controller_test.rb +++ b/test/functional/projects_controller_test.rb @@ -25,7 +25,8 @@ class ProjectsControllerTest < Redmine::ControllerTest :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages, :attachments, :custom_fields, :custom_values, :time_entries, - :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions + :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions, + :roles, :queries include Redmine::I18n @@ -248,6 +249,28 @@ class ProjectsControllerTest < Redmine::ControllerTest assert_select ".total-for-cf-#{field.id} span.value", :text => '9' end + def test_index_should_retrieve_default_query + query = ProjectQuery.find(11) + ProjectQuery.stubs(:default).returns query + + [nil, 1].each do |user_id| + @request.session[:user_id] = user_id + get :index + assert_select 'h2', text: query.name + end + end + + def test_index_should_ignore_default_query_with_without_default + query = ProjectQuery.find(11) + ProjectQuery.stubs(:default).returns query + + [nil, 1].each do |user_id| + @request.session[:user_id] = user_id + get :index, params: { set_filter: '1', without_default: '1' } + assert_select 'h2', text: I18n.t(:label_project_plural) + end + end + def test_autocomplete_js get( :autocomplete, diff --git a/test/integration/api_test/projects_test.rb b/test/integration/api_test/projects_test.rb index 0785aecb5..789847db7 100644 --- a/test/integration/api_test/projects_test.rb +++ b/test/integration/api_test/projects_test.rb @@ -22,7 +22,8 @@ require File.expand_path('../../../test_helper', __FILE__) class Redmine::ApiTest::ProjectsTest < Redmine::ApiTest::Base fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details, :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages, - :attachments, :custom_fields, :custom_values, :custom_fields_projects, :time_entries, :issue_categories + :attachments, :custom_fields, :custom_values, :custom_fields_projects, :time_entries, :issue_categories, + :queries def setup super @@ -212,6 +213,18 @@ class Redmine::ApiTest::ProjectsTest < Redmine::ApiTest::Base assert_equal version.name, json['project']['default_version']['name'] end + def test_get_project_should_not_load_default_query + query = ProjectQuery.find(11) + ProjectQuery.stubs(:default).returns query + + get '/projects.json' + + assert results = JSON.parse(@response.body)['projects'] + + assert_equal 4, results.count + assert results.detect{ |i| i['name'] == "eCookbook"} + end + test "POST /projects.xml with valid parameters should create the project" do with_settings :default_projects_modules => ['issue_tracking', 'repository'] do assert_difference('Project.count') do diff --git a/test/unit/project_query_test.rb b/test/unit/project_query_test.rb index fa914ce4e..8267057a3 100644 --- a/test/unit/project_query_test.rb +++ b/test/unit/project_query_test.rb @@ -25,7 +25,8 @@ class ProjectQueryTest < ActiveSupport::TestCase :issue_categories, :enumerations, :groups_users, :enabled_modules, - :custom_fields, :custom_values + :custom_fields, :custom_values, + :queries include Redmine::I18n @@ -69,4 +70,38 @@ class ProjectQueryTest < ActiveSupport::TestCase end end end + + def test_should_determine_default_project_query + user = User.find(1) + query = ProjectQuery.find(11) + user_query = ProjectQuery.find(12) + + [nil, user, User.anonymous].each do |u| + assert_nil IssueQuery.default(user: u) + end + + # only global default is set + with_settings :default_project_query => query.id do + [nil, user, User.anonymous].each do |u| + assert_equal query, ProjectQuery.default(user: u) + end + end + + # user default, overrides global default + user.pref.default_project_query = user_query.id + user.pref.save + + with_settings :default_project_query => query.id do + assert_equal user_query, ProjectQuery.default(user: user) + end + end + + def test_project_query_default_should_return_nil_if_default_query_destroyed + query = ProjectQuery.find(11) + + Setting.default_project_query = query.id + query.destroy + + assert_nil ProjectQuery.default + end end -- 2.22.0