Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions init.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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__)
2 changes: 0 additions & 2 deletions lib/issue_wiki_journal.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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 }
6 changes: 3 additions & 3 deletions lib/issue_wiki_journal/wiki_changeset.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,17 @@ 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
end

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

192 changes: 103 additions & 89 deletions test/functional/wiki_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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(1) do |locale, i|
::I18n.locale = locale
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),
"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
Expand All @@ -165,12 +171,20 @@ 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)

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}
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 => title,
:content => {
:comments => comment,
:text => message || "h1. New Page\n\n Version #{version}",
:version => version
}
}
end
alias_method :create_wiki_page, :update_wiki_page

Expand Down