Nuevo plugin Additionals 2.0.20

This commit is contained in:
Manuel Cillero 2019-06-16 12:53:09 +02:00
parent a2a901b71b
commit 93e1e28683
354 changed files with 40514 additions and 0 deletions

View file

@ -0,0 +1,74 @@
require File.expand_path('../../test_helper', __FILE__)
class AdditionalsFontAwesomeTest < Additionals::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 test_value_info_should_return_infos
info = AdditionalsFontAwesome.value_info('invalid')
assert_equal({}, info)
info = AdditionalsFontAwesome.value_info('fas_car')
assert info.key?(:classes)
assert_equal :fas, info[:type]
assert_equal 'fas fa-car', info[:classes]
assert_not info.key?(:unicode)
end
def test_value_info_regular_icons
info = AdditionalsFontAwesome.value_info('far_address-book')
assert info.key?(:classes)
assert_equal 'normal', info[:font_weight]
assert_equal 'Font Awesome\ 5 Free', info[:font_family]
end
def test_value_info_solid_icons
info = AdditionalsFontAwesome.value_info('fas_address-book')
assert info.key?(:classes)
assert_equal 900, info[:font_weight]
assert_equal 'Font Awesome\ 5 Free', info[:font_family]
end
def test_value_info_brands_icons
info = AdditionalsFontAwesome.value_info('fab_xing')
assert info.key?(:classes)
assert_equal 'normal', info[:font_weight]
assert_equal 'Font Awesome\ 5 Brands', info[:font_family]
end
def test_brands_icon_with_details
info = AdditionalsFontAwesome.value_info('fab_amazon', with_details: true)
assert info.key?(:unicode)
assert info.key?(:label)
assert_equal '&#xf270;', info[:unicode]
assert_equal 'Amazon', info[:label]
end
def test_regular_icon_with_details
info = AdditionalsFontAwesome.value_info('far_calendar', with_details: true)
assert info.key?(:unicode)
assert info.key?(:label)
assert_equal '&#xf133;', info[:unicode]
assert_equal 'Calendar', info[:label]
end
def test_solid_icon_with_details
info = AdditionalsFontAwesome.value_info('fas_archive', with_details: true)
assert info.key?(:unicode)
assert info.key?(:label)
assert_equal '&#xf187;', info[:unicode]
assert_equal 'Archive', info[:label]
end
end

View file

@ -0,0 +1,55 @@
require File.expand_path('../../test_helper', __FILE__)
class AdditionalsMacroTest < Additionals::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
prepare_tests
@all_macros = Redmine::WikiFormatting::Macros.available_macros.map { |macro, _macro_options| macro.to_s }
end
def test_all
available_macros = AdditionalsMacro.all
assert_not_equal 0, available_macros.count
end
def test_all_with_only_names
available_macros = AdditionalsMacro.all(only_names: true)
assert available_macros.include?('child_pages')
end
def test_with_filter
available_macros = AdditionalsMacro.all(filtered: ['child_pages'], only_names: true)
assert available_macros.exclude?('child_pages')
for_two_macros_selection = @all_macros - %w[child_pages collapse] + ['', 'nonexistingmacro']
available_macros = AdditionalsMacro.all(filtered: for_two_macros_selection, only_names: true)
# -1 (hello world is always removed)
assert_equal %w[child_pages collapse], available_macros
end
def test_with_filter_all
available_macros = AdditionalsMacro.all(filtered: @all_macros, only_names: true)
assert_equal 0, available_macros.count
end
def test_with_controller_limit
available_macros = AdditionalsMacro.all(only_names: true, controller_only: 'issue')
assert available_macros.exclude?('child_pages')
available_macros = AdditionalsMacro.all(only_names: true, controller_only: 'wiki')
assert available_macros.include?('child_pages')
end
end

View file

