Switch from user defined project fields to project settings
This commit is contained in:
@@ -3,7 +3,7 @@ Changelog
|
||||
|
||||
## 0.9.9
|
||||
|
||||
* Fork of redmine_rocketchat, redmine_slack and redmine_mattermost (base functions for all three messenger)
|
||||
* All global messenger settings can be overwritten project based
|
||||
* Locale support added
|
||||
* Wiki added supported for notification
|
||||
* Contact added/updated supported for notification (if redmine_contacts is installed)
|
||||
@@ -12,6 +12,7 @@ Changelog
|
||||
* SSL verify can be disabled
|
||||
* Lots of refactoring and code cleanups
|
||||
* Swith from httpclient to net/http
|
||||
* Fork of redmine_rocketchat, redmine_slack and redmine_mattermost (base functions for all three messenger)
|
||||
|
||||
## v0.6.1
|
||||
|
||||
|
||||
15
README.md
15
README.md
@@ -41,8 +41,9 @@ Install ``redmine_messenger`` plugin for `Redmine`
|
||||
|
||||
cd $REDMINE_ROOT
|
||||
git clone git://github.com/alphanodes/redmine_messenger.git plugins/redmine_messenger
|
||||
bundle exec rake db:migrate_plugins
|
||||
|
||||
Restart Redmine, and you should see the plugin show up in the Plugins page.
|
||||
Restart Redmine (application server) and you should see the plugin show up in the Plugins page.
|
||||
Under the configuration options, set the Messenger API URL to the URL for an
|
||||
Incoming WebHook integration in your Messenger account and also set the Messenger
|
||||
Channel to the channel's handle (be careful, this is not the channel's display name
|
||||
@@ -50,6 +51,18 @@ visible to users, you can find each channel's handle by navigating inside the ch
|
||||
and clicking the down-arrow and selecting view info). See also the next two sections
|
||||
for advanced and custom routing options.
|
||||
|
||||
|
||||
## Uninstall
|
||||
|
||||
Uninstall ``redmine_messenger``
|
||||
|
||||
cd $REDMINE_ROOT
|
||||
bundle exec rake db:migrate_plugins NAME=redmine_messenger VERSION=0
|
||||
rm -rf plugins/redmine_messenger
|
||||
|
||||
Restart Redmine (application server)
|
||||
|
||||
|
||||
## Customized Routing
|
||||
|
||||
You can also route messages to different channels on a per-project basis. To
|
||||
|
||||
35
app/controllers/messenger_settings_controller.rb
Normal file
35
app/controllers/messenger_settings_controller.rb
Normal file
@@ -0,0 +1,35 @@
|
||||
# Redmine Messenger plugin for Redmine
|
||||
|
||||
class MessengerSettingsController < ApplicationController
|
||||
layout 'base'
|
||||
|
||||
before_action :find_project, :authorize, :find_user
|
||||
|
||||
def save
|
||||
setting = MessengerSetting.find_or_create @project.id
|
||||
begin
|
||||
setting.transaction do
|
||||
# setting.auto_preview_enabled = auto_preview_enabled
|
||||
setting.assign_attributes(params[:setting])
|
||||
setting.save!
|
||||
end
|
||||
flash[:notice] = l(:notice_successful_update)
|
||||
rescue => e
|
||||
flash[:error] = 'Updating failed.' + e.message
|
||||
end
|
||||
|
||||
redirect_to controller: 'projects', action: 'settings', id: @project, tab: 'messenger'
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_project
|
||||
@project = Project.find(params[:id])
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
def find_user
|
||||
@user = User.current
|
||||
end
|
||||
end
|
||||
@@ -32,7 +32,6 @@ class Messenger
|
||||
channels.each do |channel|
|
||||
uri = URI(url)
|
||||
params[:channel] = channel
|
||||
|
||||
http_options = { use_ssl: uri.scheme == 'https' }
|
||||
if RedmineMessenger.settings[:messenger_verify_ssl] != 1
|
||||
http_options[:verify_mode] = OpenSSL::SSL::VERIFY_NONE
|
||||
@@ -43,7 +42,7 @@ class Messenger
|
||||
req.set_form_data(payload: params.to_json)
|
||||
Net::HTTP.start(uri.hostname, uri.port, http_options) do |http|
|
||||
response = http.request(req)
|
||||
unless response == Net::HTTPSuccess || response == Net::HTTPRedirection
|
||||
unless [Net::HTTPSuccess, Net::HTTPRedirection, Net::HTTPOK].include? response
|
||||
Rails.logger.warn(response)
|
||||
end
|
||||
end
|
||||
@@ -66,54 +65,49 @@ class Messenger
|
||||
end
|
||||
|
||||
def self.url_for_project(proj)
|
||||
return nil if proj.blank?
|
||||
|
||||
cf = ProjectCustomField.find_by(name: 'Messenger URL')
|
||||
|
||||
[
|
||||
(proj.custom_value_for(cf).value rescue nil),
|
||||
(url_for_project proj.parent),
|
||||
RedmineMessenger.settings[:messenger_url]
|
||||
].flatten.find(&:present?)
|
||||
end
|
||||
|
||||
def self.post_private_issues_for_project(proj)
|
||||
return nil if proj.blank?
|
||||
|
||||
cf = ProjectCustomField.find_by(name: 'Messenger Post private issues')
|
||||
[
|
||||
(proj.custom_value_for(cf).value rescue nil),
|
||||
(post_private_issues_for_project proj.parent),
|
||||
RedmineMessenger.settings[:post_private_issues]
|
||||
].flatten.find(&:present?)
|
||||
end
|
||||
|
||||
def self.post_private_notes_for_project(proj)
|
||||
return nil if proj.blank?
|
||||
|
||||
cf = ProjectCustomField.find_by(name: 'Messenger Post private notes')
|
||||
[
|
||||
(proj.custom_value_for(cf).value rescue nil),
|
||||
(post_private_notes_for_project proj.parent),
|
||||
RedmineMessenger.settings[:post_private_notes]
|
||||
].flatten.find(&:present?)
|
||||
return if proj.blank?
|
||||
# project based
|
||||
pm = MessengerSetting.find_by(project_id: proj.id)
|
||||
return pm.messenger_url if !pm.nil? && pm.messenger_url.present?
|
||||
# parent project based
|
||||
parent_url = url_for_project(proj.parent)
|
||||
return parent_url if parent_url.present?
|
||||
# system based
|
||||
return RedmineMessenger.settings[:messenger_url] if RedmineMessenger.settings[:messenger_url].present?
|
||||
nil
|
||||
end
|
||||
|
||||
def self.channels_for_project(proj)
|
||||
return if proj.blank?
|
||||
return [] if proj.blank?
|
||||
# project based
|
||||
pm = MessengerSetting.find_by(project_id: proj.id)
|
||||
if !pm.nil? && pm.messenger_channel.present?
|
||||
return [] if pm.messenger_channel == '-'
|
||||
return pm.messenger_channel.split(',').map(&:strip).uniq
|
||||
end
|
||||
# parent project based
|
||||
parent_channel = channels_for_project(proj.parent)
|
||||
return parent_channel if parent_channel.present?
|
||||
# system based
|
||||
if RedmineMessenger.settings[:messenger_channel].present? &&
|
||||
RedmineMessenger.settings[:messenger_channel] != '-'
|
||||
return RedmineMessenger.settings[:messenger_channel].split(',').map(&:strip).uniq
|
||||
end
|
||||
[]
|
||||
end
|
||||
|
||||
cf = ProjectCustomField.find_by(name: 'Messenger Channel')
|
||||
val = [
|
||||
(proj.custom_value_for(cf).value rescue nil),
|
||||
(channels_for_project proj.parent),
|
||||
RedmineMessenger.settings[:messenger_channel]
|
||||
].flatten.find(&:present?)
|
||||
|
||||
# Channel name '-' or empty '' is reserved for NOT notifying
|
||||
return [] if val.nil? || val.to_s == ''
|
||||
return [] if val.to_s == '-'
|
||||
return val.split(',') if val.is_a? String
|
||||
val
|
||||
def self.setting_for_project(proj, config)
|
||||
return false if proj.blank?
|
||||
# project based
|
||||
pm = MessengerSetting.find_by(project_id: proj.id)
|
||||
unless pm.nil?
|
||||
return false if pm.send(config) == 1
|
||||
return true if pm.send(config) == 2
|
||||
# 0 = use system based settings
|
||||
end
|
||||
# system based
|
||||
return true if RedmineMessenger.settings[config].present? && RedmineMessenger.settings[config] == '1'
|
||||
false
|
||||
end
|
||||
|
||||
def self.detail_to_field(detail)
|
||||
|
||||
61
app/models/messenger_setting.rb
Normal file
61
app/models/messenger_setting.rb
Normal file
@@ -0,0 +1,61 @@
|
||||
# Redmine Messenger plugin for Redmine
|
||||
|
||||
class MessengerSetting < ActiveRecord::Base
|
||||
include Redmine::SafeAttributes
|
||||
belongs_to :project
|
||||
|
||||
validates :project_id, presence: true
|
||||
|
||||
safe_attributes 'messenger_url',
|
||||
'messenger_icon',
|
||||
'messenger_channel',
|
||||
'messenger_username',
|
||||
'messenger_verify_ssl',
|
||||
'auto_mentions',
|
||||
'display_watchers',
|
||||
'post_updates',
|
||||
'new_include_description',
|
||||
'updated_include_description',
|
||||
'post_private_issues',
|
||||
'post_private_notes',
|
||||
'post_wiki',
|
||||
'post_wiki_updates',
|
||||
'post_db',
|
||||
'post_db_updates',
|
||||
'post_contact',
|
||||
'post_contact_updates',
|
||||
'post_password',
|
||||
'post_password_updates'
|
||||
|
||||
attr_accessible :messenger_url,
|
||||
:messenger_icon,
|
||||
:messenger_channel,
|
||||
:messenger_username,
|
||||
:messenger_verify_ssl,
|
||||
:auto_mentions,
|
||||
:display_watchers,
|
||||
:post_updates,
|
||||
:new_include_description,
|
||||
:updated_include_description,
|
||||
:post_private_issues,
|
||||
:post_private_notes,
|
||||
:post_wiki,
|
||||
:post_wiki_updates,
|
||||
:post_db,
|
||||
:post_db_updates,
|
||||
:post_contact,
|
||||
:post_contact_updates,
|
||||
:post_password,
|
||||
:post_password_updates
|
||||
|
||||
def self.find_or_create(p_id)
|
||||
setting = MessengerSetting.find_by(project_id: p_id)
|
||||
unless setting
|
||||
setting = MessengerSetting.new
|
||||
setting.project_id = p_id
|
||||
setting.save!
|
||||
end
|
||||
|
||||
setting
|
||||
end
|
||||
end
|
||||
4
app/views/messenger_settings/_messenger_select.html.erb
Normal file
4
app/views/messenger_settings/_messenger_select.html.erb
Normal file
@@ -0,0 +1,4 @@
|
||||
<p>
|
||||
<%= f.select mf, project_messenger_options(@messenger_setting.send(mf)), label: l("label_settings_#{mf}") %>
|
||||
<em class="info" style="display: inline;"><%= l(:label_default) %>: <%= project_setting_messenger_default_value(mf) %></em>
|
||||
</p>
|
||||
4
app/views/messenger_settings/_messenger_text.html.erb
Normal file
4
app/views/messenger_settings/_messenger_text.html.erb
Normal file
@@ -0,0 +1,4 @@
|
||||
<p>
|
||||
<%= f.text_field mf, size: size, label: l("label_settings_#{mf}") %>
|
||||
<em class="info"><%= l(:label_messenger_project_text_field_info) %> (<%= l(:label_default) %>: <%= RedmineMessenger.settings[mf] %>)</em>
|
||||
</p>
|
||||
74
app/views/messenger_settings/_show.html.erb
Normal file
74
app/views/messenger_settings/_show.html.erb
Normal file
@@ -0,0 +1,74 @@
|
||||
|
||||
<div class="box tabular messenger_settings">
|
||||
<%
|
||||
@messenger_setting = MessengerSetting.find_or_create(@project.id)
|
||||
%>
|
||||
|
||||
<%= labelled_form_for :setting, @messenger_setting,
|
||||
url: { controller: 'messenger_settings',
|
||||
action: 'save', id: @project, tab: 'messenger',
|
||||
partial: 'messenger_settings/save',
|
||||
setting_id: @messenger_setting.id } do |f| %>
|
||||
<%= error_messages_for 'messenger_setting' %>
|
||||
<div class="box">
|
||||
|
||||
<div class="info"><%= t(:messenger_settings_project_intro) %></div><br />
|
||||
|
||||
<p><%= f.text_field :messenger_url, size: 60, label: l(:label_settings_messenger_url) %><em class="info"><%= l(:label_messenger_project_text_field_info) %> (<%= l(:label_messenger_default_not_visible) %>)</em></p>
|
||||
|
||||
<%= render partial: 'messenger_settings/messenger_text', locals: { f: f, mf: :messenger_icon, size: 60 } %>
|
||||
<%= render partial: 'messenger_settings/messenger_text', locals: { f: f, mf: :messenger_channel, size: 30 } %>
|
||||
<%= render partial: 'messenger_settings/messenger_text', locals: { f: f, mf: :messenger_username, size: 30 } %>
|
||||
|
||||
<%= render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :messenger_verify_ssl } %>
|
||||
|
||||
<br />
|
||||
<h3><%= l(:label_issue_plural) %></h3>
|
||||
|
||||
<div class="info"><%= t(:messenger_issue_intro) %></div><br />
|
||||
|
||||
<%= render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :auto_mentions } %>
|
||||
<%= render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :display_watchers } %>
|
||||
<%= render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_updates } %>
|
||||
<%= render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :new_include_description } %>
|
||||
<%= render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :updated_include_description } %>
|
||||
<%= render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_private_issues } %>
|
||||
<%= render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_private_notes } %>
|
||||
|
||||
<br />
|
||||
<h3><%= l(:label_wiki) %></h3>
|
||||
|
||||
<div class="info"><%= t(:messenger_wiki_intro) %></div><br />
|
||||
|
||||
<%= render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_wiki } %>
|
||||
<%= render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_wiki_updates } %>
|
||||
|
||||
<% if RedmineMessenger::REDMINE_DB_SUPPORT %>
|
||||
<br />
|
||||
<h3><%= l(:label_db_entry_plural) %></h3>
|
||||
<div class="info"><%= t(:messenger_db_intro) %></div><br />
|
||||
<%= render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_db } %>
|
||||
<%= render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_db_updates } %>
|
||||
<% end %>
|
||||
|
||||
<% if RedmineMessenger::REDMINE_CONTACTS_SUPPORT %>
|
||||
<br />
|
||||
<h3><%= l(:label_contact_plural) %></h3>
|
||||
<div class="info"><%= t(:messenger_contacts_intro) %></div><br />
|
||||
<%= render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_contact } %>
|
||||
<%= render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_contact_updates } %>
|
||||
<% end %>
|
||||
|
||||
<% if RedmineMessenger::REDMINE_PASSWORDS_SUPPORT %>
|
||||
<br />
|
||||
<h3><%= l(:label_settings_post_password) %></h3>
|
||||
<div class="info"><%= t(:messenger_passwords_intro) %></div><br />
|
||||
<%= render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_password } %>
|
||||
<%= render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :post_password_updates } %>
|
||||
<% end %>
|
||||
|
||||
</div>
|
||||
<%= submit_tag l(:button_save) %>
|
||||
<% end %>
|
||||
|
||||
</div>
|
||||
@@ -1,3 +1,5 @@
|
||||
<div class="info"><%= t(:messenger_settings_intro) %></div><br />
|
||||
|
||||
<p>
|
||||
<%= content_tag(:label, l(:label_settings_messenger_url)) %>
|
||||
<%= text_field_tag('settings[messenger_url]', @settings[:messenger_url], size: 60, placeholder: 'https://rocket.chat/hooks/my_rocket_chat_token') %>
|
||||
@@ -29,6 +31,7 @@
|
||||
<br />
|
||||
<h3><%= l(:label_issue_plural) %></h3>
|
||||
|
||||
<div class="info"><%= t(:messenger_issue_intro) %></div><br />
|
||||
|
||||
<p>
|
||||
<%= content_tag(:label, l(:label_settings_auto_mentions)) %>
|
||||
@@ -63,6 +66,8 @@
|
||||
<br />
|
||||
<h3><%= l(:label_wiki) %></h3>
|
||||
|
||||
<div class="info"><%= t(:messenger_wiki_intro) %></div><br />
|
||||
|
||||
<p>
|
||||
<%= content_tag(:label, l(:label_settings_post_wiki)) %>
|
||||
<%= check_box_tag 'settings[post_wiki]', 1, @settings[:post_wiki] %>
|
||||
@@ -76,6 +81,8 @@
|
||||
<br />
|
||||
<h3><%= l(:label_db_entry_plural) %></h3>
|
||||
|
||||
<div class="info"><%= t(:messenger_db_intro) %></div><br />
|
||||
|
||||
<p>
|
||||
<%= content_tag(:label, l(:label_settings_post_db)) %>
|
||||
<%= check_box_tag 'settings[post_db]', 1, @settings[:post_db] %>
|
||||
@@ -90,6 +97,8 @@
|
||||
<br />
|
||||
<h3><%= l(:label_contact_plural) %></h3>
|
||||
|
||||
<div class="info"><%= t(:messenger_contacts_intro) %></div><br />
|
||||
|
||||
<p>
|
||||
<%= content_tag(:label, l(:label_settings_post_contact)) %>
|
||||
<%= check_box_tag 'settings[post_contact]', 1, @settings[:post_contact] %>
|
||||
@@ -104,6 +113,8 @@
|
||||
<br />
|
||||
<h3><%= l(:label_password_plural) %></h3>
|
||||
|
||||
<div class="info"><%= t(:messenger_passwords_intro) %></div><br />
|
||||
|
||||
<p>
|
||||
<%= content_tag(:label, l(:label_settings_post_password)) %>
|
||||
<%= check_box_tag 'settings[post_password]', 1, @settings[:post_password] %>
|
||||
|
||||
@@ -1,35 +1,49 @@
|
||||
# German strings
|
||||
de:
|
||||
permission_manage_messenger: Messenger verwalten
|
||||
label_messenger_contact_created: "[%{project_url}] Kontakt %{url} erstellt von *%{user}*"
|
||||
label_messenger_contact_updated: "[%{project_url}] Kontakt %{url} aktualisiert von *%{user}*"
|
||||
label_messenger_db_entry_created: "[%{project_url}] DB Eintrag %{url} erstellt von *%{user}*"
|
||||
label_messenger_db_entry_updated: "[%{project_url}] DB Eintrag %{url} aktualisiert von *%{user}*"
|
||||
label_messenger_default_not_visible: Standardeinstellung wird aus Sicherheitsgründen nicht angezeigt
|
||||
label_messenger_issue_created: "[%{project_url}] Ticket %{url} erstellt von *%{user}*"
|
||||
label_messenger_issue_updated: "[%{project_url}] Ticket %{url} aktualisiert von *%{user}*"
|
||||
label_messenger_password_created: "[%{project_url}] Kennwort %{url} erstellt von *%{user}*"
|
||||
label_messenger_password_updated: "[%{project_url}] Kennwort %{url} aktualisiert von *%{user}*"
|
||||
label_messenger_project_text_field_info: Leer lassen für Systemstandard. Anwenden um ihn zu deaktivieren.
|
||||
label_messenger_settings_default: Standardeinstellung
|
||||
label_messenger_settings_disabled: Deaktiviert
|
||||
label_messenger_settings_enabled: Aktiviert
|
||||
label_messenger_wiki_created: "[%{project_url}] Wiki %{url} erstellt von *%{user}*"
|
||||
label_messenger_wiki_updated: "[%{project_url}] Wiki %{url} aktualisiert von *%{user}*"
|
||||
label_settings_auto_mentions: Convert names to mentions?
|
||||
label_settings_display_watchers: Display watchers?
|
||||
label_messenger: Messenger
|
||||
label_settings_auto_mentions: Namen für Mentions konvertiert?
|
||||
label_settings_display_watchers: Beobachter?
|
||||
label_settings_messenger_channel: Messenger Channel
|
||||
label_settings_messenger_icon: Messenger Icon
|
||||
label_settings_messenger_url: Messenger URL
|
||||
label_settings_messenger_username: Messenger Benutzer
|
||||
label_settings_messenger_verify_ssl: SSL verifiziert
|
||||
label_settings_new_include_description: Description in new issue?
|
||||
label_settings_post_contact_updates: Contact updates?
|
||||
label_settings_post_contact: Contact added?
|
||||
label_settings_post_db_updates: DB entry updates?
|
||||
label_settings_post_db: DB entry added?
|
||||
label_settings_post_password_updates: Password updates?
|
||||
label_settings_post_password: Password added?
|
||||
label_settings_post_private_issues: Post updates for private issues?
|
||||
label_settings_post_private_notes: Post private notes?
|
||||
label_settings_post_updates: Post issue updates?
|
||||
label_settings_post_wiki_updates: Post Wiki updates?
|
||||
label_settings_post_wiki: Post Wiki added?
|
||||
label_settings_updated_include_description: Description in update issue?
|
||||
messenger_channel_info_html: 'The channel can be changed on a per-project basis by creating a <a href="/custom_fields/new?type=ProjectCustomField&custom_field[name]=Rocket.Chat Channel">project custom field</a> named "Messenger Channel" (without quotes).'
|
||||
messenger_url_info_html: 'Generate an <a target="_blank" href="https://github.com/AlphaNodes/redmine_messenger#prepare-your-messenger-service">Incoming WebHook</a> URL from the sessenger service. This URL can be changed on a per-project basis by creating a <a href="/custom_fields/new?type=ProjectCustomField&custom_field[name]=Messenger Channel">project custom field</a> named "Messenger URL" (without quotes).'
|
||||
messenger_verify_ssl_info_html: 'If your Messenger service uses an invalid or self-signed SSL certificate, disable it.'
|
||||
label_settings_new_include_description: Neue Ticketeschreibung?
|
||||
label_settings_post_contact_updates: Kontakt Updates?
|
||||
label_settings_post_contact: Neue Kontakte?
|
||||
label_settings_post_db_updates: DB entry Updates?
|
||||
label_settings_post_db: Neue DB entries?
|
||||
label_settings_post_password_updates: Passwort Updates?
|
||||
label_settings_post_password: Neue Passwörter?
|
||||
label_settings_post_private_issues: Private Ticket Updates?
|
||||
label_settings_post_private_notes: Private Notizen?
|
||||
label_settings_post_updates: Ticket Updates?
|
||||
label_settings_post_wiki_updates: Wiki Updates?
|
||||
label_settings_post_wiki: Neue Wikis?
|
||||
label_settings_updated_include_description: Ticket Beschreibungsupdates?
|
||||
messenger_channel_info_html: 'Hier wird der Channel dem die Nachrichten gesendet werden sollen. Es können mehrere Channel angegeben werden, indem Sie mit Komma getrennt werden.'
|
||||
messenger_contacts_intro: Legen Sie fest welche Einträge oder Änderungen für Kontakte im angegebenen Messenger Channel versendet werden.
|
||||
messenger_db_intro: Legen Sie fest welche Einträge oder Änderungen für DB-Einträge im angegebenen Messenger Channel versendet werden.
|
||||
messenger_issue_intro: Legen Sie fest welche Einträge oder Änderungen für Tickets im angegebenen Messenger Channel versendet werden.
|
||||
messenger_passwords_intro: Legen Sie fest welche Einträge oder Änderungen für Passwörter im angegebenen Messenger Channel versendet werden.
|
||||
messenger_settings_intro: Ist die Messenger URL im Adminbereich leer werden keine Nachrichten von Redmine an den Messenger verschickt. Egal welche Angaben sonst hier durchgeführt werden. Ist der globale Versand von Nachrichten für alle Projekte gewünscht, trägt man hier die URL ein. Für alle Projekte werden dann in den entsprechenden Channel Nachrichten versendet. Will man jedoch nur für bestimmte Projekte etwas schicken lässt man die URL hier leer. Die entsprechenden Einstellungen müssen dann in den jeweiligen Projekten in der Projektkonfiguration durchgeführt werden.
|
||||
messenger_settings_project_intro: Wurde die Messenger URL im Administrationsbereich leer gelassen weil man Änderungen nur für bestimmte Projekte an den Messenger schicken will, trägt man in der jeweiligen Projektkonfiguration die Messenger URL ein.
|
||||
messenger_url_info_html: 'Generiere eine <a target="_blank" href="https://github.com/AlphaNodes/redmine_messenger#prepare-your-messenger-service">Incoming WebHook</a> URL vom Messenger Service. Um nur aus bestimmten Projekten Nachrichten zu versenden, kann diese URL leer bleiben und in den Projekteinstellungen gesetzt werden.'
|
||||
messenger_verify_ssl_info_html: 'Falls der Messenger Service ein ungültiges oder selbst erstelltes (self-signed) SSL Zertifikat verwendet bitte deaktivieren.'
|
||||
messenger_wiki_intro: Legen Sie fest welche Einträge oder Änderungen für Wikis im angegebenen Messenger Channel versendet werden.
|
||||
|
||||
@@ -1,15 +1,22 @@
|
||||
# English strings
|
||||
en:
|
||||
permission_manage_messenger: Manage messenger
|
||||
label_messenger_contact_created: "[%{project_url}] Contact %{url} created by *%{user}*"
|
||||
label_messenger_contact_updated: "[%{project_url}] Contact %{url} updated by *%{user}*"
|
||||
label_messenger_db_entry_created: "[%{project_url}] DB entry %{url} created by *%{user}*"
|
||||
label_messenger_db_entry_updated: "[%{project_url}] DB entry %{url} updated by *%{user}*"
|
||||
label_messenger_default_not_visible: Default setting is not visible for security reasons
|
||||
label_messenger_issue_created: "[%{project_url}] Issue %{url} created by *%{user}*"
|
||||
label_messenger_issue_updated: "[%{project_url}] Issue %{url} updated by *%{user}*"
|
||||
label_messenger_password_created: "[%{project_url}] Kennwort %{url} created by *%{user}*"
|
||||
label_messenger_password_updated: "[%{project_url}] Kennwort %{url} updated by *%{user}*"
|
||||
label_messenger_project_text_field_info: Leave it blank for system default. Use - to disable it.
|
||||
label_messenger_settings_default: System default
|
||||
label_messenger_settings_disabled: Disabled
|
||||
label_messenger_settings_enabled: Enabled
|
||||
label_messenger_wiki_created: "[%{project_url}] Wiki %{url} created by *%{user}*"
|
||||
label_messenger_wiki_updated: "[%{project_url}] Wiki %{url} updated by *%{user}*"
|
||||
label_messenger: Messenger
|
||||
label_settings_auto_mentions: Convert names to mentions?
|
||||
label_settings_display_watchers: Display watchers?
|
||||
label_settings_messenger_channel: Messenger Channel
|
||||
@@ -17,19 +24,26 @@ en:
|
||||
label_settings_messenger_url: Messenger URL
|
||||
label_settings_messenger_username: Messenger username
|
||||
label_settings_messenger_verify_ssl: Verify SSL
|
||||
label_settings_new_include_description: Description in new issue?
|
||||
label_settings_new_include_description: New issue description?
|
||||
label_settings_post_contact_updates: Contact updates?
|
||||
label_settings_post_contact: Contact added?
|
||||
label_settings_post_db_updates: DB entry updates?
|
||||
label_settings_post_db: DB entry added?
|
||||
label_settings_post_password_updates: Password updates?
|
||||
label_settings_post_password: Password added?
|
||||
label_settings_post_private_issues: Post updates for private issues?
|
||||
label_settings_post_private_notes: Post private notes?
|
||||
label_settings_post_updates: Post issue updates?
|
||||
label_settings_post_wiki_updates: Post Wiki updates?
|
||||
label_settings_post_private_issues: Private issue updates?
|
||||
label_settings_post_private_notes: Private notes updates?
|
||||
label_settings_post_updates: Issue updates?
|
||||
label_settings_post_wiki_updates: Wiki updates?
|
||||
label_settings_post_wiki: Post Wiki added?
|
||||
label_settings_updated_include_description: Description in update issue?
|
||||
messenger_channel_info_html: 'The channel can be changed on a per-project basis by creating a <a href="/custom_fields/new?type=ProjectCustomField&custom_field[name]=Rocket.Chat Channel">project custom field</a> named "Messenger Channel" (without quotes).'
|
||||
messenger_url_info_html: 'Generate an <a target="_blank" href="https://github.com/AlphaNodes/redmine_messenger#prepare-your-messenger-service">Incoming WebHook</a> URL from the sessenger service. This URL can be changed on a per-project basis by creating a <a href="/custom_fields/new?type=ProjectCustomField&custom_field[name]=Messenger Channel">project custom field</a> named "Messenger URL" (without quotes).'
|
||||
messenger_channel_info_html: 'Here you have to specify the channel, which should be used. You can define multible channels, seperated by comma'
|
||||
messenger_contacts_intro: Activate the changes for Issues that should be sent to the pre-defined Messenger channel.
|
||||
messenger_db_intro: Activate the changes for DB that should be sent to the pre-defined Messenger channel.
|
||||
messenger_issue_intro: Activate the changes for Issues that should be sent to the pre-defined Messenger channel.
|
||||
messenger_passwords_intro: Activate the changes for Passwords that should be sent to the pre-defined Messenger channel.
|
||||
messenger_settings_intro: "Leave the Messenger URL in the administration area empty in order to send no messages from Redmine to the Messenger. No matter what else you have configured here. In case you wish to send messages of all Redmine projects to the Messenger fill out the URL. The messages will be sent to the specific channel. If you want only to be notified by some of the projects (not all) leave the messenger URL here blank and go to the specific project configuration."
|
||||
messenger_settings_project_intro: "If you left empty the Messenger URL in the administration area in case to be not globally notified by all project changes you can configure your Messenger URL in the project settings."
|
||||
messenger_url_info_html: 'Generate an <a target="_blank" href="https://github.com/AlphaNodes/redmine_messenger#prepare-your-messenger-service">Incoming WebHook</a> URL from the messenger service. Leave it empty, if you only want to activate specific projects with project based settings'
|
||||
messenger_verify_ssl_info_html: 'If your Messenger service uses an invalid or self-signed SSL certificate, disable it.'
|
||||
messenger_wiki_intro: Activate the changes for Wikis that should be sent to the pre-defined Messenger channel.
|
||||
|
||||
5
config/routes.rb
Normal file
5
config/routes.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
# Redmine Messenger plugin for Redmine
|
||||
|
||||
RedmineApp::Application.routes.draw do
|
||||
match 'projects/:id/messenger_settings/:action', controller: 'messenger_settings', via: %i[get post put patch]
|
||||
end
|
||||
29
db/migrate/001_create_messenger_settings.rb
Normal file
29
db/migrate/001_create_messenger_settings.rb
Normal file
@@ -0,0 +1,29 @@
|
||||
# Redmine Messenger plugin for Redmine
|
||||
|
||||
class CreateMessengerSettings < ActiveRecord::Migration
|
||||
def change
|
||||
create_table :messenger_settings do |t|
|
||||
t.belongs_to :project, null: false
|
||||
t.string :messenger_url
|
||||
t.string :messenger_icon
|
||||
t.string :messenger_channel
|
||||
t.string :messenger_username
|
||||
t.integer :messenger_verify_ssl, default: 0, null: false
|
||||
t.integer :auto_mentions, default: 0, null: false
|
||||
t.integer :display_watchers, default: 0, null: false
|
||||
t.integer :post_updates, default: 0, null: false
|
||||
t.integer :new_include_description, default: 0, null: false
|
||||
t.integer :updated_include_description, default: 0, null: false
|
||||
t.integer :post_private_issues, default: 0, null: false
|
||||
t.integer :post_private_notes, default: 0, null: false
|
||||
t.integer :post_wiki, default: 0, null: false
|
||||
t.integer :post_wiki_updates, default: 0, null: false
|
||||
t.integer :post_db, default: 0, null: false
|
||||
t.integer :post_db_updates, default: 0, null: false
|
||||
t.integer :post_contact, default: 0, null: false
|
||||
t.integer :post_contact_updates, default: 0, null: false
|
||||
t.integer :post_password, default: 0, null: false
|
||||
t.integer :post_password_updates, default: 0, null: false
|
||||
end
|
||||
end
|
||||
end
|
||||
8
init.rb
8
init.rb
@@ -1,3 +1,5 @@
|
||||
# Redmine Messenger plugin for Redmine
|
||||
|
||||
require 'redmine'
|
||||
require 'redmine_messenger'
|
||||
|
||||
@@ -11,14 +13,16 @@ Redmine::Plugin.register :redmine_messenger do
|
||||
|
||||
requires_redmine version_or_higher: '3.0.0'
|
||||
|
||||
permission :manage_messenger, projects: :settings, messenger_settings: :save
|
||||
|
||||
settings default: {
|
||||
messenger_url: '',
|
||||
messenger_channel: 'redmine',
|
||||
messenger_icon: 'https://raw.githubusercontent.com/alphanodes/redmine_messenger/master/assets/images/icon.png',
|
||||
messenger_channel: 'redmine',
|
||||
messenger_username: 'robot',
|
||||
messenger_verify_ssl: '1',
|
||||
display_watchers: '0',
|
||||
auto_mentions: '1',
|
||||
display_watchers: '0',
|
||||
post_updates: '1',
|
||||
new_include_description: '1',
|
||||
updated_include_description: '1',
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
# Redmine Messenger plugin for Redmine
|
||||
|
||||
Rails.configuration.to_prepare do
|
||||
require_dependency 'projects_helper'
|
||||
|
||||
# Patches
|
||||
require_dependency 'redmine_messenger/patches/issue_patch'
|
||||
require_dependency 'redmine_messenger/patches/wiki_page_patch'
|
||||
require_dependency 'redmine_messenger/patches/projects_helper_patch'
|
||||
|
||||
require 'redmine_messenger/patches/contact_patch' if RedmineMessenger::REDMINE_CONTACTS_SUPPORT
|
||||
require 'redmine_messenger/patches/db_entry_patch' if RedmineMessenger::REDMINE_DB_SUPPORT
|
||||
|
||||
@@ -9,10 +9,9 @@ module RedmineMessenger
|
||||
|
||||
channels = Messenger.channels_for_project issue.project
|
||||
url = Messenger.url_for_project issue.project
|
||||
post_private_issues = Messenger.post_private_issues_for_project(issue.project)
|
||||
|
||||
return unless channels.present? && url && issue.save
|
||||
return if issue.is_private? && post_private_issues != '1'
|
||||
return if issue.is_private? && !Messenger.setting_for_project(project, :post_private_issues)
|
||||
|
||||
msg = "[#{ERB::Util.html_escape(issue.project)}] #{ERB::Util.html_escape(journal.user.to_s)} updated <#{Messenger.object_url issue}|#{ERB::Util.html_escape(issue)}>"
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ module RedmineMessenger
|
||||
|
||||
module InstanceMethods
|
||||
def send_messenger_create
|
||||
return unless RedmineMessenger.settings[:post_contact] == '1'
|
||||
return unless Messenger.setting_for_project(project, :post_contact)
|
||||
set_language_if_valid Setting.default_language
|
||||
|
||||
channels = Messenger.channels_for_project project
|
||||
@@ -21,14 +21,14 @@ module RedmineMessenger
|
||||
|
||||
return unless channels.present? && url
|
||||
Messenger.speak(l(:label_messenger_contact_created,
|
||||
project_url: "<#{Messenger.object_url self}|#{ERB::Util.html_escape(project)}>",
|
||||
project_url: "<#{Messenger.object_url project}|#{ERB::Util.html_escape(project)}>",
|
||||
url: "<#{Messenger.object_url self}|#{name}>",
|
||||
user: User.current),
|
||||
channels, nil, url)
|
||||
end
|
||||
|
||||
def send_messenger_update
|
||||
return unless RedmineMessenger.settings[:post_contact_updates] == '1'
|
||||
return unless Messenger.setting_for_project(project, :post_contact_updates)
|
||||
set_language_if_valid Setting.default_language
|
||||
|
||||
channels = Messenger.channels_for_project project
|
||||
@@ -36,7 +36,7 @@ module RedmineMessenger
|
||||
|
||||
return unless channels.present? && url
|
||||
Messenger.speak(l(:label_messenger_contact_updated,
|
||||
project_url: "<#{Messenger.object_url self}|#{ERB::Util.html_escape(project)}>",
|
||||
project_url: "<#{Messenger.object_url project}|#{ERB::Util.html_escape(project)}>",
|
||||
url: "<#{Messenger.object_url self}|#{name}>",
|
||||
user: User.current),
|
||||
channels, nil, url)
|
||||
|
||||
@@ -13,7 +13,7 @@ module RedmineMessenger
|
||||
|
||||
module InstanceMethods
|
||||
def send_messenger_create
|
||||
return unless RedmineMessenger.settings[:post_db] == '1'
|
||||
return unless Messenger.setting_for_project(project, :post_db)
|
||||
set_language_if_valid Setting.default_language
|
||||
|
||||
channels = Messenger.channels_for_project project
|
||||
@@ -21,14 +21,14 @@ module RedmineMessenger
|
||||
|
||||
return unless channels.present? && url
|
||||
Messenger.speak(l(:label_messenger_db_entry_created,
|
||||
project_url: "<#{Messenger.object_url self}|#{ERB::Util.html_escape(project)}>",
|
||||
project_url: "<#{Messenger.object_url project}|#{ERB::Util.html_escape(project)}>",
|
||||
url: "<#{Messenger.object_url self}|#{name}>",
|
||||
user: User.current),
|
||||
channels, nil, url)
|
||||
end
|
||||
|
||||
def send_messenger_update
|
||||
return unless RedmineMessenger.settings[:post_db_updates] == '1'
|
||||
return unless Messenger.setting_for_project(project, :post_db_updates)
|
||||
set_language_if_valid Setting.default_language
|
||||
|
||||
channels = Messenger.channels_for_project project
|
||||
@@ -36,7 +36,7 @@ module RedmineMessenger
|
||||
|
||||
return unless channels.present? && url
|
||||
Messenger.speak(l(:label_messenger_db_entry_updated,
|
||||
project_url: "<#{Messenger.object_url self}|#{ERB::Util.html_escape(project)}>",
|
||||
project_url: "<#{Messenger.object_url project}|#{ERB::Util.html_escape(project)}>",
|
||||
url: "<#{Messenger.object_url self}|#{name}>",
|
||||
user: User.current),
|
||||
channels, nil, url)
|
||||
|
||||
@@ -15,15 +15,14 @@ module RedmineMessenger
|
||||
def send_messenger_create
|
||||
channels = Messenger.channels_for_project project
|
||||
url = Messenger.url_for_project project
|
||||
post_private_issues = Messenger.post_private_issues_for_project(project)
|
||||
|
||||
return unless channels.present? && url
|
||||
return if is_private? && post_private_issues != '1'
|
||||
return if is_private? && !Messenger.setting_for_project(project, :post_private_issues)
|
||||
|
||||
set_language_if_valid Setting.default_language
|
||||
|
||||
attachment = {}
|
||||
if description.present? && RedmineMessenger.settings[:new_include_description] == '1'
|
||||
if description.present? && Messenger.setting_for_project(project, :new_include_description)
|
||||
attachment[:text] = ERB::Util.html_escape(description)
|
||||
end
|
||||
attachment[:fields] = [{
|
||||
@@ -49,7 +48,7 @@ module RedmineMessenger
|
||||
end
|
||||
|
||||
Messenger.speak(l(:label_messenger_issue_created,
|
||||
project_url: "<#{Messenger.object_url self}|#{ERB::Util.html_escape(project)}>",
|
||||
project_url: "<#{Messenger.object_url project}|#{ERB::Util.html_escape(project)}>",
|
||||
url: "<#{Messenger.object_url(self)}|#{ERB::Util.html_escape(self)}>#{Messenger.mentions description if RedmineMessenger.settings[:auto_mentions] == '1'}",
|
||||
user: author),
|
||||
channels, attachment, url)
|
||||
@@ -60,26 +59,23 @@ module RedmineMessenger
|
||||
|
||||
channels = Messenger.channels_for_project project
|
||||
url = Messenger.url_for_project project
|
||||
post_private_issues = Messenger.post_private_issues_for_project(project)
|
||||
post_private_notes = Messenger.post_private_notes_for_project(project)
|
||||
|
||||
return unless channels.present? && url && RedmineMessenger.settings[:post_updates] == '1'
|
||||
return if is_private? && post_private_issues != '1'
|
||||
return if current_journal.private_notes? && post_private_notes != '1'
|
||||
return unless channels.present? && url && Messenger.setting_for_project(project, :post_updates)
|
||||
return if is_private? && !Messenger.setting_for_project(project, :post_private_issues)
|
||||
return if current_journal.private_notes? && !Messenger.setting_for_project(project, :post_private_notes)
|
||||
|
||||
set_language_if_valid Setting.default_language
|
||||
|
||||
attachment = {}
|
||||
if current_journal.notes.present? &&
|
||||
RedmineMessenger.settings[:updated_include_description] == '1'
|
||||
if current_journal.notes.present? && Messenger.setting_for_project(project, :updated_include_description)
|
||||
attachment[:text] = ERB::Util.html_escape(current_journal.notes)
|
||||
end
|
||||
fields = current_journal.details.map { |d| Messenger.detail_to_field d }
|
||||
attachment[:fields] = fields if fields.any?
|
||||
|
||||
Messenger.speak(l(:label_messenger_issue_updated,
|
||||
project_url: "<#{Messenger.object_url self}|#{ERB::Util.html_escape(project)}>",
|
||||
url: "<#{Messenger.object_url self}|#{ERB::Util.html_escape(self)}>#{Messenger.mentions current_journal.notes if RedmineMessenger.settings[:auto_mentions] == '1'}",
|
||||
project_url: "<#{Messenger.object_url project}|#{ERB::Util.html_escape(project)}>",
|
||||
url: "<#{Messenger.object_url self}|#{ERB::Util.html_escape(self)}>#{Messenger.mentions(current_journal.notes) if Messenger.setting_for_project(project, :auto_mentions)}",
|
||||
user: current_journal.user),
|
||||
channels, attachment, url)
|
||||
end
|
||||
|
||||
@@ -13,7 +13,7 @@ module RedmineMessenger
|
||||
|
||||
module InstanceMethods
|
||||
def send_messenger_create
|
||||
return unless RedmineMessenger.settings[:post_password] == '1'
|
||||
return unless Messenger.setting_for_project(project, :post_password)
|
||||
set_language_if_valid Setting.default_language
|
||||
|
||||
channels = Messenger.channels_for_project project
|
||||
@@ -21,14 +21,14 @@ module RedmineMessenger
|
||||
|
||||
return unless channels.present? && url
|
||||
Messenger.speak(l(:label_messenger_password_created,
|
||||
project_url: "<#{Messenger.object_url self}|#{ERB::Util.html_escape(project)}>",
|
||||
project_url: "<#{Messenger.object_url project}|#{ERB::Util.html_escape(project)}>",
|
||||
url: "<#{Messenger.object_url self}|#{name}>",
|
||||
user: User.current),
|
||||
channels, nil, url)
|
||||
end
|
||||
|
||||
def send_messenger_update
|
||||
return unless RedmineMessenger.settings[:post_password_updates] == '1'
|
||||
return unless Messenger.setting_for_project(project, :post_password_updates)
|
||||
set_language_if_valid Setting.default_language
|
||||
|
||||
channels = Messenger.channels_for_project project
|
||||
@@ -36,7 +36,7 @@ module RedmineMessenger
|
||||
|
||||
return unless channels.present? && url
|
||||
Messenger.speak(l(:label_messenger_password_updated,
|
||||
project_url: "<#{Messenger.object_url self}|#{ERB::Util.html_escape(project)}>",
|
||||
project_url: "<#{Messenger.object_url project}|#{ERB::Util.html_escape(project)}>",
|
||||
url: "<#{Messenger.object_url self}|#{name}>",
|
||||
user: User.current),
|
||||
channels, nil, url)
|
||||
|
||||
48
lib/redmine_messenger/patches/projects_helper_patch.rb
Normal file
48
lib/redmine_messenger/patches/projects_helper_patch.rb
Normal file
@@ -0,0 +1,48 @@
|
||||
# Redmine Messenger plugin for Redmine
|
||||
|
||||
require_dependency 'projects_helper'
|
||||
|
||||
module RedmineMessenger
|
||||
module Patches
|
||||
module ProjectsHelperPatch
|
||||
def self.included(base)
|
||||
base.send(:include, InstanceMethods)
|
||||
base.class_eval do
|
||||
alias_method_chain :project_settings_tabs, :messenger
|
||||
end
|
||||
end
|
||||
|
||||
module InstanceMethods
|
||||
def project_messenger_options(active)
|
||||
options_for_select({ l(:label_messenger_settings_default) => 0,
|
||||
l(:label_messenger_settings_disabled) => 1,
|
||||
l(:label_messenger_settings_enabled) => 2 }, active)
|
||||
end
|
||||
|
||||
def project_settings_tabs_with_messenger
|
||||
tabs = project_settings_tabs_without_messenger
|
||||
action = { name: 'messenger',
|
||||
controller: 'messenger_settings',
|
||||
action: :show,
|
||||
partial: 'messenger_settings/show',
|
||||
label: :label_messenger }
|
||||
|
||||
tabs << action if User.current.allowed_to?(:manage_messenger, @project)
|
||||
tabs
|
||||
end
|
||||
|
||||
def project_setting_messenger_default_value(value)
|
||||
if RedmineMessenger.settings[value] == '1'
|
||||
l(:label_messenger_settings_enabled)
|
||||
else
|
||||
l(:label_messenger_settings_disabled)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
unless ProjectsHelper.included_modules.include?(RedmineMessenger::Patches::ProjectsHelperPatch)
|
||||
ProjectsHelper.send(:include, RedmineMessenger::Patches::ProjectsHelperPatch)
|
||||
end
|
||||
@@ -13,7 +13,7 @@ module RedmineMessenger
|
||||
|
||||
module InstanceMethods
|
||||
def send_messenger_create
|
||||
return unless RedmineMessenger.settings[:post_wiki] == '1'
|
||||
return unless Messenger.setting_for_project(project, :post_wiki)
|
||||
set_language_if_valid Setting.default_language
|
||||
|
||||
channels = Messenger.channels_for_project project
|
||||
@@ -21,14 +21,14 @@ module RedmineMessenger
|
||||
|
||||
return unless channels.present? && url
|
||||
Messenger.speak(l(:label_messenger_wiki_created,
|
||||
project_url: "<#{Messenger.object_url self}|#{ERB::Util.html_escape(project)}>",
|
||||
project_url: "<#{Messenger.object_url project}|#{ERB::Util.html_escape(project)}>",
|
||||
url: "<#{Messenger.object_url self}|#{title}>",
|
||||
user: User.current),
|
||||
channels, nil, url)
|
||||
end
|
||||
|
||||
def send_messenger_update
|
||||
return unless RedmineMessenger.settings[:post_wiki_updates] == '1'
|
||||
return unless Messenger.setting_for_project(project, :post_wiki_updates)
|
||||
set_language_if_valid Setting.default_language
|
||||
|
||||
channels = Messenger.channels_for_project project
|
||||
@@ -43,7 +43,7 @@ module RedmineMessenger
|
||||
end
|
||||
|
||||
Messenger.speak(l(:label_messenger_wiki_updated,
|
||||
project_url: "<#{Messenger.object_url self}|#{ERB::Util.html_escape(project)}>",
|
||||
project_url: "<#{Messenger.object_url project}|#{ERB::Util.html_escape(project)}>",
|
||||
url: "<#{Messenger.object_url self}|#{title}>",
|
||||
user: content.author),
|
||||
channels, attachment, url)
|
||||
|
||||
43
test/integration/common_views_test.rb
Normal file
43
test/integration/common_views_test.rb
Normal file
@@ -0,0 +1,43 @@
|
||||
# Redmine Messenger plugin for Redmine
|
||||
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class CommonViewsTest < Redmine::IntegrationTest
|
||||
fixtures :projects,
|
||||
:users,
|
||||
:roles,
|
||||
:members,
|
||||
:member_roles,
|
||||
:trackers,
|
||||
:projects_trackers,
|
||||
:enabled_modules,
|
||||
:issue_statuses,
|
||||
:issues,
|
||||
:enumerations,
|
||||
:custom_fields,
|
||||
:custom_values,
|
||||
:custom_fields_trackers
|
||||
|
||||
def setup
|
||||
RedmineMessenger::TestCase.prepare
|
||||
|
||||
@request = ActionController::TestRequest.new
|
||||
@response = ActionController::TestResponse.new
|
||||
@request.env['HTTP_REFERER'] = '/'
|
||||
end
|
||||
|
||||
test 'View user' do
|
||||
log_user('admin', 'admin')
|
||||
get '/users/2'
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
test 'View issue' do
|
||||
log_user('admin', 'admin')
|
||||
EnabledModule.create(project_id: 1, name: 'issue_tracking')
|
||||
issue = Issue.where(id: 1).first
|
||||
issue.save
|
||||
get '/issues/1'
|
||||
assert_response :success
|
||||
end
|
||||
end
|
||||
43
test/test_helper.rb
Normal file
43
test/test_helper.rb
Normal file
@@ -0,0 +1,43 @@
|
||||
# Redmine Messenger plugin for Redmine
|
||||
|
||||
require File.expand_path(File.dirname(__FILE__) + '/../../../test/test_helper')
|
||||
|
||||
module RedmineMessenger
|
||||
class TestCase
|
||||
include ActionDispatch::TestProcess
|
||||
def self.plugin_fixtures(plugin, *fixture_names)
|
||||
plugin_fixture_path = "#{Redmine::Plugin.find(plugin).directory}/test/fixtures"
|
||||
if fixture_names.first == :all
|
||||
fixture_names = Dir["#{plugin_fixture_path}/**/*.{yml}"]
|
||||
fixture_names.map! { |f| f[(plugin_fixture_path.size + 1)..-5] }
|
||||
else
|
||||
fixture_names = fixture_names.flatten.map(&:to_s)
|
||||
end
|
||||
|
||||
ActiveRecord::Fixtures.create_fixtures(plugin_fixture_path, fixture_names)
|
||||
end
|
||||
|
||||
def uploaded_test_file(name, mime)
|
||||
ActionController::TestUploadedFile.new(ActiveSupport::TestCase.fixture_path + "/files/#{name}", mime, true)
|
||||
end
|
||||
|
||||
def self.arrays_equal?(a1, a2)
|
||||
(a1 - a2) - (a2 - a1) == []
|
||||
end
|
||||
|
||||
def self.create_fixtures(fixtures_directory, table_names, _class_names = {})
|
||||
ActiveRecord::FixtureSet.create_fixtures(fixtures_directory, table_names, _class_names = {})
|
||||
end
|
||||
|
||||
def self.prepare
|
||||
Role.where(id: [1, 2]).each do |r|
|
||||
r.permissions << :view_issues
|
||||
r.save
|
||||
end
|
||||
|
||||
Project.where(id: [1, 2]).each do |project|
|
||||
EnabledModule.create(project: project, name: 'issue_tracking')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
41
test/unit/i18n_test.rb
Normal file
41
test/unit/i18n_test.rb
Normal file
@@ -0,0 +1,41 @@
|
||||
# Redmine Messenger plugin for Redmine
|
||||
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
module Redmine
|
||||
class I18nTest < ActiveSupport::TestCase
|
||||
include Redmine::I18n
|
||||
|
||||
def setup
|
||||
User.current = nil
|
||||
end
|
||||
|
||||
def teardown
|
||||
set_language_if_valid 'en'
|
||||
end
|
||||
|
||||
def test_valid_languages
|
||||
assert valid_languages.is_a?(Array)
|
||||
assert valid_languages.first.is_a?(Symbol)
|
||||
end
|
||||
|
||||
def test_locales_validness
|
||||
lang_files_count = Dir[Rails.root.join('plugins',
|
||||
'redmine_messenger',
|
||||
'config',
|
||||
'locales',
|
||||
'*.yml')].size
|
||||
assert_equal lang_files_count, 2
|
||||
valid_languages.each do |lang|
|
||||
assert set_language_if_valid(lang)
|
||||
end
|
||||
# check if parse error exists
|
||||
::I18n.locale = 'de'
|
||||
assert_equal 'Messenger Benutzer', l(:label_settings_messenger_username)
|
||||
::I18n.locale = 'en'
|
||||
assert_equal 'Messenger username', l(:label_settings_messenger_username)
|
||||
|
||||
set_language_if_valid('en')
|
||||
end
|
||||
end
|
||||
end
|
||||
31
test/unit/issue_test.rb
Normal file
31
test/unit/issue_test.rb
Normal file
@@ -0,0 +1,31 @@
|
||||
# Redmine Messenger plugin for Redmine
|
||||
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class IssueTest < ActiveSupport::TestCase
|
||||
fixtures :projects, :users, :members, :member_roles, :roles,
|
||||
:trackers, :projects_trackers,
|
||||
:enabled_modules,
|
||||
:issue_statuses, :issue_categories, :workflows,
|
||||
:enumerations,
|
||||
:issues, :journals, :journal_details,
|
||||
:custom_fields, :custom_fields_projects, :custom_fields_trackers, :custom_values,
|
||||
:time_entries
|
||||
|
||||
include Redmine::I18n
|
||||
|
||||
def setup
|
||||
set_language_if_valid 'en'
|
||||
end
|
||||
|
||||
def teardown
|
||||
User.current = nil
|
||||
end
|
||||
|
||||
def test_create
|
||||
issue = Issue.new(project_id: 1, tracker_id: 1, author_id: 3, subject: 'test_create')
|
||||
assert issue.save
|
||||
assert_equal issue.tracker.default_status, issue.status
|
||||
assert issue.description.nil?
|
||||
end
|
||||
end
|
||||
56
test/unit/project_test.rb
Normal file
56
test/unit/project_test.rb
Normal file
@@ -0,0 +1,56 @@
|
||||
# This file is a part of redmine_reporting,
|
||||
# a reporting and statistics plugin for Redmine.
|
||||
#
|
||||
# Copyright (c) 2016-2017 AlphaNodes GmbH
|
||||
# https://alphanodes.com
|
||||
#
|
||||
# redmine_reporting is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# redmine_reporting is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with redmine_reporting. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class ProjectTest < ActiveSupport::TestCase
|
||||
fixtures :projects, :trackers, :issue_statuses, :issues,
|
||||
:journals, :journal_details,
|
||||
:enumerations, :users, :issue_categories,
|
||||
:projects_trackers,
|
||||
:custom_fields,
|
||||
:custom_fields_projects,
|
||||
:custom_fields_trackers,
|
||||
:custom_values,
|
||||
:roles,
|
||||
:member_roles,
|
||||
:members,
|
||||
:enabled_modules,
|
||||
:versions,
|
||||
:wikis, :wiki_pages, :wiki_contents, :wiki_content_versions,
|
||||
:groups_users,
|
||||
:time_entries,
|
||||
:news, :comments,
|
||||
:documents,
|
||||
:workflows
|
||||
|
||||
def setup
|
||||
User.current = User.find(1)
|
||||
end
|
||||
|
||||
def test_create_project
|
||||
Project.delete_all
|
||||
Project.create!(name: 'Project Messenger', identifier: 'project-messenger')
|
||||
assert_equal 1, Project.count
|
||||
end
|
||||
|
||||
def test_load_project
|
||||
Project.find(1)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user