Nuevo plugin Additionals 2.0.20
This commit is contained in:
parent
a2a901b71b
commit
93e1e28683
354 changed files with 40514 additions and 0 deletions
53
plugins/additionals/test/functional/account_controller_test.rb
Executable file
53
plugins/additionals/test/functional/account_controller_test.rb
Executable file
|
@ -0,0 +1,53 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class AccountControllerTest < Additionals::ControllerTest
|
||||
fixtures :users, :email_addresses, :roles
|
||||
|
||||
def setup
|
||||
Setting.default_language = 'en'
|
||||
User.current = nil
|
||||
end
|
||||
|
||||
def test_get_login_with_welcome_text
|
||||
with_additionals_settings(account_login_bottom: 'Lore impsuum') do
|
||||
get :login
|
||||
assert_response :success
|
||||
assert_select 'input[name=username]'
|
||||
assert_select 'input[name=password]'
|
||||
assert_select 'div.login-additionals', text: /Lore impsuum/
|
||||
end
|
||||
end
|
||||
|
||||
def test_get_login_without_welcome_text
|
||||
with_additionals_settings(account_login_bottom: '') do
|
||||
get :login
|
||||
assert_response :success
|
||||
assert_select 'input[name=username]'
|
||||
assert_select 'input[name=password]'
|
||||
assert_select 'div.login-additionals', count: 0
|
||||
end
|
||||
end
|
||||
|
||||
# See integration/account_test.rb for the full test
|
||||
def test_post_register_with_registration_on
|
||||
with_settings self_registration: '3' do
|
||||
assert_difference 'User.count' do
|
||||
post :register,
|
||||
params: { user: { login: 'register',
|
||||
password: 'secret123',
|
||||
password_confirmation: 'secret123',
|
||||
firstname: 'John',
|
||||
lastname: 'Doe',
|
||||
mail: 'register@example.com' } }
|
||||
assert_redirected_to '/my/account'
|
||||
end
|
||||
user = User.order(id: :desc).first
|
||||
assert_equal 'register', user.login
|
||||
assert_equal 'John', user.firstname
|
||||
assert_equal 'Doe', user.lastname
|
||||
assert_equal 'register@example.com', user.mail
|
||||
assert user.check_password?('secret123')
|
||||
assert user.active?
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,44 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class AdditionalsAssignToMeControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects,
|
||||
:users, :email_addresses, :user_preferences,
|
||||
:roles,
|
||||
:members,
|
||||
:member_roles,
|
||||
:issues,
|
||||
:issue_statuses,
|
||||
:issue_relations,
|
||||
:versions,
|
||||
:trackers,
|
||||
:projects_trackers,
|
||||
:issue_categories,
|
||||
:enabled_modules,
|
||||
:enumerations,
|
||||
:attachments,
|
||||
:workflows,
|
||||
:custom_fields,
|
||||
:custom_values,
|
||||
:custom_fields_projects,
|
||||
:custom_fields_trackers,
|
||||
:time_entries,
|
||||
:journals,
|
||||
:journal_details,
|
||||
:queries
|
||||
|
||||
test 'assign issue to user' do
|
||||
session[:user_id] = 2
|
||||
assert_difference('Journal.count') do
|
||||
put :update,
|
||||
params: { issue_id: 1 }
|
||||
end
|
||||
end
|
||||
|
||||
test 'no update for issue, which already same user is assigned' do
|
||||
session[:user_id] = 3
|
||||
assert_no_difference('Journal.count') do
|
||||
put :update,
|
||||
params: { issue_id: 2 }
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,44 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class AdditionalsChangeStatusControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects,
|
||||
:users, :email_addresses, :user_preferences,
|
||||
:roles,
|
||||
:members,
|
||||
:member_roles,
|
||||
:issues,
|
||||
:issue_statuses,
|
||||
:issue_relations,
|
||||
:versions,
|
||||
:trackers,
|
||||
:projects_trackers,
|
||||
:issue_categories,
|
||||
:enabled_modules,
|
||||
:enumerations,
|
||||
:attachments,
|
||||
:workflows,
|
||||
:custom_fields,
|
||||
:custom_values,
|
||||
:custom_fields_projects,
|
||||
:custom_fields_trackers,
|
||||
:time_entries,
|
||||
:journals,
|
||||
:journal_details,
|
||||
:queries
|
||||
|
||||
test 'assign new status to issue' do
|
||||
session[:user_id] = 2
|
||||
assert_difference('Journal.count') do
|
||||
put :update,
|
||||
params: { issue_id: 4, new_status_id: 3 }
|
||||
end
|
||||
end
|
||||
|
||||
test 'no update for issue, which already has same status' do
|
||||
session[:user_id] = 2
|
||||
assert_no_difference('Journal.count') do
|
||||
put :update,
|
||||
params: { issue_id: 2, new_status_id: 2 }
|
||||
end
|
||||
end
|
||||
end
|
29
plugins/additionals/test/functional/additionals_macros_controller_test.rb
Executable file
29
plugins/additionals/test/functional/additionals_macros_controller_test.rb
Executable file
|
@ -0,0 +1,29 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class AdditionalsMacrosControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects,
|
||||
:users,
|
||||
:roles,
|
||||
:members,
|
||||
:member_roles,
|
||||
:enabled_modules
|
||||
|
||||
def setup
|
||||
prepare_tests
|
||||
end
|
||||
|
||||
def test_show
|
||||
@request.session[:user_id] = 2
|
||||
get :show
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.macro-box'
|
||||
end
|
||||
|
||||
def test_show_no_allowed_for_guests
|
||||
@request.session[:user_id] = nil
|
||||
get :show
|
||||
|
||||
assert_response 302
|
||||
end
|
||||
end
|
184
plugins/additionals/test/functional/issues_controller_test.rb
Executable file
184
plugins/additionals/test/functional/issues_controller_test.rb
Executable file
|
@ -0,0 +1,184 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class IssuesControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects,
|
||||
:users, :email_addresses, :user_preferences,
|
||||
:roles,
|
||||
:members,
|
||||
:member_roles,
|
||||
:issues,
|
||||
:issue_statuses,
|
||||
:issue_relations,
|
||||
:versions,
|
||||
:trackers,
|
||||
:projects_trackers,
|
||||
:issue_categories,
|
||||
:enabled_modules,
|
||||
:enumerations,
|
||||
:attachments,
|
||||
:workflows,
|
||||
:custom_fields,
|
||||
:custom_values,
|
||||
:custom_fields_projects,
|
||||
:custom_fields_trackers,
|
||||
:time_entries,
|
||||
:journals,
|
||||
:journal_details,
|
||||
:queries
|
||||
|
||||
def setup
|
||||
manager_role = roles(:roles_001)
|
||||
manager_role.add_permission!(:edit_issue_author)
|
||||
end
|
||||
|
||||
test 'author field as authorized user in new with change' do
|
||||
manager_role = roles(:roles_001)
|
||||
manager_role.add_permission!(:change_new_issue_author)
|
||||
session[:user_id] = 2
|
||||
get :new,
|
||||
params: { project_id: 1 }
|
||||
|
||||
assert_select '#issue_tracker_id', true
|
||||
assert_select '#issue_author_id', true
|
||||
end
|
||||
|
||||
test 'author field as authorized user in new without change' do
|
||||
session[:user_id] = 2
|
||||
get :new,
|
||||
params: { project_id: 1 }
|
||||
|
||||
assert_select '#issue_tracker_id', true
|
||||
assert_select '#issue_author_id', false
|
||||
end
|
||||
|
||||
test 'author field as authorized user in edit' do
|
||||
session[:user_id] = 2
|
||||
get :edit,
|
||||
params: { id: 1 }
|
||||
|
||||
assert_select '#issue_author_id'
|
||||
end
|
||||
|
||||
test 'author field as unauthorized user in edit' do
|
||||
session[:user_id] = 3
|
||||
get :edit,
|
||||
params: { id: 1 }
|
||||
|
||||
assert_select '#issue_author_id', false
|
||||
end
|
||||
|
||||
test 'update author as authorized user' do
|
||||
session[:user_id] = 2
|
||||
|
||||
assert_difference('Journal.count') do
|
||||
put :update,
|
||||
params: { id: 1, issue: { author_id: 1 } }
|
||||
end
|
||||
end
|
||||
|
||||
test 'update author as unauthorized user' do
|
||||
session[:user_id] = 3
|
||||
|
||||
assert_no_difference('Journal.count') do
|
||||
put :update,
|
||||
params: { id: 1, issue: { author_id: 3 } }
|
||||
end
|
||||
end
|
||||
|
||||
test 'show assign-to-me on issue' do
|
||||
with_additionals_settings(issue_assign_to_me: 1) do
|
||||
@request.session[:user_id] = 2
|
||||
get :show,
|
||||
params: { id: 2 }
|
||||
assert_select 'a.assign-to-me'
|
||||
end
|
||||
end
|
||||
|
||||
test 'don\'t show assign-to-me on issue without activation' do
|
||||
with_additionals_settings(issue_assign_to_me: 0) do
|
||||
@request.session[:user_id] = 2
|
||||
get :show,
|
||||
params: { id: 2 }
|
||||
assert_select 'a.assign-to-me', count: 0
|
||||
end
|
||||
end
|
||||
|
||||
test 'don\'t show assign-to-me on issue with already assigned_to me' do
|
||||
with_additionals_settings(issue_assign_to_me: 1) do
|
||||
@request.session[:user_id] = 2
|
||||
get :show,
|
||||
params: { id: 4 }
|
||||
assert_select 'a.assign-to-me', count: 0
|
||||
end
|
||||
end
|
||||
|
||||
test 'show change status in issue sidebar' do
|
||||
with_additionals_settings(issue_change_status_in_sidebar: 1) do
|
||||
@request.session[:user_id] = 2
|
||||
get :show,
|
||||
params: { id: 2 }
|
||||
assert_select 'ul.issue-status-change-sidebar'
|
||||
end
|
||||
end
|
||||
|
||||
test 'don\'t show change status in issue sidebar without activation' do
|
||||
with_additionals_settings(issue_change_status_in_sidebar: 0) do
|
||||
@request.session[:user_id] = 2
|
||||
get :show,
|
||||
params: { id: 2 }
|
||||
assert_select 'ul.issue-status-change-sidebar', count: 0
|
||||
end
|
||||
end
|
||||
|
||||
test 'don\'t show forbidden status in issue sidebar without timelog' do
|
||||
with_additionals_settings(issue_change_status_in_sidebar: 1,
|
||||
issue_timelog_required: 1,
|
||||
issue_timelog_required_tracker: ['1'],
|
||||
issue_timelog_required_status: ['5']) do
|
||||
|
||||
@request.session[:user_id] = 2
|
||||
issue = Issue.generate!(tracker_id: 1, status_id: 1)
|
||||
get :show,
|
||||
params: { id: issue.id }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'ul.issue-status-change-sidebar a.status-switch.status-4'
|
||||
assert_select 'ul.issue-status-change-sidebar a.status-switch.status-5', count: 0
|
||||
end
|
||||
end
|
||||
|
||||
test 'show forbidden status in issue sidebar if disabled' do
|
||||
with_additionals_settings(issue_change_status_in_sidebar: 1,
|
||||
issue_timelog_required: 0,
|
||||
issue_timelog_required_tracker: [1],
|
||||
issue_timelog_required_status: [5]) do
|
||||
@request.session[:user_id] = 2
|
||||
issue = Issue.generate!(tracker_id: 1, status_id: 1)
|
||||
get :show,
|
||||
params: { id: issue.id }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'ul.issue-status-change-sidebar a.status-switch.status-4'
|
||||
assert_select 'ul.issue-status-change-sidebar a.status-switch.status-5'
|
||||
end
|
||||
end
|
||||
|
||||
test 'show forbidden status in issue sidebar with permission issue_timelog_never_required' do
|
||||
manager_role = roles(:roles_002)
|
||||
manager_role.add_permission!(:issue_timelog_never_required)
|
||||
|
||||
with_additionals_settings(issue_change_status_in_sidebar: 1,
|
||||
issue_timelog_required: 1,
|
||||
issue_timelog_required_tracker: [1],
|
||||
issue_timelog_required_status: [5]) do
|
||||
@request.session[:user_id] = 2
|
||||
issue = Issue.generate!(tracker_id: 1, status_id: 1)
|
||||
get :show,
|
||||
params: { id: issue.id }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'ul.issue-status-change-sidebar a.status-switch.status-4'
|
||||
assert_select 'ul.issue-status-change-sidebar a.status-switch.status-5'
|
||||
end
|
||||
end
|
||||
end
|
43
plugins/additionals/test/functional/projects_controller_test.rb
Executable file
43
plugins/additionals/test/functional/projects_controller_test.rb
Executable file
|
@ -0,0 +1,43 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class ProjectsControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects,
|
||||
:users,
|
||||
:roles,
|
||||
:members,
|
||||
:member_roles,
|
||||
:issues,
|
||||
:issue_statuses,
|
||||
:versions,
|
||||
:trackers,
|
||||
:projects_trackers,
|
||||
:issue_categories,
|
||||
:enabled_modules
|
||||
|
||||
def setup
|
||||
Setting.default_language = 'en'
|
||||
User.current = nil
|
||||
end
|
||||
|
||||
def test_show_overview_content
|
||||
with_additionals_settings(project_overview_content: 'Lore impsuum') do
|
||||
@request.session[:user_id] = 4
|
||||
get :show,
|
||||
params: { id: 1 }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.project-content', text: /Lore impsuum/
|
||||
end
|
||||
end
|
||||
|
||||
def test_do_not_show_overview_content_box
|
||||
with_additionals_settings(project_overview_content: '') do
|
||||
@request.session[:user_id] = 4
|
||||
get :show,
|
||||
params: { id: 1 }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.project-content', count: 0
|
||||
end
|
||||
end
|
||||
end
|
42
plugins/additionals/test/functional/users_controller_test.rb
Executable file
42
plugins/additionals/test/functional/users_controller_test.rb
Executable file
|
@ -0,0 +1,42 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class UsersControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects,
|
||||
:users,
|
||||
:roles,
|
||||
:members,
|
||||
:member_roles,
|
||||
:issues,
|
||||
:issue_statuses,
|
||||
:versions,
|
||||
:trackers,
|
||||
:projects_trackers,
|
||||
:issue_categories,
|
||||
:enabled_modules
|
||||
|
||||
include Redmine::I18n
|
||||
|
||||
def setup
|
||||
prepare_tests
|
||||
@controller = UsersController.new
|
||||
User.current = nil
|
||||
end
|
||||
|
||||
def test_show_new_issue_on_profile
|
||||
with_additionals_settings(new_issue_on_profile: 1) do
|
||||
@request.session[:user_id] = 2
|
||||
get :show,
|
||||
params: { id: 2 }
|
||||
assert_select 'a.user-new-issue'
|
||||
end
|
||||
end
|
||||
|
||||
def test_not_show_new_issue_on_profile_without_activated
|
||||
with_additionals_settings(new_issue_on_profile: 0) do
|
||||
@request.session[:user_id] = 2
|
||||
get :show,
|
||||
params: { id: 2 }
|
||||
assert_select 'a.user-new-issue', count: 0
|
||||
end
|
||||
end
|
||||
end
|
88
plugins/additionals/test/functional/welcome_controller_test.rb
Executable file
88
plugins/additionals/test/functional/welcome_controller_test.rb
Executable file
|
@ -0,0 +1,88 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class WelcomeControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects, :news, :users, :members
|
||||
|
||||
def setup
|
||||
Setting.default_language = 'en'
|
||||
User.current = nil
|
||||
end
|
||||
|
||||
def test_show_with_overview_right
|
||||
with_additionals_settings(overview_right: 'Lore impsuum') do
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.overview-right', text: /Lore impsuum/
|
||||
end
|
||||
end
|
||||
|
||||
def test_show_without_overview_right
|
||||
with_additionals_settings(overview_right: '') do
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.overview-right', count: 0
|
||||
end
|
||||
end
|
||||
|
||||
def test_show_with_overview_bottom
|
||||
with_additionals_settings(overview_bottom: 'Lore impsuum') do
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.overview-bottom', text: /Lore impsuum/
|
||||
end
|
||||
end
|
||||
|
||||
def test_show_without_overview_bottom
|
||||
with_additionals_settings(overview_bottom: '') do
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.overview-bottom', count: 0
|
||||
end
|
||||
end
|
||||
|
||||
def test_show_with_overview_top
|
||||
with_additionals_settings(overview_top: 'Lore impsuum') do
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.overview-top', text: /Lore impsuum/
|
||||
end
|
||||
end
|
||||
|
||||
def test_show_without_overview_top
|
||||
with_additionals_settings(overview_top: '') do
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.overview-top', count: 0
|
||||
end
|
||||
end
|
||||
|
||||
def test_show_index_with_help_menu
|
||||
with_additionals_settings(remove_help: 0) do
|
||||
@request.session[:user_id] = 1
|
||||
get :index
|
||||
|
||||
assert_select 'div#top-menu a.help'
|
||||
end
|
||||
end
|
||||
|
||||
def test_show_index_without_help_menu
|
||||
with_additionals_settings(remove_help: 1) do
|
||||
@request.session[:user_id] = 1
|
||||
get :index
|
||||
|
||||
assert_select 'div#top-menu a.help', count: 0
|
||||
end
|
||||
end
|
||||
end
|
511
plugins/additionals/test/functional/wiki_controller_test.rb
Executable file
511
plugins/additionals/test/functional/wiki_controller_test.rb
Executable file
|
@ -0,0 +1,511 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class WikiControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects,
|
||||
:users,
|
||||
:roles,
|
||||
:members,
|
||||
:member_roles,
|
||||
:trackers,
|
||||
:groups_users,
|
||||
:projects_trackers,
|
||||
:enabled_modules,
|
||||
:issue_statuses,
|
||||
:issues,
|
||||
:enumerations,
|
||||
:custom_fields,
|
||||
:custom_values,
|
||||
:custom_fields_trackers,
|
||||
:wikis,
|
||||
:wiki_pages,
|
||||
:wiki_contents
|
||||
|
||||
WIKI_MACRO_USER_ID = 2
|
||||
|
||||
def setup
|
||||
prepare_tests
|
||||
EnabledModule.create(project_id: 1, name: 'wiki')
|
||||
@project = projects(:projects_001)
|
||||
@wiki = @project.wiki
|
||||
@page_name = 'additionals_macro_test'
|
||||
@page = @wiki.find_or_new_page(@page_name)
|
||||
@page.content = WikiContent.new
|
||||
@page.content.text = 'test'
|
||||
@page.save!
|
||||
end
|
||||
|
||||
def test_show_with_youtube_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{youtube(KMU0tzLwhbE)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'iframe[src=?]', '//www.youtube-nocookie.com/embed/KMU0tzLwhbE'
|
||||
end
|
||||
|
||||
def test_show_with_meteoblue_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{meteoblue(münchen_deutschland_2867714)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'iframe', src: %r{^https\://www\.meteoblue\.com/en/weather/widget/daily/(.*)}
|
||||
end
|
||||
|
||||
def test_show_with_vimeo_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{vimeo(142849533)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'iframe[src=?]', '//player.vimeo.com/video/142849533'
|
||||
end
|
||||
|
||||
def test_show_with_slideshare_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{slideshare(57941706)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'iframe[src=?]', '//www.slideshare.net/slideshow/embed_code/57941706'
|
||||
end
|
||||
|
||||
def test_show_with_iframe_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{iframe(https://www.redmine.org/)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'iframe[src=?]', 'https://www.redmine.org/'
|
||||
end
|
||||
|
||||
def test_show_with_twitter_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{twitter(alphanodes)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'a.twitter'
|
||||
assert_select 'a[href=?]', 'https://twitter.com/alphanodes',
|
||||
text: '@alphanodes'
|
||||
|
||||
@page.content.text = '{{twitter(@alphanodes)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_select 'a.twitter'
|
||||
assert_select 'a[href=?]', 'https://twitter.com/alphanodes',
|
||||
text: '@alphanodes'
|
||||
|
||||
@page.content.text = '{{twitter(#alphanodes)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_select 'a.twitter'
|
||||
assert_select 'a[href=?]', 'https://twitter.com/hashtag/alphanodes',
|
||||
text: '#alphanodes'
|
||||
end
|
||||
|
||||
def test_show_with_reddit_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{reddit(redmine)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'a.reddit'
|
||||
assert_select 'a[href=?]', 'https://www.reddit.com/r/redmine',
|
||||
text: 'r/redmine'
|
||||
|
||||
@page.content.text = '{{reddit(u/redmine)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_select 'a.reddit'
|
||||
assert_select 'a[href=?]', 'https://www.reddit.com/username/redmine',
|
||||
text: 'u/redmine'
|
||||
|
||||
@page.content.text = '{{reddit(r/redmine)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_select 'a.reddit'
|
||||
assert_select 'a[href=?]', 'https://www.reddit.com/r/redmine',
|
||||
text: 'r/redmine'
|
||||
end
|
||||
|
||||
def test_show_last_updated_by_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{last_updated_by}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'span.last-updated-by'
|
||||
assert_select 'a[href=?]', '/users/2',
|
||||
text: 'jsmith'
|
||||
end
|
||||
|
||||
def test_show_last_updated_at_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{last_updated_at}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'span.last-updated-at'
|
||||
assert_select 'a[href=?]', '/projects/ecookbook/activity'
|
||||
end
|
||||
|
||||
def test_show_recently_updated_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{recently_updated}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'div.recently-updated'
|
||||
end
|
||||
|
||||
def test_show_calendar_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{calendar(year=1970, month=7)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'div.month-calendar'
|
||||
end
|
||||
|
||||
def test_show_with_members_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{members}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'div.wiki div.user'
|
||||
end
|
||||
|
||||
def test_show_with_new_issue_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{new_issue}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'div.wiki a.macro-new-issue'
|
||||
end
|
||||
|
||||
def test_show_with_group_users_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{group_users(A Team)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'div.wiki div.user'
|
||||
end
|
||||
|
||||
def test_show_with_projects_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{projects}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'div.wiki div.additionals-projects li.project'
|
||||
end
|
||||
|
||||
def test_show_with_fa_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{fa(adjust)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'i.fas.fa-adjust'
|
||||
end
|
||||
|
||||
def test_show_with_redmine_issue_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{redmine_issue(12066)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'a[href=?]', 'https://www.redmine.org/issues/12066'
|
||||
end
|
||||
|
||||
def test_show_with_redmine_issue_with_absolute_url_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{redmine_issue(http://www.redmine.org/issues/12066)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'a[href=?]', 'https://www.redmine.org/issues/12066'
|
||||
end
|
||||
|
||||
def test_show_with_redmine_wiki_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{redmine_wiki(RedmineInstall)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'a[href=?]', 'https://www.redmine.org/projects/redmine/wiki/RedmineInstall'
|
||||
end
|
||||
|
||||
def test_show_with_redmine_wiki_with_absolute_url_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{redmine_wiki(http://www.redmine.org/projects/redmine/wiki/RedmineInstall)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'a[href=?]', 'https://www.redmine.org/projects/redmine/wiki/RedmineInstall'
|
||||
end
|
||||
|
||||
def test_show_with_gist_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{gist(plentz/6737338)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'script[src=?]', 'https://gist.github.com/plentz/6737338.js'
|
||||
end
|
||||
|
||||
def test_show_with_tradeview_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{tradingview(symbol=NASDAQ:AMZN, locale=en)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'script[src=?]', 'https://s3.tradingview.com/tv.js'
|
||||
end
|
||||
|
||||
def test_show_with_cryptocompare_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{cryptocompare(fsyms=BTC;ETH, type=header_v3)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'div.wiki div.cryptocompare',
|
||||
text: %r{https:\/\/widgets\.cryptocompare\.com\/serve\/v3\/coin\/header\?fsyms=BTC,ETH&tsyms=EUR}
|
||||
end
|
||||
|
||||
def test_show_with_date_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
|
||||
valid_types = %w[current_date current_date_with_time current_year
|
||||
current_month current_day current_hour current_minute
|
||||
current_weekday current_weeknumber]
|
||||
|
||||
@page.content.text = ''
|
||||
valid_types.each do |type|
|
||||
@page.content.text << "{{date(#{type})}}"
|
||||
end
|
||||
@page.content.save!
|
||||
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.wiki', html: /{{date/, count: 0
|
||||
assert_select 'div.wiki span.current-date', count: valid_types.count
|
||||
assert_select 'div.wiki span.current-date', User.current.today.cweek.to_s
|
||||
assert_select 'div.flash.error', html: /Error executing/, count: 0
|
||||
end
|
||||
|
||||
def test_show_with_date_macro_and_invalid_type
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
|
||||
@page.content.text = '{{date(invalid_type_name)}}'
|
||||
@page.content.save!
|
||||
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.flash.error', html: /Error executing/
|
||||
end
|
||||
|
||||
def test_show_with_date_macro_custom_date
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
|
||||
@page.content.text = '{{date(2017-02-25)}}'
|
||||
@page.content.save!
|
||||
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.flash.error', html: /Error executing/, count: 0
|
||||
end
|
||||
|
||||
def test_show_with_date_macro_invalid_custom_date
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
|
||||
@page.content.text = '{{date(2017-02-30)}}'
|
||||
@page.content.save!
|
||||
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.flash.error', html: /Error executing/
|
||||
end
|
||||
|
||||
def test_show_issue
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{issue(2, format=short)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'a[href=?]', '/issues/2',
|
||||
text: 'Add ingredients categories'
|
||||
end
|
||||
|
||||
def test_show_issue_with_id
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{issue(2, format=link)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'a[href=?]', '/issues/2',
|
||||
text: '#2 Add ingredients categories'
|
||||
end
|
||||
|
||||
def test_show_issue_with_url
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{issue(http://test.host/issues/2)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'a[href=?]', '/issues/2',
|
||||
text: '#2 Add ingredients categories'
|
||||
assert_select 'div.issue-macro-comment', 0
|
||||
end
|
||||
|
||||
def test_show_issue_and_comment_with_url
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{issue(http://test.host/issues/2#note-1)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'a[href=?]', '/issues/2',
|
||||
text: '#2 Add ingredients categories'
|
||||
assert_select 'div.issue-macro-comment'
|
||||
end
|
||||
|
||||
def test_show_issue_with_id_default
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{issue(2)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'a[href=?]', '/issues/2',
|
||||
text: '#2 Add ingredients categories'
|
||||
end
|
||||
|
||||
def test_show_user_with_id
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{user(1)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'a[href=?]', '/users/1',
|
||||
text: 'Redmine Admin'
|
||||
end
|
||||
|
||||
def test_show_user_with_id_fullname
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{user(1, format=firstname_lastname)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'a.user', text: 'Redmine Admin'
|
||||
assert_select 'a[href=?]', '/users/1',
|
||||
text: 'Redmine Admin'
|
||||
end
|
||||
|
||||
def test_show_user_with_name
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{user(jsmith)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'a[href=?]', '/users/2',
|
||||
text: 'jsmith'
|
||||
end
|
||||
|
||||
def test_show_user_with_name_fullname
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{user(jsmith, format=firstname_lastname, avatar=true)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'a.user', text: 'John Smith'
|
||||
assert_select 'a[href=?]', '/users/2',
|
||||
text: 'John Smith'
|
||||
end
|
||||
|
||||
def test_show_wiki_with_header
|
||||
with_additionals_settings(global_wiki_header: 'Lore impsuum') do
|
||||
get :show,
|
||||
params: { project_id: 1, id: 'Another_page' }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div#wiki_extentions_header', text: /Lore impsuum/
|
||||
end
|
||||
end
|
||||
|
||||
def test_show_wiki_without_header
|
||||
with_additionals_settings(global_wiki_header: '') do
|
||||
get :show,
|
||||
params: { project_id: 1, id: 'Another_page' }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div#wiki_extentions_header', count: 0
|
||||
end
|
||||
end
|
||||
|
||||
def test_show_wiki_with_footer
|
||||
with_additionals_settings(global_wiki_footer: 'Lore impsuum') do
|
||||
get :show,
|
||||
params: { project_id: 1, id: 'Another_page' }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div#wiki_extentions_footer', text: /Lore impsuum/
|
||||
end
|
||||
end
|
||||
|
||||
def test_show_wiki_without_footer
|
||||
with_additionals_settings(global_wiki_footer: '') do
|
||||
get :show,
|
||||
params: { project_id: 1, id: 'Another_page' }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div#wiki_extentions_footer', count: 0
|
||||
end
|
||||
end
|
||||
end
|
15
plugins/additionals/test/global_test_helper.rb
Executable file
15
plugins/additionals/test/global_test_helper.rb
Executable file
|
@ -0,0 +1,15 @@
|
|||
module Additionals
|
||||
module GlobalTestHelper
|
||||
def with_additionals_settings(settings, &_block)
|
||||
saved_settings = Setting.plugin_additionals.dup
|
||||
new_settings = Setting.plugin_additionals.dup
|
||||
settings.each do |key, value|
|
||||
new_settings[key] = value
|
||||
end
|
||||
Setting.plugin_additionals = new_settings
|
||||
yield
|
||||
ensure
|
||||
Setting.plugin_additionals = saved_settings
|
||||
end
|
||||
end
|
||||
end
|
114
plugins/additionals/test/integration/api_test/issues_test.rb
Executable file
114
plugins/additionals/test/integration/api_test/issues_test.rb
Executable file
|
@ -0,0 +1,114 @@
|
|||
require File.expand_path('../../../test_helper', __FILE__)
|
||||
|
||||
module ApiTest
|
||||
class IssuesTest < Redmine::ApiTest::Base
|
||||
fixtures :projects,
|
||||
:users,
|
||||
:roles,
|
||||
:members,
|
||||
:member_roles,
|
||||
:issues,
|
||||
:issue_statuses,
|
||||
:issue_relations,
|
||||
:versions,
|
||||
:trackers,
|
||||
:projects_trackers,
|
||||
:issue_categories,
|
||||
:enabled_modules,
|
||||
:enumerations,
|
||||
:attachments,
|
||||
:workflows,
|
||||
:time_entries,
|
||||
:journals,
|
||||
:journal_details,
|
||||
:queries
|
||||
|
||||
include Additionals::TestHelper
|
||||
|
||||
test 'GET /issues.xml should contain metadata' do
|
||||
get '/issues.xml'
|
||||
assert_select 'issues[type=array][total_count][limit="25"][offset="0"]'
|
||||
end
|
||||
|
||||
test 'GET /issues/:id.xml with subtasks' do
|
||||
issue = Issue.generate_with_descendants!(project_id: 1)
|
||||
get "/issues/#{issue.id}.xml?include=children"
|
||||
|
||||
assert_select 'issue id', text: issue.id.to_s do
|
||||
assert_select '~ children[type=array] > issue', 2
|
||||
assert_select '~ children[type=array] > issue > children', 1
|
||||
end
|
||||
end
|
||||
|
||||
test 'POST /issues.xml should create an issue with the attributes' do
|
||||
with_additionals_settings(issue_status_change: '0',
|
||||
issue_auto_assign: '0',
|
||||
issue_auto_assign_status: ['1'],
|
||||
issue_auto_assign_role: '1') do
|
||||
payload = <<-XML
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<issue>
|
||||
<project_id>1</project_id>
|
||||
<tracker_id>2</tracker_id>
|
||||
<status_id>3</status_id>
|
||||
<subject>API test</subject>
|
||||
</issue>
|
||||
XML
|
||||
|
||||
assert_difference('Issue.count') do
|
||||
post '/issues.xml',
|
||||
params: payload,
|
||||
headers: { 'CONTENT_TYPE' => 'application/xml' }.merge(credentials('jsmith'))
|
||||
end
|
||||
issue = Issue.order(id: :desc).first
|
||||
assert_equal 1, issue.project_id
|
||||
assert_nil issue.assigned_to_id
|
||||
assert_equal 'API test', issue.subject
|
||||
|
||||
assert_response :created
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
assert_select 'issue > id', text: issue.id.to_s
|
||||
end
|
||||
end
|
||||
|
||||
test 'POST /issues.xml should create an issue with auto assigned_to_id' do
|
||||
with_additionals_settings(issue_status_change: '0',
|
||||
issue_auto_assign: '1',
|
||||
issue_auto_assign_status: ['1'],
|
||||
issue_auto_assign_role: '1') do
|
||||
payload = <<-XML
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<issue>
|
||||
<project_id>1</project_id>
|
||||
<subject>API test</subject>
|
||||
</issue>
|
||||
XML
|
||||
|
||||
assert_difference('Issue.count') do
|
||||
post '/issues.xml',
|
||||
params: payload,
|
||||
headers: { 'CONTENT_TYPE' => 'application/xml' }.merge(credentials('jsmith'))
|
||||
end
|
||||
|
||||
issue = Issue.order(id: :desc).first
|
||||
assert_equal 1, issue.project_id
|
||||
assert_equal 2, issue.assigned_to_id
|
||||
assert_equal 'API test', issue.subject
|
||||
|
||||
assert_response :created
|
||||
assert_equal 'application/xml', @response.content_type
|
||||
assert_select 'issue > id', text: issue.id.to_s
|
||||
end
|
||||
end
|
||||
|
||||
test 'DELETE /issues/:id.xml' do
|
||||
assert_difference('Issue.count', -1) do
|
||||
delete '/issues/6.xml', headers: credentials('jsmith')
|
||||
|
||||
assert_response :ok
|
||||
assert_equal '', response.body
|
||||
end
|
||||
assert_nil Issue.find_by(id: 6)
|
||||
end
|
||||
end
|
||||
end
|
39
plugins/additionals/test/integration/common_views_test.rb
Executable file
39
plugins/additionals/test/integration/common_views_test.rb
Executable file
|
@ -0,0 +1,39 @@
|
|||
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
|
||||
|
||||
include Additionals::TestHelper
|
||||
|
||||
def setup
|
||||
prepare_tests
|
||||
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
|
36
plugins/additionals/test/integration/library_test.rb
Executable file
36
plugins/additionals/test/integration/library_test.rb
Executable file
|
@ -0,0 +1,36 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class JavascriptLibraryTest < Redmine::IntegrationTest
|
||||
def test_loaded_css_libraries
|
||||
get '/'
|
||||
|
||||
assert_response :success
|
||||
assert_select 'link[rel=stylesheet][href^=?]', '/plugin_assets/additionals/stylesheets/fontawesome-all.min.css'
|
||||
|
||||
return unless Redmine::Plugin.installed?('redmine_reporting')
|
||||
|
||||
assert_select 'link[rel=stylesheet][href^=?]', '/plugin_assets/additionals/stylesheets/nv.d3.min.css', count: 1
|
||||
end
|
||||
|
||||
def test_not_loaded_css_libraries
|
||||
get '/'
|
||||
|
||||
assert_response :success
|
||||
|
||||
return if Redmine::Plugin.installed?('redmine_reporting')
|
||||
|
||||
assert_select 'link[rel=stylesheet][href^=?]', '/plugin_assets/additionals/stylesheets/nv.d3.min.css', count: 0
|
||||
end
|
||||
|
||||
def test_not_loaded_javascript_libraries
|
||||
get '/'
|
||||
|
||||
assert_response :success
|
||||
assert_select 'script[src^=?]', '/plugin_assets/additionals/javascripts/bootstrap.js', count: 0
|
||||
assert_select 'script[src^=?]', '/plugin_assets/additionals/javascripts/bootstrap.min.js', count: 0
|
||||
assert_select 'script[src^=?]', '/plugin_assets/additionals/javascripts/d3plus.full.min.js', count: 0
|
||||
assert_select 'script[src^=?]', '/plugin_assets/additionals/javascripts/noreferrer.js', count: 0
|
||||
assert_select 'script[src^=?]', '/plugin_assets/additionals/javascripts/mermaid.min.js', count: 0
|
||||
assert_select 'script[src^=?]', '/plugin_assets/additionals/javascripts/mermaid_load.js', count: 0
|
||||
end
|
||||
end
|
11
plugins/additionals/test/integration/routing_test.rb
Executable file
11
plugins/additionals/test/integration/routing_test.rb
Executable file
|
@ -0,0 +1,11 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class RoutingTest < Redmine::RoutingTest
|
||||
def test_issue_assign_to_me
|
||||
should_route 'PUT /issues/1/assign_to_me' => 'additionals_assign_to_me#update', issue_id: '1'
|
||||
end
|
||||
|
||||
def test_issue_change_status
|
||||
should_route 'PUT /issues/1/change_status' => 'additionals_change_status#update', issue_id: '1'
|
||||
end
|
||||
end
|
4
plugins/additionals/test/support/additional_environment.rb
Executable file
4
plugins/additionals/test/support/additional_environment.rb
Executable file
|
@ -0,0 +1,4 @@
|
|||
# for travis debugging
|
||||
# config.logger = Logger.new(STDOUT)
|
||||
# config.logger.level = Logger::INFO
|
||||
# config.log_level = :info
|
8
plugins/additionals/test/support/database-mysql-travis.yml
Executable file
8
plugins/additionals/test/support/database-mysql-travis.yml
Executable file
|
@ -0,0 +1,8 @@
|
|||
test:
|
||||
adapter: mysql2
|
||||
database: travis_ci_test
|
||||
host: localhost
|
||||
username: root
|
||||
password: travis_ci_test
|
||||
pool: 5
|
||||
encoding: utf8mb4
|
6
plugins/additionals/test/support/database-postgresql-travis.yml
Executable file
6
plugins/additionals/test/support/database-postgresql-travis.yml
Executable file
|
@ -0,0 +1,6 @@
|
|||
test:
|
||||
adapter: postgresql
|
||||
database: travis_ci_test
|
||||
username: postgres
|
||||
pool: 5
|
||||
encoding: utf8
|
49
plugins/additionals/test/test_helper.rb
Executable file
49
plugins/additionals/test/test_helper.rb
Executable file
|
@ -0,0 +1,49 @@
|
|||
$VERBOSE = nil
|
||||
|
||||
unless ENV['SKIP_COVERAGE']
|
||||
require 'simplecov'
|
||||
require 'simplecov-rcov'
|
||||
|
||||
SimpleCov.formatters = SimpleCov::Formatter::MultiFormatter[SimpleCov::Formatter::HTMLFormatter,
|
||||
SimpleCov::Formatter::RcovFormatter]
|
||||
|
||||
SimpleCov.start :rails do
|
||||
add_filter 'init.rb'
|
||||
root File.expand_path(File.dirname(__FILE__) + '/..')
|
||||
end
|
||||
end
|
||||
|
||||
require File.expand_path(File.dirname(__FILE__) + '/../../../test/test_helper')
|
||||
require File.expand_path(File.dirname(__FILE__) + '/global_test_helper')
|
||||
|
||||
if defined?(RSpec)
|
||||
RSpec.configure do |config|
|
||||
config.mock_with :mocha
|
||||
config.example_status_persistence_file_path = Rails.root.join('tmp', 'additionals_rspec_examples.txt')
|
||||
end
|
||||
end
|
||||
|
||||
module Additionals
|
||||
module TestHelper
|
||||
include Additionals::GlobalTestHelper
|
||||
|
||||
def prepare_tests
|
||||
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
|
||||
|
||||
class ControllerTest < Redmine::ControllerTest
|
||||
include Additionals::TestHelper
|
||||
end
|
||||
|
||||
class TestCase < ActiveSupport::TestCase
|
||||
include Additionals::TestHelper
|
||||
end
|
||||
end
|
74
plugins/additionals/test/unit/additionals_fontawesome_test.rb
Executable file
74
plugins/additionals/test/unit/additionals_fontawesome_test.rb
Executable 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 '', 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 '', 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 '', info[:unicode]
|
||||
assert_equal 'Archive', info[:label]
|
||||
end
|
||||
end
|
55
plugins/additionals/test/unit/additionals_macro_test.rb
Executable file
55
plugins/additionals/test/unit/additionals_macro_test.rb
Executable 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
|
88
plugins/additionals/test/unit/helpers/global_helper_test.rb
Executable file
88
plugins/additionals/test/unit/helpers/global_helper_test.rb
Executable 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
|
50
plugins/additionals/test/unit/i18n_test.rb
Executable file
50
plugins/additionals/test/unit/i18n_test.rb
Executable 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
|
105
plugins/additionals/test/unit/issue_test.rb
Executable file
105
plugins/additionals/test/unit/issue_test.rb
Executable 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
|
50
plugins/additionals/test/unit/query_test.rb
Executable file
50
plugins/additionals/test/unit/query_test.rb
Executable 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
|
35
plugins/additionals/test/unit/role_test.rb
Executable file
35
plugins/additionals/test/unit/role_test.rb
Executable 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
|
65
plugins/additionals/test/unit/time_entry_test.rb
Executable file
65
plugins/additionals/test/unit/time_entry_test.rb
Executable 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
|
104
plugins/additionals/test/unit/watcher_test.rb
Executable file
104
plugins/additionals/test/unit/watcher_test.rb
Executable 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
|
Loading…
Add table
Add a link
Reference in a new issue