@ -0,0 +1,88 @@
require File.expand_path('../../../test_helper', __FILE__)
class GlobalHelperTest < ActionView::TestCase
include Additionals::Helpers
include AdditionalsFontawesomeHelper
include AdditionalsMenuHelper
include CustomFieldsHelper
include Redmine::I18n
include ERB::Util
fixtures :projects, :trackers, :issue_statuses, :issues,
:enumerations, :users, :issue_categories,
:projects_trackers,
:roles,
:member_roles,
:members,
:enabled_modules,
:custom_fields,
:attachments,
:versions
def setup
super
set_language_if_valid('en')
User.current = nil
end
def test_system_info
text = system_info
assert_not_equal '', text
assert_not_equal 'unknown', text
end
def test_windows_platform
assert_nil windows_platform?
end
def test_user_with_avatar
html = user_with_avatar(users(:users_001))
assert_include 'Redmine Admin', html
end
def test_font_awesome_icon
html = font_awesome_icon('fas_cloud-upload-alt', class: 'test')
assert_include 'class="fas fa-cloud-upload-alt test"', html
html = font_awesome_icon('fab_xing', class: 'test')
assert_include 'class="fab fa-xing test"', html
html = font_awesome_icon('fas_cloud-upload-alt', pre_text: 'Testing')
assert_include 'Testing <span', html
html = font_awesome_icon('fas_cloud-upload-alt', post_text: 'Testing')
assert_include '</span> Testing', html
end
def test_parse_issue_url
stubs(:request).returns(stub('original_url' => 'http://redmine.local/issues/1#note-2'))
assert_equal({ issue_id: nil, comment_id: nil },
parse_issue_url(0, nil))
assert_equal({ issue_id: nil, comment_id: nil },
parse_issue_url('', nil))
assert_equal({ issue_id: nil, comment_id: nil },
parse_issue_url('http://localhost/issues/23', nil))
assert_equal({ issue_id: '23', comment_id: nil },
parse_issue_url('http://redmine.local/issues/23', nil))
assert_equal({ issue_id: '23', comment_id: 2 },
parse_issue_url('http://redmine.local/issues/23#note-2', nil))
assert_equal({ issue_id: '23', comment_id: 2 },
parse_issue_url('http://redmine.local/issues/issues/23/edit#note-2', nil))
end
def test_render_issue_macro_link
issue = Issue.generate!
issue.init_journal(User.first, 'Adding notes')
issue.save
stubs(:request).returns(stub('original_url' => 'http://redmine.local/issues/1#note-2'))
assert_match %r{/issues/#{issue.id}}, render_issue_macro_link(issue, 'Sample subject')
assert_no_match(/Adding notes/, render_issue_macro_link(issue, 'Sample subject'))
assert_match(/Adding notes/, render_issue_macro_link(issue, 'Sample subject', 1))
assert_match %r{N/A}, render_issue_macro_link(issue, 'Sample subject', 100)
end
end

View file

@ -0,0 +1,50 @@
require File.expand_path('../../test_helper', __FILE__)
class I18nTest < Additionals::TestCase
include Redmine::I18n
def setup
prepare_tests
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',
'additionals',
'config',
'locales',
'*.yml')].size
assert_equal 8, lang_files_count
valid_languages.each do |lang|
assert set_language_if_valid(lang)
end
# check if parse error exists
::I18n.locale = 'de'
assert_equal 'Externe URLs', l(:label_external_urls)
::I18n.locale = 'en'
assert_equal 'External urls', l(:label_external_urls)
::I18n.locale = 'es'
assert_equal 'URLs externos', l(:label_external_urls)
::I18n.locale = 'fr'
assert_equal 'Les urnes externes', l(:label_external_urls)
::I18n.locale = 'it'
assert_equal 'Esterno urls', l(:label_external_urls)
::I18n.locale = 'ja'
assert_equal '外部URL', l(:label_external_urls)
::I18n.locale = 'zh-TW'
assert_equal '外部連結', l(:label_external_urls)
::I18n.locale = 'zh'
assert_equal '外部 URLs', l(:label_external_urls)
set_language_if_valid('en')
end
end

View file

