From 2c15bede2d3665b241e82f523cfd53029c823eca Mon Sep 17 00:00:00 2001 From: fukuda-a Date: Wed, 25 Dec 2024 10:29:23 +0900 Subject: [PATCH 1/3] Compatible with Redmine5.1.3 --- init.rb | 7 ++++--- lib/issue_wiki_journal.rb | 2 -- {app/hooks => lib/issue_wiki_journal}/application_hooks.rb | 0 lib/issue_wiki_journal/wiki_changeset.rb | 6 +++--- .../issue_wiki_journal}/wiki_controller_hooks.rb | 0 5 files changed, 7 insertions(+), 8 deletions(-) rename {app/hooks => lib/issue_wiki_journal}/application_hooks.rb (100%) rename {app/hooks => lib/issue_wiki_journal}/wiki_controller_hooks.rb (100%) diff --git a/init.rb b/init.rb index 7dd484f..425127f 100644 --- a/init.rb +++ b/init.rb @@ -7,8 +7,9 @@ version '0.9.0' url 'https://github.com/hidakatsuya/redmine_issue_wiki_journal' author_url 'https://github.com/hidakatsuya' - # Requires Redmine 2.3.x or higher - requires_redmine '2.3' + # Requires Redmine 5.x.x or higher + requires_redmine version_or_higher: '5.0.0' end -require 'issue_wiki_journal' +require File.expand_path('../lib/issue_wiki_journal/application_hooks', __FILE__) +require File.expand_path('../lib/issue_wiki_journal/wiki_controller_hooks', __FILE__) \ No newline at end of file diff --git a/lib/issue_wiki_journal.rb b/lib/issue_wiki_journal.rb index 7147945..0922054 100644 --- a/lib/issue_wiki_journal.rb +++ b/lib/issue_wiki_journal.rb @@ -13,5 +13,3 @@ def self.version # Load libraries require_relative 'issue_wiki_journal/wiki_changeset' -# Load hooks -Dir[IssueWikiJournal.root.join('app/hooks/**/*_hooks.rb')].each {|f| require f } diff --git a/app/hooks/application_hooks.rb b/lib/issue_wiki_journal/application_hooks.rb similarity index 100% rename from app/hooks/application_hooks.rb rename to lib/issue_wiki_journal/application_hooks.rb diff --git a/lib/issue_wiki_journal/wiki_changeset.rb b/lib/issue_wiki_journal/wiki_changeset.rb index 31930a5..679dc4d 100644 --- a/lib/issue_wiki_journal/wiki_changeset.rb +++ b/lib/issue_wiki_journal/wiki_changeset.rb @@ -54,7 +54,7 @@ def scan_comment_for_issue_ids # same as Changeset#find_referenced_issue_by_id def find_referenced_issue_by_id(id) return nil if id.blank? - issue = Issue.find_by_id(id.to_i, :include => :project) + issue = Issue.find_by(id: id.to_i) if Setting.commit_cross_project_ref? # all issues can be referenced/fixed elsif issue @@ -74,7 +74,7 @@ def fix_issue(issue, action) # less than 2.4 if Redmine::VERSION.to_s < '2.4' - status = IssueStatus.find_by_id(Setting.commit_fix_status_id.to_i) + status = IssueStatus.find_by(id: Setting.commit_fix_status_id.to_i) if status.nil? logger.warn("No status matches commit_fix_status_id setting (#{Setting.commit_fix_status_id})") if logger return issue @@ -123,7 +123,7 @@ def log_time(issue, hours) def log_time_activity if Setting.commit_logtime_activity_id.to_i > 0 - TimeEntryActivity.find_by_id(Setting.commit_logtime_activity_id.to_i) + TimeEntryActivity.find_by(id: Setting.commit_logtime_activity_id.to_i) end end diff --git a/app/hooks/wiki_controller_hooks.rb b/lib/issue_wiki_journal/wiki_controller_hooks.rb similarity index 100% rename from app/hooks/wiki_controller_hooks.rb rename to lib/issue_wiki_journal/wiki_controller_hooks.rb From e99075e3b57f370ab51ae1a495ee62c328b59be4 Mon Sep 17 00:00:00 2001 From: fukuda-a Date: Fri, 31 Jan 2025 17:26:34 +0900 Subject: [PATCH 2/3] Modify test code --- test/functional/wiki_controller_test.rb | 185 +++++++++++++----------- 1 file changed, 98 insertions(+), 87 deletions(-) diff --git a/test/functional/wiki_controller_test.rb b/test/functional/wiki_controller_test.rb index 2698eb1..43f1b4d 100644 --- a/test/functional/wiki_controller_test.rb +++ b/test/functional/wiki_controller_test.rb @@ -31,125 +31,131 @@ class IssueWikiJournal::WikiControllerTest < ActionController::TestCase :wiki_contents, :wiki_content_versions - setup do + def setup @controller = ::WikiController.new @request.session[:user_id] = 2 @project = Project.find(1) end - context 'Referencing issues:' do - should 'add journal to Issue#1' do - assert_difference 'Journal.count' do - create_wiki_page with: 'refs #1 message' - end + # Referencing issues: + test "add journal to Issue#1" do + assert_difference 'Journal.count' do + create_wiki_page with: 'refs #1 message' end + end - should 'add journal to Issue#1 and Issue#2' do - assert_difference 'Journal.count', +2 do - create_wiki_page with: 'refs #1 #2 message' - end + test "add journal to Issue#1 and Issue#2" do + assert_difference 'Journal.count', +2 do + create_wiki_page with: 'refs #1 #2 message' end + end - should 'not add journal when no wiki updates' do - create_wiki_page + test "not add journal when no wiki updates" do + create_wiki_page - assert_no_difference 'Journal.count' do - # No content changes - update_wiki_page with: 'refs #1 message' - end + assert_no_difference 'Journal.count' do + # No content changes + update_wiki_page with: 'refs #1 message' end + end - should 'translate message of journal' do - journals = Issue.find(1).journals + test "translate message of journal" do + journals = Issue.find(1).journals - [:en, :ja].each_with_index do |locale, i| - ::I18n.locale = locale - update_wiki_page with: 'refs #1 message', as_version: i - assert_equal journals.last.notes, - changeset_message('New_Page', 'refs #1 message', version: i + 1), - "Journal message test with #{locale} locale" - end + [:en, :ja].each_with_index do |locale, i| + ::I18n.locale = locale + update_wiki_page with: 'refs #1 message', as_version: i + assert_equal journals.last.notes, + changeset_message('New_Page', 'refs #1 message', version: i + 1), + "Journal message test with #{locale} locale" end + end - context 'when commit_cross_project_ref setting is enabled' do - setup do - Setting.commit_cross_project_ref = 1 - end - - should 'add journal to issue of other project' do - assert_difference 'Journal.count' do - create_wiki_page with: 'refs #1 message', in_project: Project.find(2) - end - end - end - context 'when commit_cross_project_ref setting is disabled' do - setup do - Setting.commit_cross_project_ref = 0 - end + # when commit_cross_project_ref setting is enabled + # def setup + # Setting.commit_cross_project_ref = 1 + # end - should 'not add journal to issue of other project' do - assert_no_difference 'Journal.count' do - create_wiki_page with: 'refs #1 message', in_project: Project.find(2) - end - end + test "add journal to issue of other project" do + Setting.commit_cross_project_ref = 1 + assert_difference 'Journal.count' do + create_wiki_page with: 'refs #1 message', in_project: Project.find(2) end end - context 'Fixing issues:' do - context 'when fix_status_id setting is set' do - setup do - set_fix_status_id_setting_to 5 - end - should 'add journals to issue' do - assert_difference 'Journal.count', +2 do - create_wiki_page with: 'fixes #1 #2 message' - end - end + # when commit_cross_project_ref setting is disabled + # def setup + # Setting.commit_cross_project_ref = 0 + # end - should 'update status of issue' do - create_wiki_page with: 'fixes #1 message' - assert Issue.find(1).closed? - end + test "not add journal to issue of other project" do + Setting.commit_cross_project_ref = 0 + assert_no_difference 'Journal.count' do + create_wiki_page with: 'refs #1 message', in_project: Project.find(2) end + end - context 'when fix_status_id setting is not set' do - setup do - set_fix_status_id_setting_to 0 - end - should 'not associate to issue' do - assert_no_difference 'Journal.count' do - create_wiki_page with: 'fixes #1 message' - end - # No status updates - assert_equal Issue.find(1).status_id, 1 + # Fixing issues: + # when fix_status_id setting is set + # def setup + # set_fix_status_id_setting_to 5 + # end + + test "add journals to issue" do + set_fix_status_id_setting_to 5 + assert_difference 'Journal.count', +2 do + create_wiki_page with: 'fixes #1 #2 message' end end - end - context 'Combination:' do - setup do + test "update status of issue" do set_fix_status_id_setting_to 5 - @comment = 'fixes #1, refs #2 message' + create_wiki_page with: 'fixes #1 message' + assert Issue.find(1).closed? end - should 'add journals' do - assert_difference 'Journal.count', +2 do - create_wiki_page with: @comment - end + # when fix_status_id setting is not set + # def setup + # set_fix_status_id_setting_to 0 + # end - assert_equal Issue.find(1).journals.last.notes, - changeset_message('New_Page', 'fixes #1, refs #2 message') - assert_equal Issue.find(2).journals.last.notes, - changeset_message('New_Page', 'fixes #1, refs #2 message') + test "not associate to issue" do + set_fix_status_id_setting_to 0 + assert_no_difference 'Journal.count' do + create_wiki_page with: 'fixes #1 message' + end + # No status updates + assert_equal Issue.find(1).status_id, 1 end - should 'update status' do + + # Combination: + # def setup + # set_fix_status_id_setting_to 5 + # @comment = 'fixes #1, refs #2 message' + # end + + test "add journals" do + set_fix_status_id_setting_to 5 + @comment = 'fixes #1, refs #2 message' + assert_difference 'Journal.count', +2 do create_wiki_page with: @comment - assert Issue.find(1).closed? end + + assert_equal Issue.find(1).journals.last.notes, + changeset_message('New_Page', 'fixes #1, refs #2 message') + assert_equal Issue.find(2).journals.last.notes, + changeset_message('New_Page', 'fixes #1, refs #2 message') + end + + test "update status" do + set_fix_status_id_setting_to 5 + @comment = 'fixes #1, refs #2 message' + create_wiki_page with: @comment + assert Issue.find(1).closed? end private @@ -167,10 +173,15 @@ def set_fix_status_id_setting_to(status_id) def update_wiki_page(args = {}) comment, version, project = args.values_at(:with, :as_version, :in_project) - put :update, project_id: project || @project.id, id: 'New Page', - content: {comments: comment, - text: "h1. New Page\n\n Version #{version || 0}", - version: version || 0} + put :update, :params => { + :project_id => project || @project.id, + :id => 'New page', + :content => { + :comments => comment, + :text => "h1. New Page\n\n Version #{version || 0}", + :version => version || 0 + } + } end alias_method :create_wiki_page, :update_wiki_page From 6bd14053dcab7a8b415e62c0612cec13706e248f Mon Sep 17 00:00:00 2001 From: mcc-yamada-k Date: Wed, 18 Jun 2025 11:40:31 +0900 Subject: [PATCH 3/3] Fixed to allow Issue updates even for first-time Wiki updates And Modify test code --- lib/issue_wiki_journal/wiki_controller_hooks.rb | 8 ++++---- test/functional/wiki_controller_test.rb | 17 ++++++++++------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/lib/issue_wiki_journal/wiki_controller_hooks.rb b/lib/issue_wiki_journal/wiki_controller_hooks.rb index 6a6889f..671d154 100644 --- a/lib/issue_wiki_journal/wiki_controller_hooks.rb +++ b/lib/issue_wiki_journal/wiki_controller_hooks.rb @@ -3,7 +3,7 @@ class WikiControllerHooks < Redmine::Hook::ViewListener def controller_wiki_edit_after_save(args = {}) page, params = args.values_at :page, :params - if page_content_changed?(page, params[:content][:version]) + if page.content.saved_change_to_version? changeset = WikiChangeset.new(page) changeset.apply_to_related_issues! end @@ -11,9 +11,9 @@ def controller_wiki_edit_after_save(args = {}) private - def page_content_changed?(new_page, old_page_version) - new_page.content.version != old_page_version.to_i - end + # def page_content_changed?(new_page, old_page_version) + # new_page.content.version != old_page_version.to_i + # end end end diff --git a/test/functional/wiki_controller_test.rb b/test/functional/wiki_controller_test.rb index 43f1b4d..17e9c04 100644 --- a/test/functional/wiki_controller_test.rb +++ b/test/functional/wiki_controller_test.rb @@ -62,11 +62,11 @@ def setup test "translate message of journal" do journals = Issue.find(1).journals - [:en, :ja].each_with_index do |locale, i| + [:en, :ja].each.with_index(1) do |locale, i| ::I18n.locale = locale - update_wiki_page with: 'refs #1 message', as_version: i + update_wiki_page with: 'refs #1 message', message: "h1. New Page\n\n Version #{i}" assert_equal journals.last.notes, - changeset_message('New_Page', 'refs #1 message', version: i + 1), + changeset_message('New_Page', 'refs #1 message', version: i), "Journal message test with #{locale} locale" end end @@ -171,15 +171,18 @@ def set_fix_status_id_setting_to(status_id) end def update_wiki_page(args = {}) - comment, version, project = args.values_at(:with, :as_version, :in_project) + comment, version, project, message = args.values_at(:with, :as_version, :in_project, :message) + title = 'New Page' + pages = @project.wiki.find_or_new_page(title) + version = pages.try(:content) ? pages.content.version : 1 if version.blank? put :update, :params => { :project_id => project || @project.id, - :id => 'New page', + :id => title, :content => { :comments => comment, - :text => "h1. New Page\n\n Version #{version || 0}", - :version => version || 0 + :text => message || "h1. New Page\n\n Version #{version}", + :version => version } } end