From 7c5c9fa603e4064f76fab5b7e98b2434a794f218 Mon Sep 17 00:00:00 2001 From: MAEDA Go Date: Sat, 15 Apr 2023 15:50:50 +0900 Subject: [PATCH] Allow the default value of the private field to be configurable per tracker --- app/controllers/issues_controller.rb | 1 + app/models/tracker.rb | 1 + app/views/trackers/_form.html.erb | 1 + config/locales/en.yml | 1 + ...1513_add_private_by_default_to_trackers.rb | 5 ++++ test/functional/issues_controller_test.rb | 29 +++++++++++++++++++ test/integration/api_test/issues_test.rb | 21 ++++++++++++++ 7 files changed, 59 insertions(+) create mode 100644 db/migrate/20230414071513_add_private_by_default_to_trackers.rb diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 07de47c0d..f8d48b7f0 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -624,6 +624,7 @@ class IssuesController < ApplicationController if @issue.project @issue.tracker ||= @issue.allowed_target_trackers.first + @issue.is_private ||= @issue.tracker&.private_by_default? if @issue.tracker.nil? if @issue.project.trackers.any? # None of the project trackers is allowed to the user diff --git a/app/models/tracker.rb b/app/models/tracker.rb index ce476092d..d920adf35 100644 --- a/app/models/tracker.rb +++ b/app/models/tracker.rb @@ -74,6 +74,7 @@ class Tracker < ActiveRecord::Base 'name', 'default_status_id', 'is_in_roadmap', + 'private_by_default', 'core_fields', 'position', 'custom_field_ids', diff --git a/app/views/trackers/_form.html.erb b/app/views/trackers/_form.html.erb index 2ccd225e6..d249d1ec2 100644 --- a/app/views/trackers/_form.html.erb +++ b/app/views/trackers/_form.html.erb @@ -10,6 +10,7 @@ :include_blank => @tracker.default_status.nil?, :required => true %>

+

<%= f.check_box :private_by_default %>

<%= f.check_box :is_in_roadmap %>

<%= f.text_area :description, :rows => 4 %>

diff --git a/config/locales/en.yml b/config/locales/en.yml index 8c9edb8bc..c9ace4e88 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -319,6 +319,7 @@ en: field_is_public: Public field_parent: Subproject of field_is_in_roadmap: Issues displayed in roadmap + field_private_by_default: Private by default field_login: Login field_mail_notification: Email notifications field_admin: Administrator diff --git a/db/migrate/20230414071513_add_private_by_default_to_trackers.rb b/db/migrate/20230414071513_add_private_by_default_to_trackers.rb new file mode 100644 index 000000000..1b6987a73 --- /dev/null +++ b/db/migrate/20230414071513_add_private_by_default_to_trackers.rb @@ -0,0 +1,5 @@ +class AddPrivateByDefaultToTrackers < ActiveRecord::Migration[6.1] + def change + add_column :trackers, :private_by_default, :boolean, default: false, null: false, after: :default_status_id + end +end diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index c19534b78..34fbfe854 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -5634,6 +5634,35 @@ class IssuesControllerTest < Redmine::ControllerTest assert_equal [], issue.watcher_user_ids end + def test_create_should_respect_private_by_default_per_tracker_setting + @request.session[:user_id] = 2 + tracker = Tracker.find(1) + + post_issue = -> do + post( + :create, + params: { + project_id: 1, + issue: {tracker_id: tracker.id, status_id: '1', subject: '_'} + } + ) + end + + tracker.update_attribute(:private_by_default, true) + assert_difference 'Issue.count' do + post_issue.call + end + issue = Issue.order('id DESC').first + assert issue.is_private? + + tracker.update_attribute(:private_by_default, false) + assert_difference 'Issue.count' do + post_issue.call + end + issue = Issue.order('id DESC').first + assert_not issue.is_private? + end + def test_get_edit @request.session[:user_id] = 2 get(:edit, :params => {:id => 1}) diff --git a/test/integration/api_test/issues_test.rb b/test/integration/api_test/issues_test.rb index c5f0d3496..98e550411 100644 --- a/test/integration/api_test/issues_test.rb +++ b/test/integration/api_test/issues_test.rb @@ -753,6 +753,27 @@ class Redmine::ApiTest::IssuesTest < Redmine::ApiTest::Base assert_response 422 end + test "POST /issues.json should respect the private_by_default per tracker setting" do + tracker = Tracker.find(1) + tracker.update_attribute(:private_by_default, true) + issue = new_record(Issue) do + post( + '/issues.json', + :params => {:issue => {:project_id => 1, :tracker_id => 1, :subject => 'API'}}, + :headers => credentials('jsmith')) + end + assert issue.is_private? + + tracker.update_attribute(:private_by_default, false) + issue = new_record(Issue) do + post( + '/issues.json', + :params => {:issue => {:project_id => 1, :tracker_id => 1, :subject => 'API'}}, + :headers => credentials('jsmith')) + end + assert_not issue.is_private? + end + test "PUT /issues/:id.xml" do assert_difference('Journal.count') do put( -- 2.39.1