@ -0,0 +1,105 @@
require File.expand_path('../../test_helper', __FILE__)
class IssueTest < Additionals::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
prepare_tests
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_nil issue.description
end
def test_change_open_issue
with_additionals_settings(issue_freezed_with_close: 1) do
User.current = users(:users_003)
issue = issues(:issues_007)
issue.subject = 'Should be be saved'
assert issue.save
end
end
def test_change_closed_issue_with_permission
with_additionals_settings(issue_freezed_with_close: 1) do
User.current = users(:users_003)
role = Role.create!(name: 'Additionals Tester', permissions: [:edit_closed_issues])
Member.where(user_id: User.current).delete_all
project = projects(:projects_001)
Member.create!(principal: User.current, project_id: project.id, role_ids: [role.id])
issue = issues(:issues_008)
issue.subject = 'Should be saved'
assert issue.save
issue.reload
assert_equal 'Should be saved', issue.subject
end
end
def test_change_closed_issue_without_permission
with_additionals_settings(issue_freezed_with_close: 1) do
User.current = users(:users_003)
issue = issues(:issues_008)
assert issue.closed?
issue.subject = 'Should be not be saved'
assert_not issue.save
issue.reload
assert_not_equal 'Should be not be saved', issue.subject
end
end
def test_change_closed_issue_without_permission_but_freezed_disabled
with_additionals_settings(issue_freezed_with_close: 0) do
User.current = users(:users_003)
issue = issues(:issues_008)
issue.subject = 'Should be saved'
assert issue.save
issue.reload
assert_equal 'Should be saved', issue.subject
end
end
def test_auto_assigned_to
with_additionals_settings(issue_status_change: '0',
issue_auto_assign: '1',
issue_auto_assign_status: ['1'],
issue_auto_assign_role: '1') do
issue = Issue.new(project_id: 1, tracker_id: 1, author_id: 3, subject: 'test_create')
assert issue.save
assert_equal 2, issue.assigned_to_id
end
end
def test_disabled_auto_assigned_to
with_additionals_settings(issue_status_change: '0',
issue_auto_assign: '0',
issue_auto_assign_status: ['1'],
issue_auto_assign_role: '1') do
issue = Issue.new(project_id: 1, tracker_id: 1, author_id: 3, subject: 'test_create')
assert issue.save
assert_nil issue.assigned_to_id
end
end
end

View file

@ -0,0 +1,50 @@
require File.expand_path('../../test_helper', __FILE__)
class QueryTest < Additionals::TestCase
fixtures :projects, :users, :members, :member_roles, :roles,
:trackers, :projects_trackers,
:enabled_modules,
:roles
def setup
prepare_query_tests
end
def test_issue_query_principals_with_hide
User.current = @user_with_hide
query = IssueQuery.new(project: @project, name: '_')
# show all members + current user of hidden role
assert_equal 3, query.principals.count
end
def test_issue_query_principals_with_show_hide_permission
User.current = @user_with_show_hide
query = IssueQuery.new(project: @project, name: '_')
# show all members with 2 users of hidden role
assert_equal 4, query.principals.count
end
def prepare_query_tests
@role1 = Role.new(name: 'principal test hide1', users_visibility: 'members_of_visible_projects', hide: true)
@role1.add_permission!('view_issues')
@role1.save!
@role2 = Role.new(name: 'principal test hide2', users_visibility: 'members_of_visible_projects', hide: true)
@role2.add_permission!('view_issues', 'show_hidden_roles_in_memberbox')
@role2.save!
@project = projects(:projects_001)
@user_with_hide = User.generate!(firstname: 'hide1', lastname: 'role')
m = Member.new(user_id: @user_with_hide.id, project_id: @project.id)
m.member_roles.build(role_id: @role1.id)
m.save!
@user_with_show_hide = User.generate!(firstname: 'hide2', lastname: 'role')
m = Member.new(user_id: @user_with_show_hide.id, project_id: @project.id)
m.member_roles.build(role_id: @role2.id)
m.save!
end
end

View file

@ -0,0 +1,35 @@
require File.expand_path('../../test_helper', __FILE__)
class RoleTest < Additionals::TestCase
fixtures :projects, :users, :members, :member_roles, :roles,
:trackers, :projects_trackers,
:enabled_modules,
:roles
def setup
prepare_tests
end
def test_create
role = Role.new(name: 'role without hide')
assert role.save
role.reload
assert_equal false, role.hide
role = Role.new(name: 'role with hide', hide: true)
assert role.save
role.reload
assert_equal true, role.hide
end
def test_edit
role = roles(:roles_001)
role.hide = true
assert role.save
role.reload
assert_equal true, role.hide
end
end

View file

@ -0,0 +1,65 @@
require File.expand_path('../../test_helper', __FILE__)
class TimeEntryTest < Additionals::TestCase
fixtures :issues, :projects, :users, :time_entries,
:members, :roles, :member_roles,
:trackers, :issue_statuses,
:projects_trackers,
:journals, :journal_details,
:issue_categories, :enumerations,
:groups_users,
:enabled_modules
def setup
prepare_tests
end
def teardown
User.current = nil
end
def test_create_time_entry_without_issue
entry = TimeEntry.new(project: projects(:projects_001), user: users(:users_001), activity: TimeEntryActivity.first, hours: 100)
entry.spent_on = '2010-01-01'
assert entry.valid?
assert entry.save
end
def test_create_time_entry_with_open_issue
entry = TimeEntry.new(project: projects(:projects_001), user: users(:users_001), activity: TimeEntryActivity.first, hours: 100)
entry.spent_on = '2010-01-01'
entry.issue = Issue.create(project_id: 1, tracker_id: 1, author_id: 1, status_id: 1, subject: 'open issue')
assert_not entry.issue.closed?
assert entry.valid?
assert entry.save
end
def test_create_time_entry_with_closed_issue_without_permission
User.current = nil
issue = Issue.generate(project_id: 1, subject: 'closed issue')
issue.status = IssueStatus.where(is_closed: true).first
issue.save
entry = TimeEntry.new(project: projects(:projects_001), user: users(:users_001), activity: TimeEntryActivity.first, hours: 100)
entry.spent_on = '2010-01-01'
entry.issue = issue
assert entry.issue.closed?
assert_not entry.valid?
assert_not entry.save
end
def test_create_time_entry_with_closed_issue_with_permission
User.current = users(:users_003)
role = Role.create!(name: 'Additionals Tester', permissions: [:log_time_on_closed_issues])
Member.where(user_id: User.current).delete_all
project = projects(:projects_001)
Member.create!(principal: User.current, project_id: project.id, role_ids: [role.id])
entry = TimeEntry.new(project: projects(:projects_001), user: User.current, activity: TimeEntryActivity.first, hours: 100)
entry.spent_on = '2010-01-01'
entry.issue = Issue.create(project_id: 1, tracker_id: 1, author_id: 1, status_id: 5, subject: 'closed issue')
assert entry.issue.closed?
assert entry.valid?
assert entry.save
end
end

View file

@ -0,0 +1,104 @@
require File.expand_path('../../test_helper', __FILE__)
class WatcherTest < Additionals::TestCase
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, :enabled_modules,
:issues, :issue_statuses, :enumerations, :trackers, :projects_trackers,
:boards, :messages,
:wikis, :wiki_pages,
:watchers
def setup
prepare_tests
@author = users(:users_001)
@assigned_user = users(:users_002)
@changing_user = users(:users_004)
end
def test_new_issue_with_no_autowatch
with_additionals_settings(issue_autowatch_involved: 0) do
User.current = @author
issue = Issue.generate(author_id: @author.id)
issue.save
assert_equal 0, issue.watchers.count
assert_not issue.watched_by?(@author)
end
end
def test_new_issue_with_no_autowatch_by_user
with_additionals_settings(issue_autowatch_involved: 1) do
User.current = @author
User.current.pref.update_attribute :autowatch_involved_issue, false
issue = Issue.generate(author_id: @author.id)
issue.save
assert_equal 0, issue.watchers.count
assert_not issue.watched_by?(@author)
end
end
def test_new_issue_with_author_watch_only
with_additionals_settings(issue_autowatch_involved: 1) do
User.current = @author
issue = Issue.generate(author_id: @author.id)
issue.save
assert_equal 1, issue.watchers.count
assert issue.watched_by?(@author)
end
end
def test_new_issue_with_author_and_assigned_to_watchers
with_additionals_settings(issue_autowatch_involved: 1) do
User.current = @author
issue = Issue.generate(author_id: @author.id, assigned_to: @assigned_user)
issue.save
assert_equal 2, issue.watchers.count
assert issue.watched_by?(@author)
assert issue.watched_by?(@assigned_user)
end
end
def test_issue_do_not_add_author_with_user_change
with_additionals_settings(issue_autowatch_involved: 1) do
User.current = @author
issue = Issue.generate(author_id: @author.id, assigned_to: @assigned_user)
issue.save
assert_equal 2, issue.watchers.count
issue.remove_watcher(@author)
issue.reload
assert_equal 1, issue.watchers.count
User.current = @changing_user
issue.subject = 'Changing....'
issue.save
assert_equal 2, issue.watchers.count
assert issue.watched_by?(@changing_user)
assert issue.watched_by?(@assigned_user)
end
end
def test_issue_do_not_add_assigned_to_with_user_change
with_additionals_settings(issue_autowatch_involved: 1) do
User.current = @author
issue = Issue.generate(author_id: @author.id, assigned_to: @assigned_user)
issue.save
assert_equal 2, issue.watchers.count
issue.remove_watcher(@assigned_user)
issue.reload
assert_equal 1, issue.watchers.count
User.current = @changing_user
issue.subject = 'Changing....'
issue.save
assert_equal 2, issue.watchers.count
assert issue.watched_by?(@author)
assert issue.watched_by?(@changing_user)
end
end
end