Actualizar plugin Additionals a 3.0.0
This commit is contained in:
parent
3d976f1b3b
commit
a26f5567af
399 changed files with 70374 additions and 4093 deletions
7
plugins/additionals/test/fixtures/dashboard_roles.yml
vendored
Normal file
7
plugins/additionals/test/fixtures/dashboard_roles.yml
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
dashboard_role1:
|
||||
dashboard: welcome_for_roles
|
||||
role_id: 1
|
||||
|
||||
dashboard_role2:
|
||||
dashboard: welcome_for_roles
|
||||
role_id: 2
|
119
plugins/additionals/test/fixtures/dashboards.yml
vendored
Normal file
119
plugins/additionals/test/fixtures/dashboards.yml
vendored
Normal file
|
@ -0,0 +1,119 @@
|
|||
system_default_welcome:
|
||||
name: Global default dashboard
|
||||
dashboard_type: <%= DashboardContentWelcome::TYPE_NAME %>
|
||||
system_default: true
|
||||
enable_sidebar: false
|
||||
author_id: 1
|
||||
visibility: 2
|
||||
options: |
|
||||
---
|
||||
:layout:
|
||||
top:
|
||||
- issuequery
|
||||
- my_spent_time
|
||||
left:
|
||||
- text
|
||||
- legacy_left
|
||||
right:
|
||||
- text__1
|
||||
- legacy_right
|
||||
:layout_settings:
|
||||
issuequery:
|
||||
:query_id: '1'
|
||||
text:
|
||||
:title: Welcome left
|
||||
:text: Some example text in left text block
|
||||
text__1:
|
||||
:title: Welcome right
|
||||
:text: Some example text in right text block
|
||||
|
||||
system_default_project:
|
||||
name: Project default dashboard
|
||||
dashboard_type: <%= DashboardContentProject::TYPE_NAME %>
|
||||
system_default: true
|
||||
enable_sidebar: true
|
||||
project_id:
|
||||
author_id: 1
|
||||
visibility: 2
|
||||
options: |
|
||||
---
|
||||
:layout:
|
||||
top:
|
||||
- issuequery
|
||||
left:
|
||||
- text
|
||||
- legacy_left
|
||||
right:
|
||||
- text__1
|
||||
- legacy_right
|
||||
:layout_settings:
|
||||
issuequery:
|
||||
:query_id: '1'
|
||||
text:
|
||||
:title: Project overview left
|
||||
:text: Some example text in left text block
|
||||
text__1:
|
||||
:title: Project overview right
|
||||
:text: Some example text in right text block
|
||||
|
||||
private_welcome:
|
||||
name: Only for user 1
|
||||
dashboard_type: <%= DashboardContentWelcome::TYPE_NAME %>
|
||||
enable_sidebar: true
|
||||
author_id: 1
|
||||
visibility: 0
|
||||
options: |
|
||||
---
|
||||
:layout:
|
||||
left:
|
||||
- legacy_left
|
||||
right:
|
||||
- legacy_right
|
||||
:layout_settings: {}
|
||||
|
||||
private_welcome2:
|
||||
name: Only for user 2
|
||||
dashboard_type: <%= DashboardContentWelcome::TYPE_NAME %>
|
||||
author_id: 2
|
||||
visibility: 0
|
||||
options: |
|
||||
---
|
||||
:layout:
|
||||
left:
|
||||
- legacy_left
|
||||
right:
|
||||
- legacy_right
|
||||
:layout_settings: {}
|
||||
|
||||
private_project_default:
|
||||
name: Private project default
|
||||
dashboard_type: <%= DashboardContentProject::TYPE_NAME %>
|
||||
project_id:
|
||||
author_id: 1
|
||||
visibility: 0
|
||||
|
||||
private_project:
|
||||
name: Private project for user 1
|
||||
dashboard_type: <%= DashboardContentProject::TYPE_NAME %>
|
||||
project_id: 1
|
||||
author_id: 1
|
||||
visibility: 0
|
||||
|
||||
private_project2:
|
||||
name: Private project for user 2
|
||||
dashboard_type: <%= DashboardContentProject::TYPE_NAME %>
|
||||
project_id: 1
|
||||
author_id: 2
|
||||
visibility: 0
|
||||
|
||||
public_welcome:
|
||||
name: Public welcome
|
||||
dashboard_type: <%= DashboardContentWelcome::TYPE_NAME %>
|
||||
author_id: 1
|
||||
visibility: 2
|
||||
|
||||
welcome_for_roles:
|
||||
name: Welcome for roles
|
||||
dashboard_type: <%= DashboardContentWelcome::TYPE_NAME %>
|
||||
author_id: 1
|
||||
visibility: 1
|
|
@ -1,7 +1,13 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class AccountControllerTest < Additionals::ControllerTest
|
||||
fixtures :users, :email_addresses, :roles
|
||||
fixtures :users, :groups_users, :email_addresses, :user_preferences,
|
||||
:roles, :members, :member_roles,
|
||||
:issues, :issue_statuses, :issue_relations,
|
||||
:issues, :issue_statuses, :issue_categories,
|
||||
:versions, :trackers,
|
||||
:projects, :projects_trackers, :enabled_modules,
|
||||
:enumerations
|
||||
|
||||
def setup
|
||||
Setting.default_language = 'en'
|
||||
|
@ -9,23 +15,23 @@ class AccountControllerTest < Additionals::ControllerTest
|
|||
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
|
||||
change_additionals_settings account_login_bottom: 'Lore impsuum'
|
||||
|
||||
get :login
|
||||
assert_response :success
|
||||
assert_select 'input[name=username]'
|
||||
assert_select 'input[name=password]'
|
||||
assert_select 'div.login-additionals', text: /Lore impsuum/
|
||||
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
|
||||
change_additionals_settings account_login_bottom: ''
|
||||
|
||||
get :login
|
||||
assert_response :success
|
||||
assert_select 'input[name=username]'
|
||||
assert_select 'input[name=password]'
|
||||
assert_select 'div.login-additionals', count: 0
|
||||
end
|
||||
|
||||
# See integration/account_test.rb for the full test
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class AdditionalsAssignToMeControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class AdditionalsChangeStatusControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class AdditionalsMacrosControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects,
|
||||
|
@ -24,6 +24,6 @@ class AdditionalsMacrosControllerTest < Additionals::ControllerTest
|
|||
@request.session[:user_id] = nil
|
||||
get :show
|
||||
|
||||
assert_response 302
|
||||
assert_response :redirect
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class AutoCompletesControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects, :email_addresses,
|
||||
:enumerations, :users, :groups_users,
|
||||
:roles,
|
||||
:members, :member_roles,
|
||||
:enabled_modules
|
||||
|
||||
def test_fontawesome_default
|
||||
get :fontawesome
|
||||
|
||||
assert_response :success
|
||||
json = ActiveSupport::JSON.decode(response.body)
|
||||
assert_kind_of Array, json
|
||||
icon = json.first
|
||||
assert_kind_of Hash, icon
|
||||
assert_equal 'far_address-book', icon['id']
|
||||
assert_equal 'Address Book', icon['text']
|
||||
end
|
||||
|
||||
def test_fontawesome_search
|
||||
get :fontawesome,
|
||||
params: { q: 'sun' }
|
||||
|
||||
assert_response :success
|
||||
json = ActiveSupport::JSON.decode(response.body)
|
||||
assert_kind_of Array, json
|
||||
assert_equal 5, json.count
|
||||
icon = json.first
|
||||
assert_kind_of Hash, icon
|
||||
assert_equal 'fas_cloud-sun', icon['id']
|
||||
assert_equal 'Cloud with Sun', icon['text']
|
||||
end
|
||||
|
||||
def test_fontawesome_search_without_result
|
||||
get :fontawesome,
|
||||
params: { q: 'doesnotexist' }
|
||||
|
||||
assert_response :success
|
||||
json = ActiveSupport::JSON.decode(response.body)
|
||||
assert_kind_of Array, json
|
||||
assert_equal 0, json.count
|
||||
end
|
||||
end
|
|
@ -0,0 +1,36 @@
|
|||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class DashboardAsyncBlocksControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects,
|
||||
:users,
|
||||
:roles,
|
||||
:members,
|
||||
:member_roles,
|
||||
:issues,
|
||||
:issue_statuses,
|
||||
:versions,
|
||||
:trackers,
|
||||
:projects_trackers,
|
||||
:issue_categories,
|
||||
:enabled_modules,
|
||||
:dashboards, :dashboard_roles,
|
||||
:queries
|
||||
|
||||
include Redmine::I18n
|
||||
|
||||
def setup
|
||||
prepare_tests
|
||||
Setting.default_language = 'en'
|
||||
|
||||
@project = projects :projects_001
|
||||
@welcome_dashboard = dashboards :system_default_welcome
|
||||
@project_dashboard = dashboards :system_default_project
|
||||
end
|
||||
|
||||
def test_query_blocks
|
||||
assert_dashboard_query_blocks [
|
||||
{ dashboard_id: @welcome_dashboard.id, block: 'issuequery', entities_class: 'issues' },
|
||||
{ dashboard_id: @project_dashboard.id, block: 'issuequery', project: @project, entities_class: 'issues' }
|
||||
]
|
||||
end
|
||||
end
|
|
@ -0,0 +1,33 @@
|
|||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class DashboardsControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects,
|
||||
:users,
|
||||
:roles,
|
||||
:members,
|
||||
:member_roles,
|
||||
:issues,
|
||||
:issue_statuses,
|
||||
:versions,
|
||||
:trackers,
|
||||
:projects_trackers,
|
||||
:issue_categories,
|
||||
:enabled_modules,
|
||||
:dashboards, :dashboard_roles,
|
||||
:queries
|
||||
|
||||
def setup
|
||||
prepare_tests
|
||||
@request.session[:user_id] = 2
|
||||
end
|
||||
|
||||
def test_create
|
||||
assert_difference 'Dashboard.count', 1 do
|
||||
post :create,
|
||||
params: { dashboard: { name: 'my test dashboard',
|
||||
dashboard_type: DashboardContentWelcome::TYPE_NAME,
|
||||
description: 'test desc',
|
||||
author_id: 2 } }
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,34 +1,24 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
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,
|
||||
fixtures :users, :email_addresses, :roles,
|
||||
:enumerations,
|
||||
:projects, :projects_trackers, :enabled_modules,
|
||||
:members, :member_roles,
|
||||
:issues, :issue_statuses, :issue_categories, :issue_relations,
|
||||
:versions,
|
||||
:trackers,
|
||||
:projects_trackers,
|
||||
:issue_categories,
|
||||
:enabled_modules,
|
||||
:enumerations,
|
||||
:attachments,
|
||||
:workflows,
|
||||
:custom_fields,
|
||||
:custom_values,
|
||||
:custom_fields_projects,
|
||||
:custom_fields_trackers,
|
||||
:custom_fields, :custom_values, :custom_fields_projects, :custom_fields_trackers,
|
||||
:time_entries,
|
||||
:journals,
|
||||
:journal_details,
|
||||
:watchers,
|
||||
:journals, :journal_details,
|
||||
:repositories, :changesets,
|
||||
:queries
|
||||
|
||||
def setup
|
||||
manager_role = roles(:roles_001)
|
||||
manager_role.add_permission!(:edit_issue_author)
|
||||
manager_role = roles :roles_001
|
||||
manager_role.add_permission! :edit_issue_author
|
||||
end
|
||||
|
||||
test 'author field as authorized user in new with change' do
|
||||
|
@ -135,7 +125,6 @@ class IssuesControllerTest < Additionals::ControllerTest
|
|||
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,
|
||||
|
|
|
@ -1,4 +1,12 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class ViewDashboardTopRenderOn < Redmine::Hook::ViewListener
|
||||
render_on :view_dashboard_top, inline: '<div class="test">Example text</div>'
|
||||
end
|
||||
|
||||
class ViewDashboardBottomRenderOn < Redmine::Hook::ViewListener
|
||||
render_on :view_dashboard_bottom, inline: '<div class="test">Example text</div>'
|
||||
end
|
||||
|
||||
class ProjectsControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects,
|
||||
|
@ -12,32 +20,65 @@ class ProjectsControllerTest < Additionals::ControllerTest
|
|||
:trackers,
|
||||
:projects_trackers,
|
||||
:issue_categories,
|
||||
:enabled_modules
|
||||
:enabled_modules,
|
||||
:dashboards, :dashboard_roles
|
||||
|
||||
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 }
|
||||
def test_show_with_left_text_block
|
||||
@request.session[:user_id] = 4
|
||||
get :show,
|
||||
params: { id: 1 }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.project-content', text: /Lore impsuum/
|
||||
end
|
||||
assert_response :success
|
||||
assert_select 'div#list-left div#block-text', text: /example text/
|
||||
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 }
|
||||
def test_show_with_right_text_block
|
||||
@request.session[:user_id] = 4
|
||||
get :show,
|
||||
params: { id: 1 }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.project-content', count: 0
|
||||
end
|
||||
assert_response :success
|
||||
assert_select 'div#list-right div#block-text__1', text: /example text/
|
||||
end
|
||||
|
||||
def test_show_with_hook_view_dashboard_top
|
||||
Redmine::Hook.add_listener ViewDashboardTopRenderOn
|
||||
@request.session[:user_id] = 4
|
||||
get :show,
|
||||
params: { id: 1 }
|
||||
|
||||
assert_select 'div.test', text: 'Example text'
|
||||
end
|
||||
|
||||
def test_show_with_hook_view_dashboard_bottom
|
||||
Redmine::Hook.add_listener ViewDashboardBottomRenderOn
|
||||
@request.session[:user_id] = 4
|
||||
get :show,
|
||||
params: { id: 1 }
|
||||
|
||||
assert_select 'div.test', text: 'Example text'
|
||||
end
|
||||
|
||||
def test_show_with_invalid_dashboard
|
||||
get :show,
|
||||
params: { id: 1,
|
||||
dashboard_id: 444 }
|
||||
|
||||
assert_response :missing
|
||||
end
|
||||
|
||||
def test_show_dashboard_without_permission
|
||||
@request.session[:user_id] = 3
|
||||
|
||||
get :show,
|
||||
params: { id: 1,
|
||||
dashboard_id: dashboards(:private_project2) }
|
||||
|
||||
assert_response :forbidden
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,41 +1,66 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class ViewUsersShowContextualRenderOn < Redmine::Hook::ViewListener
|
||||
render_on :view_users_show_contextual, inline: '<div class="test">Example text</div>'
|
||||
end
|
||||
|
||||
class ViewUsersShowInfoRenderOn < Redmine::Hook::ViewListener
|
||||
render_on :view_users_show_info, inline: '<div class="test">Example text</div>'
|
||||
end
|
||||
|
||||
class UsersControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects,
|
||||
:users,
|
||||
:roles,
|
||||
:members,
|
||||
:member_roles,
|
||||
:issues,
|
||||
:issue_statuses,
|
||||
:versions,
|
||||
:trackers,
|
||||
:projects_trackers,
|
||||
:issue_categories,
|
||||
:enabled_modules
|
||||
fixtures :users, :groups_users, :email_addresses, :user_preferences,
|
||||
:roles, :members, :member_roles,
|
||||
:issues, :issue_statuses, :issue_relations,
|
||||
:issues, :issue_statuses, :issue_categories,
|
||||
:versions, :trackers,
|
||||
:projects, :projects_trackers, :enabled_modules,
|
||||
:enumerations
|
||||
|
||||
include Redmine::I18n
|
||||
|
||||
def setup
|
||||
prepare_tests
|
||||
@controller = UsersController.new
|
||||
User.current = nil
|
||||
end
|
||||
|
||||
def test_show_with_hook_view_users_show_contextual
|
||||
Redmine::Hook.add_listener ViewUsersShowContextualRenderOn
|
||||
@request.session[:user_id] = 4
|
||||
get :show,
|
||||
params: { id: 2 }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.test', text: 'Example text'
|
||||
end
|
||||
|
||||
def test_show_with_hook_view_users_show_info
|
||||
Redmine::Hook.add_listener ViewUsersShowInfoRenderOn
|
||||
@request.session[:user_id] = 4
|
||||
get :show,
|
||||
params: { id: 2 }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.test', text: 'Example text'
|
||||
end
|
||||
|
||||
def test_show_new_issue_on_profile
|
||||
with_additionals_settings(new_issue_on_profile: 1) do
|
||||
with_additionals_settings new_issue_on_profile: 1 do
|
||||
@request.session[:user_id] = 2
|
||||
get :show,
|
||||
params: { id: 2 }
|
||||
|
||||
assert_response :success
|
||||
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
|
||||
with_additionals_settings new_issue_on_profile: 0 do
|
||||
@request.session[:user_id] = 2
|
||||
get :show,
|
||||
params: { id: 2 }
|
||||
|
||||
assert_response :success
|
||||
assert_select 'a.user-new-issue', count: 0
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,74 +1,81 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class ViewWelcomeIndexTopRenderOn < Redmine::Hook::ViewListener
|
||||
render_on :view_welcome_index_top, inline: '<div class="test">Example text</div>'
|
||||
end
|
||||
|
||||
class ViewWelcomeIndexBottomRenderOn < Redmine::Hook::ViewListener
|
||||
render_on :view_welcome_index_bottom, inline: '<div class="test">Example text</div>'
|
||||
end
|
||||
|
||||
class ViewDashboardTopRenderOn < Redmine::Hook::ViewListener
|
||||
render_on :view_dashboard_top, inline: '<div class="test">Example text</div>'
|
||||
end
|
||||
|
||||
class ViewDashboardBottomRenderOn < Redmine::Hook::ViewListener
|
||||
render_on :view_dashboard_bottom, inline: '<div class="test">Example text</div>'
|
||||
end
|
||||
|
||||
class WelcomeControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects, :news, :users, :members
|
||||
fixtures :projects, :news, :users, :members,
|
||||
:dashboards, :dashboard_roles
|
||||
|
||||
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
|
||||
def test_show_with_left_text_block
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.overview-right', text: /Lore impsuum/
|
||||
end
|
||||
assert_response :success
|
||||
assert_select 'div#list-left div#block-text', text: /example text/
|
||||
end
|
||||
|
||||
def test_show_without_overview_right
|
||||
with_additionals_settings(overview_right: '') do
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
def test_show_with_right_text_block
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.overview-right', count: 0
|
||||
end
|
||||
assert_response :success
|
||||
assert_select 'div#list-right div#block-text__1', text: /example text/
|
||||
end
|
||||
|
||||
def test_show_with_overview_bottom
|
||||
with_additionals_settings(overview_bottom: 'Lore impsuum') do
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
def test_show_with_hook_view_welcome_index_top
|
||||
Redmine::Hook.add_listener ViewWelcomeIndexTopRenderOn
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.overview-bottom', text: /Lore impsuum/
|
||||
end
|
||||
assert_select 'div.test', text: 'Example text'
|
||||
end
|
||||
|
||||
def test_show_without_overview_bottom
|
||||
with_additionals_settings(overview_bottom: '') do
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
def test_show_with_hook_view_welcome_index_bottom
|
||||
Redmine::Hook.add_listener ViewWelcomeIndexBottomRenderOn
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.overview-bottom', count: 0
|
||||
end
|
||||
assert_select 'div.test', text: 'Example text'
|
||||
end
|
||||
|
||||
def test_show_with_overview_top
|
||||
with_additionals_settings(overview_top: 'Lore impsuum') do
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
def test_show_with_hook_view_dashboard_top
|
||||
Redmine::Hook.add_listener ViewDashboardTopRenderOn
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.overview-top', text: /Lore impsuum/
|
||||
end
|
||||
assert_select 'div.test', text: 'Example text'
|
||||
end
|
||||
|
||||
def test_show_without_overview_top
|
||||
with_additionals_settings(overview_top: '') do
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
def test_show_with_hook_view_dashboard_bottom
|
||||
Redmine::Hook.add_listener ViewDashboardBottomRenderOn
|
||||
@request.session[:user_id] = 4
|
||||
get :index
|
||||
|
||||
assert_response :success
|
||||
assert_select 'div.overview-top', count: 0
|
||||
end
|
||||
assert_select 'div.test', text: 'Example text'
|
||||
end
|
||||
|
||||
def test_show_index_with_help_menu
|
||||
skip if Redmine::Plugin.installed?('redmine_hrm')
|
||||
|
||||
with_additionals_settings(remove_help: 0) do
|
||||
@request.session[:user_id] = 1
|
||||
get :index
|
||||
|
@ -78,6 +85,8 @@ class WelcomeControllerTest < Additionals::ControllerTest
|
|||
end
|
||||
|
||||
def test_show_index_without_help_menu
|
||||
skip if Redmine::Plugin.installed?('redmine_hrm')
|
||||
|
||||
with_additionals_settings(remove_help: 1) do
|
||||
@request.session[:user_id] = 1
|
||||
get :index
|
||||
|
@ -85,4 +94,11 @@ class WelcomeControllerTest < Additionals::ControllerTest
|
|||
assert_select 'div#top-menu a.help', count: 0
|
||||
end
|
||||
end
|
||||
|
||||
def test_index_with_invalid_dashboard
|
||||
get :index,
|
||||
params: { dashboard_id: 444 }
|
||||
|
||||
assert_response :missing
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class WikiControllerTest < Additionals::ControllerTest
|
||||
fixtures :projects,
|
||||
|
@ -25,7 +25,7 @@ class WikiControllerTest < Additionals::ControllerTest
|
|||
def setup
|
||||
prepare_tests
|
||||
EnabledModule.create(project_id: 1, name: 'wiki')
|
||||
@project = projects(:projects_001)
|
||||
@project = projects :projects_001
|
||||
@wiki = @project.wiki
|
||||
@page_name = 'additionals_macro_test'
|
||||
@page = @wiki.find_or_new_page(@page_name)
|
||||
|
@ -51,7 +51,7 @@ class WikiControllerTest < Additionals::ControllerTest
|
|||
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/(.*)}
|
||||
assert_select 'iframe', src: %r{^https://www\.meteoblue\.com/en/weather/widget/daily/(.*)}
|
||||
end
|
||||
|
||||
def test_show_with_vimeo_macro
|
||||
|
@ -74,6 +74,16 @@ class WikiControllerTest < Additionals::ControllerTest
|
|||
assert_select 'iframe[src=?]', '//www.slideshare.net/slideshow/embed_code/57941706'
|
||||
end
|
||||
|
||||
def test_show_with_google_docs_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{google_docs(https://docs.google.com/spreadsheets/d/e/RANDOMCODE/pubhtml)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'iframe[src=?]', 'https://docs.google.com/spreadsheets/d/e/RANDOMCODE/pubhtml?widget=true&headers=false'
|
||||
end
|
||||
|
||||
def test_show_with_iframe_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{iframe(https://www.redmine.org/)}}'
|
||||
|
@ -173,16 +183,6 @@ class WikiControllerTest < Additionals::ControllerTest
|
|||
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}}'
|
||||
|
@ -220,7 +220,7 @@ class WikiControllerTest < Additionals::ControllerTest
|
|||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'div.wiki div.additionals-projects li.project'
|
||||
assert_select 'div.wiki div.additionals-projects tr.project'
|
||||
end
|
||||
|
||||
def test_show_with_fa_macro
|
||||
|
@ -301,7 +301,7 @@ class WikiControllerTest < Additionals::ControllerTest
|
|||
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}
|
||||
text: %r{https://widgets\.cryptocompare\.com/serve/v3/coin/header\?fsyms=BTC,ETH&tsyms=EUR}
|
||||
end
|
||||
|
||||
def test_show_with_date_macro
|
||||
|
@ -366,6 +366,16 @@ class WikiControllerTest < Additionals::ControllerTest
|
|||
assert_select 'div.flash.error', html: /Error executing/
|
||||
end
|
||||
|
||||
def test_show_with_asciinema_macro
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{asciinema(113463)}}'
|
||||
@page.content.save!
|
||||
get :show,
|
||||
params: { project_id: 1, id: @page_name }
|
||||
assert_response :success
|
||||
assert_select 'script[src=?]', '//asciinema.org/a/113463.js'
|
||||
end
|
||||
|
||||
def test_show_issue
|
||||
@request.session[:user_id] = WIKI_MACRO_USER_ID
|
||||
@page.content.text = '{{issue(2, format=short)}}'
|
||||
|
@ -468,44 +478,4 @@ class WikiControllerTest < Additionals::ControllerTest
|
|||
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
|
||||
|
|
|
@ -1,15 +1,60 @@
|
|||
module Additionals
|
||||
module GlobalTestHelper
|
||||
def with_additionals_settings(settings, &_block)
|
||||
saved_settings = Setting.plugin_additionals.dup
|
||||
change_additionals_settings(settings)
|
||||
yield
|
||||
ensure
|
||||
restore_additionals_settings
|
||||
end
|
||||
|
||||
def change_additionals_settings(settings)
|
||||
@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
|
||||
|
||||
def restore_additionals_settings
|
||||
if @saved_settings
|
||||
Setting.plugin_additionals = @saved_settings
|
||||
else
|
||||
Rails.logger.warn 'warning: restore_additionals_settings could not restore settings'
|
||||
end
|
||||
end
|
||||
|
||||
def assert_query_sort_order(table_css, column, options = {})
|
||||
options[:action] = :index if options[:action].blank?
|
||||
column = column.to_s
|
||||
column_css = column.tr('_', '-')
|
||||
|
||||
get options[:action],
|
||||
params: { sort: "#{column}:asc", c: [column] }
|
||||
|
||||
assert_response :success
|
||||
assert_select "table.list.#{table_css}.sort-by-#{column_css}.sort-asc"
|
||||
|
||||
get options[:action],
|
||||
params: { sort: "#{column}:desc", c: [column] }
|
||||
|
||||
assert_response :success
|
||||
assert_select "table.list.#{table_css}.sort-by-#{column_css}.sort-desc"
|
||||
end
|
||||
|
||||
def assert_dashboard_query_blocks(blocks = [])
|
||||
blocks.each do |block_def|
|
||||
block_def[:user_id]
|
||||
@request.session[:user_id] = block_def[:user_id].presence || 2
|
||||
get block_def[:action].presence || :show,
|
||||
params: { dashboard_id: block_def[:dashboard_id],
|
||||
block: block_def[:block],
|
||||
project_id: block_def[:project],
|
||||
format: 'js' }
|
||||
|
||||
assert_response :success, "assert_response for #{block_def[:block]}"
|
||||
assert_select "table.list.#{block_def[:entities_class]}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -105,7 +105,7 @@ module ApiTest
|
|||
assert_difference('Issue.count', -1) do
|
||||
delete '/issues/6.xml', headers: credentials('jsmith')
|
||||
|
||||
assert_response :ok
|
||||
assert_response :success
|
||||
assert_equal '', response.body
|
||||
end
|
||||
assert_nil Issue.find_by(id: 6)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class CommonViewsTest < Redmine::IntegrationTest
|
||||
class CommonViewsTest < Additionals::IntegrationTest
|
||||
fixtures :projects,
|
||||
:users,
|
||||
:roles,
|
||||
|
@ -23,15 +23,16 @@ class CommonViewsTest < Redmine::IntegrationTest
|
|||
end
|
||||
|
||||
test 'View user' do
|
||||
log_user('admin', 'admin')
|
||||
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
|
||||
log_user 'admin', 'admin'
|
||||
EnabledModule.create project_id: 1, name: 'issue_tracking'
|
||||
issue = issues :issues_001
|
||||
issue.description = 'new value'
|
||||
issue.save
|
||||
get '/issues/1'
|
||||
assert_response :success
|
||||
|
|
|
@ -1,28 +1,45 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class JavascriptLibraryTest < Redmine::IntegrationTest
|
||||
def test_loaded_css_libraries
|
||||
class JavascriptLibraryTest < Additionals::IntegrationTest
|
||||
fixtures :projects,
|
||||
:users,
|
||||
:roles,
|
||||
:members,
|
||||
:member_roles,
|
||||
:trackers,
|
||||
:projects_trackers,
|
||||
:enabled_modules,
|
||||
:issue_statuses,
|
||||
:issues,
|
||||
:enumerations,
|
||||
:custom_fields,
|
||||
:custom_values,
|
||||
:custom_fields_trackers,
|
||||
:dashboards, :dashboard_roles,
|
||||
:queries
|
||||
|
||||
def test_not_loaded_chart_css_library
|
||||
skip if Redmine::Plugin.installed?('redmine_reporting')
|
||||
|
||||
log_user('admin', 'admin')
|
||||
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
|
||||
assert_select 'link[rel=stylesheet][href^=?]', '/plugin_assets/additionals/stylesheets/Chart.min.css', count: 0
|
||||
end
|
||||
|
||||
def test_not_loaded_css_libraries
|
||||
def test_not_loaded_chart_js_library
|
||||
skip if Redmine::Plugin.installed?('redmine_reporting')
|
||||
|
||||
log_user('admin', 'admin')
|
||||
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
|
||||
assert_select 'script[src^=?]', '/plugin_assets/additionals/javascripts/Chart.bundle.min.js', count: 0
|
||||
end
|
||||
|
||||
def test_not_loaded_javascript_libraries
|
||||
log_user('admin', 'admin')
|
||||
get '/'
|
||||
|
||||
assert_response :success
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class RoutingTest < Redmine::RoutingTest
|
||||
def test_issue_assign_to_me
|
||||
|
@ -8,4 +8,30 @@ class RoutingTest < Redmine::RoutingTest
|
|||
def test_issue_change_status
|
||||
should_route 'PUT /issues/1/change_status' => 'additionals_change_status#update', issue_id: '1'
|
||||
end
|
||||
|
||||
def test_help_macro
|
||||
should_route 'GET /help/macros' => 'additionals_macros#show'
|
||||
end
|
||||
|
||||
def test_auto_completes
|
||||
should_route 'GET /auto_completes/fontawesome' => 'auto_completes#fontawesome'
|
||||
should_route 'GET /auto_completes/issue_assignee' => 'auto_completes#issue_assignee'
|
||||
end
|
||||
|
||||
def test_dashboards
|
||||
should_route 'GET /dashboards.xml' => 'dashboards#index', format: 'xml'
|
||||
should_route 'GET /dashboards.json' => 'dashboards#index', format: 'json'
|
||||
|
||||
should_route 'GET /dashboards/1.xml' => 'dashboards#show', id: '1', format: 'xml'
|
||||
should_route 'GET /dashboards/1.json' => 'dashboards#show', id: '1', format: 'json'
|
||||
should_route 'GET /dashboards/1/edit' => 'dashboards#edit', id: '1'
|
||||
|
||||
should_route 'GET /projects/foo/dashboards.xml' => 'dashboards#index', project_id: 'foo', format: 'xml'
|
||||
should_route 'GET /projects/foo/dashboards.json' => 'dashboards#index', project_id: 'foo', format: 'json'
|
||||
end
|
||||
|
||||
def test_dashboard_async_blocks
|
||||
should_route 'GET /dashboard_async_blocks' => 'dashboard_async_blocks#show'
|
||||
should_route 'GET /projects/foo/dashboard_async_blocks' => 'dashboard_async_blocks#show', project_id: 'foo'
|
||||
end
|
||||
end
|
||||
|
|
3
plugins/additionals/test/support/Gemfile.local
Normal file
3
plugins/additionals/test/support/Gemfile.local
Normal file
|
@ -0,0 +1,3 @@
|
|||
gem 'rubocop', require: false
|
||||
gem 'rubocop-performance', require: false
|
||||
gem 'rubocop-rails', require: false
|
|
@ -1,4 +1,4 @@
|
|||
# for travis debugging
|
||||
# config.logger = Logger.new(STDOUT)
|
||||
# config.logger = Logger.new $stdout
|
||||
# config.logger.level = Logger::INFO
|
||||
# config.log_level = :info
|
||||
|
|
|
@ -3,6 +3,6 @@ test:
|
|||
database: travis_ci_test
|
||||
host: localhost
|
||||
username: root
|
||||
password: travis_ci_test
|
||||
password:
|
||||
pool: 5
|
||||
encoding: utf8mb4
|
||||
|
|
|
@ -1,27 +1,15 @@
|
|||
$VERBOSE = nil
|
||||
|
||||
unless ENV['SKIP_COVERAGE']
|
||||
if ENV['JENKINS']
|
||||
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__) + '/..')
|
||||
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
|
||||
require File.expand_path "#{File.dirname __FILE__}/../../../test/test_helper"
|
||||
require File.expand_path "#{File.dirname __FILE__}/global_test_helper"
|
||||
|
||||
module Additionals
|
||||
module TestHelper
|
||||
|
@ -29,21 +17,43 @@ module Additionals
|
|||
|
||||
def prepare_tests
|
||||
Role.where(id: [1, 2]).each do |r|
|
||||
r.permissions << :view_issues
|
||||
r.permissions << :save_dashboards
|
||||
r.save
|
||||
end
|
||||
|
||||
Role.where(id: [1]).each do |r|
|
||||
r.permissions << :share_dashboards
|
||||
r.permissions << :set_system_dashboards
|
||||
r.save
|
||||
end
|
||||
|
||||
Project.where(id: [1, 2]).each do |project|
|
||||
EnabledModule.create(project: project, name: 'issue_tracking')
|
||||
EnabledModule.create project: project, name: 'issue_tracking'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
module PluginFixturesLoader
|
||||
def fixtures(*table_names)
|
||||
dir = "#{File.dirname __FILE__}/fixtures/"
|
||||
table_names.each do |x|
|
||||
ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?("#{dir}/#{x}.yml")
|
||||
end
|
||||
super(table_names)
|
||||
end
|
||||
end
|
||||
|
||||
class ControllerTest < Redmine::ControllerTest
|
||||
include Additionals::TestHelper
|
||||
extend PluginFixturesLoader
|
||||
end
|
||||
|
||||
class TestCase < ActiveSupport::TestCase
|
||||
include Additionals::TestHelper
|
||||
extend PluginFixturesLoader
|
||||
end
|
||||
|
||||
class IntegrationTest < Redmine::IntegrationTest
|
||||
extend PluginFixturesLoader
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class AdditionalsFontAwesomeTest < Additionals::TestCase
|
||||
fixtures :projects, :users, :members, :member_roles, :roles,
|
||||
|
|
44
plugins/additionals/test/unit/additionals_journal_test.rb
Normal file
44
plugins/additionals/test/unit/additionals_journal_test.rb
Normal file
|
@ -0,0 +1,44 @@
|
|||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class AdditionalsJournalTest < 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
|
||||
|
||||
def setup
|
||||
prepare_tests
|
||||
@issue = issues :issues_001
|
||||
@current_journal = Journal.new journalized: @issue, user: users(:users_001), notes: ''
|
||||
end
|
||||
|
||||
def test_journal_history_with_added_entries
|
||||
assert_difference('JournalDetail.count', 2) do
|
||||
assert AdditionalsJournal.save_journal_history(@current_journal,
|
||||
'issue_test_relation',
|
||||
[1],
|
||||
[1, 2, 3])
|
||||
end
|
||||
end
|
||||
|
||||
def test_journal_history_with_removed_entries
|
||||
assert_difference('JournalDetail.count', 2) do
|
||||
assert AdditionalsJournal.save_journal_history(@current_journal,
|
||||
'issue_test_relation',
|
||||
[1, 2, 3],
|
||||
[1])
|
||||
end
|
||||
end
|
||||
|
||||
def test_journal_history_without_changes
|
||||
assert_difference('JournalDetail.count', 0) do
|
||||
assert AdditionalsJournal.save_journal_history(@current_journal,
|
||||
'issue_test_relation',
|
||||
[1, 2, 3],
|
||||
[1, 2, 3])
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,4 +1,4 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class AdditionalsMacroTest < Additionals::TestCase
|
||||
fixtures :projects, :users, :members, :member_roles, :roles,
|
||||
|
|
59
plugins/additionals/test/unit/additionals_test.rb
Normal file
59
plugins/additionals/test/unit/additionals_test.rb
Normal file
|
@ -0,0 +1,59 @@
|
|||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class AdditionalsTest < Additionals::TestCase
|
||||
fixtures :projects, :users, :members, :member_roles, :roles,
|
||||
:trackers, :projects_trackers,
|
||||
:enabled_modules,
|
||||
:enumerations
|
||||
|
||||
include Redmine::I18n
|
||||
|
||||
def setup
|
||||
prepare_tests
|
||||
end
|
||||
|
||||
def test_true
|
||||
assert Additionals.true? 1
|
||||
assert Additionals.true? true
|
||||
assert Additionals.true? 'true'
|
||||
assert Additionals.true? 'True'
|
||||
|
||||
assert_not Additionals.true?(-1)
|
||||
assert_not Additionals.true? 0
|
||||
assert_not Additionals.true? '0'
|
||||
assert_not Additionals.true? 1000
|
||||
assert_not Additionals.true? false
|
||||
assert_not Additionals.true? 'false'
|
||||
assert_not Additionals.true? 'False'
|
||||
assert_not Additionals.true? 'yes'
|
||||
assert_not Additionals.true? ''
|
||||
assert_not Additionals.true? nil
|
||||
assert_not Additionals.true? 'unknown'
|
||||
end
|
||||
|
||||
def test_settings
|
||||
assert_raises NoMethodError do
|
||||
Additionals.settings[:open_external_urls]
|
||||
end
|
||||
end
|
||||
|
||||
def test_setting
|
||||
assert_equal 'Don\'t forget to define acceptance criteria!',
|
||||
Additionals.setting(:new_ticket_message)
|
||||
assert Additionals.setting?(:open_external_urls)
|
||||
assert_nil Additionals.setting(:no_existing_key)
|
||||
end
|
||||
|
||||
def test_setting_bool
|
||||
assert Additionals.setting?(:open_external_urls)
|
||||
assert_not Additionals.setting?(:add_go_to_top)
|
||||
end
|
||||
|
||||
def test_load_macros
|
||||
assert_equal ['fa'], Additionals.load_macros(['fa'])
|
||||
|
||||
assert_raises LoadError do
|
||||
Additionals.load_macros(%w[fa invalid])
|
||||
end
|
||||
end
|
||||
end
|
18
plugins/additionals/test/unit/dashboard_content_test.rb
Normal file
18
plugins/additionals/test/unit/dashboard_content_test.rb
Normal file
|
@ -0,0 +1,18 @@
|
|||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class DashboardContentTest < Additionals::TestCase
|
||||
fixtures :projects, :users, :members, :member_roles, :roles,
|
||||
:trackers, :projects_trackers,
|
||||
:enabled_modules,
|
||||
:enumerations,
|
||||
:dashboards, :dashboard_roles
|
||||
|
||||
def setup
|
||||
prepare_tests
|
||||
end
|
||||
|
||||
def test_types
|
||||
assert DashboardContent.types.include?(DashboardContentProject::TYPE_NAME)
|
||||
assert DashboardContent.types.include?(DashboardContentWelcome::TYPE_NAME)
|
||||
end
|
||||
end
|
281
plugins/additionals/test/unit/dashboard_test.rb
Normal file
281
plugins/additionals/test/unit/dashboard_test.rb
Normal file
|
@ -0,0 +1,281 @@
|
|||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class DashboardTest < 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,
|
||||
:dashboards, :dashboard_roles
|
||||
|
||||
def setup
|
||||
prepare_tests
|
||||
User.current = users :users_002
|
||||
end
|
||||
|
||||
def test_create_welcome_dashboard
|
||||
dashboard = Dashboard.new name: 'my welcome dashboard',
|
||||
dashboard_type: DashboardContentWelcome::TYPE_NAME,
|
||||
author_id: 2
|
||||
|
||||
assert dashboard.save
|
||||
end
|
||||
|
||||
def test_create_project_dashboard
|
||||
dashboard = Dashboard.new name: 'my project dashboard',
|
||||
dashboard_type: DashboardContentProject::TYPE_NAME,
|
||||
project: Project.find(1),
|
||||
author_id: 2
|
||||
|
||||
assert dashboard.save
|
||||
end
|
||||
|
||||
def test_do_not_create_dashboard_for_role_without_roles
|
||||
dashboard = Dashboard.new name: 'dashboard for roles',
|
||||
dashboard_type: DashboardContentWelcome::TYPE_NAME,
|
||||
author_id: 2,
|
||||
visibility: Dashboard::VISIBILITY_ROLES
|
||||
|
||||
assert_not dashboard.valid?
|
||||
end
|
||||
|
||||
def test_create_dashboard_with_roles
|
||||
dashboard = Dashboard.new name: 'dashboard for roles',
|
||||
dashboard_type: DashboardContentWelcome::TYPE_NAME,
|
||||
author_id: 2,
|
||||
visibility: Dashboard::VISIBILITY_ROLES,
|
||||
roles: Role.where(id: [1, 3]).to_a
|
||||
|
||||
assert dashboard.save
|
||||
dashboard.reload
|
||||
|
||||
assert_equal [1, 3], dashboard.role_ids.sort
|
||||
end
|
||||
|
||||
def test_create_dashboard_with_unused_role_should_visible_for_author
|
||||
used_role = Role.generate!
|
||||
dashboard = Dashboard.new name: 'dashboard for unused role',
|
||||
dashboard_type: DashboardContentWelcome::TYPE_NAME,
|
||||
author_id: 2,
|
||||
visibility: Dashboard::VISIBILITY_ROLES,
|
||||
roles: [used_role]
|
||||
assert dashboard.save
|
||||
dashboard.reload
|
||||
|
||||
assert_equal [used_role.id], dashboard.role_ids
|
||||
assert dashboard.visible?
|
||||
end
|
||||
|
||||
def test_system_default_welcome_should_exist
|
||||
assert_equal 1, Dashboard.welcome_only.where(system_default: true).count
|
||||
end
|
||||
|
||||
def test_system_default_project_should_exist
|
||||
assert_equal 1, Dashboard.project_only.where(system_default: true).count
|
||||
end
|
||||
|
||||
def test_change_system_default_welcome_without_set_system_default
|
||||
dashboard = Dashboard.new dashboard_type: DashboardContentWelcome::TYPE_NAME,
|
||||
name: 'WelcomeTest',
|
||||
system_default: true,
|
||||
author: User.current,
|
||||
visibility: 2
|
||||
assert dashboard.save
|
||||
|
||||
assert dashboard.system_default
|
||||
assert_equal 2, dashboard.visibility
|
||||
end
|
||||
|
||||
def test_change_system_default_project_without_set_system_default
|
||||
dashboard = Dashboard.new dashboard_type: DashboardContentProject::TYPE_NAME,
|
||||
name: 'ProjectTest',
|
||||
system_default: true,
|
||||
author: User.current,
|
||||
visibility: 2
|
||||
assert dashboard.valid?
|
||||
|
||||
assert dashboard.save
|
||||
|
||||
assert dashboard.system_default
|
||||
assert_equal 2, dashboard.visibility
|
||||
end
|
||||
|
||||
def test_system_default_welcome_allowed_only_once
|
||||
assert Dashboard.create!(dashboard_type: DashboardContentWelcome::TYPE_NAME,
|
||||
name: 'WelcomeTest',
|
||||
system_default: true,
|
||||
author: User.current,
|
||||
visibility: 2)
|
||||
|
||||
assert_equal 1, Dashboard.welcome_only.where(system_default: true).count
|
||||
end
|
||||
|
||||
def test_system_default_project_allowed_only_once
|
||||
assert Dashboard.create!(dashboard_type: DashboardContentProject::TYPE_NAME,
|
||||
name: 'ProjectTest',
|
||||
system_default: true,
|
||||
project_id: nil,
|
||||
author: User.current,
|
||||
visibility: 2)
|
||||
|
||||
assert_equal 1, Dashboard.project_only.where(system_default: true).count
|
||||
end
|
||||
|
||||
def test_system_default_welcome_requires_public_visibility
|
||||
dashboard = Dashboard.create!(dashboard_type: DashboardContentWelcome::TYPE_NAME,
|
||||
name: 'WelcomeTest public',
|
||||
system_default: true,
|
||||
author: User.current,
|
||||
visibility: 2)
|
||||
|
||||
assert dashboard.valid?
|
||||
|
||||
dashboard.visibility = 0
|
||||
assert_not dashboard.valid?
|
||||
end
|
||||
|
||||
def test_system_default_project_requires_public_visibility
|
||||
dashboard = Dashboard.new(dashboard_type: DashboardContentProject::TYPE_NAME,
|
||||
name: 'ProjectTest public',
|
||||
system_default: true,
|
||||
project_id: nil,
|
||||
author: User.current,
|
||||
visibility: 2)
|
||||
assert dashboard.valid?
|
||||
|
||||
dashboard.visibility = 0
|
||||
assert_not dashboard.valid?
|
||||
end
|
||||
|
||||
def test_system_default_welcome_should_not_be_deletable
|
||||
assert_raise(Exception) do
|
||||
Dashboard.welcome_only
|
||||
.where(system_default: true)
|
||||
.destroy_all
|
||||
end
|
||||
end
|
||||
|
||||
def test_system_default_project_should_not_be_deletable
|
||||
assert_raise(Exception) do
|
||||
Dashboard.project_only
|
||||
.where(system_default: true)
|
||||
.destroy_all
|
||||
end
|
||||
end
|
||||
|
||||
def test_dashboard_with_unique_name_scope
|
||||
dashboard = Dashboard.new(dashboard_type: DashboardContentProject::TYPE_NAME,
|
||||
author_id: 2,
|
||||
visibility: 2)
|
||||
|
||||
dashboard.name = 'Only for user 2'
|
||||
assert dashboard.valid?
|
||||
|
||||
dashboard.project_id = 1
|
||||
dashboard.name = 'Private project for user 2'
|
||||
assert_not dashboard.valid?
|
||||
dashboard.name = 'Only for me - new'
|
||||
assert dashboard.valid?
|
||||
|
||||
dashboard.name = 'Only for me - new'
|
||||
dashboard.project_id = 2
|
||||
assert dashboard.valid?
|
||||
end
|
||||
|
||||
def test_dashboard_welcome_scope
|
||||
assert_equal 4, Dashboard.visible.welcome_only.count
|
||||
end
|
||||
|
||||
def test_dashboard_project_scope
|
||||
assert_equal 2, Dashboard.visible.project_only.count
|
||||
end
|
||||
|
||||
def test_destroy_dashboard_without_roles
|
||||
dashboard = dashboards :private_welcome2
|
||||
assert dashboard.roles.none?
|
||||
assert dashboard.destroyable_by? users(:users_002)
|
||||
assert_difference 'Dashboard.count', -1 do
|
||||
assert dashboard.destroy
|
||||
end
|
||||
end
|
||||
|
||||
def test_create_dashboard_roles_relation
|
||||
dashboard = dashboards :welcome_for_roles
|
||||
assert_equal 2, dashboard.roles.count
|
||||
|
||||
relation = DashboardRole.new(role_id: 3, dashboard_id: dashboard.id)
|
||||
assert relation.save
|
||||
|
||||
dashboard.reload
|
||||
assert_equal 3, dashboard.roles.count
|
||||
end
|
||||
|
||||
def test_create_dashboard_roles_relation_with_autosave
|
||||
dashboard = dashboards :welcome_for_roles
|
||||
assert_equal 2, dashboard.roles.count
|
||||
|
||||
dashboard.roles << Role.generate!
|
||||
assert dashboard.save
|
||||
dashboard.reload
|
||||
assert_equal 3, dashboard.roles.count
|
||||
end
|
||||
|
||||
def test_destroy_dashboard_with_roles
|
||||
User.current = users :users_001
|
||||
|
||||
# change system default
|
||||
dashboard2 = dashboards :public_welcome
|
||||
dashboard2.system_default = true
|
||||
assert dashboard2.save
|
||||
|
||||
dashboard = dashboards :welcome_for_roles
|
||||
dashboard.reload
|
||||
|
||||
assert dashboard.roles.any?
|
||||
assert dashboard.destroyable_by? users(:users_001)
|
||||
assert_difference 'Dashboard.count', -1 do
|
||||
assert_difference 'DashboardRole.count', -2 do
|
||||
assert_no_difference 'Role.count' do
|
||||
assert dashboard.destroy
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_disable_welcome_system_default_on_system_default_dashboard_should_not_possible
|
||||
dashboard = dashboards :system_default_welcome
|
||||
assert dashboard.system_default
|
||||
|
||||
dashboard.system_default = false
|
||||
assert_raise Dashboard::SystemDefaultChangeException do
|
||||
dashboard.save!
|
||||
end
|
||||
end
|
||||
|
||||
def test_disable_project_system_default_on_system_default_dashboard_should_not_possible
|
||||
dashboard = dashboards :system_default_project
|
||||
|
||||
dashboard.system_default = false
|
||||
assert_raise Dashboard::SystemDefaultChangeException do
|
||||
dashboard.save!
|
||||
end
|
||||
end
|
||||
|
||||
def test_project_system_default_should_not_assignable_with_project_id
|
||||
dashboard = dashboards :system_default_project
|
||||
|
||||
dashboard.project_id = 1
|
||||
assert_raise Dashboard::ProjectSystemDefaultChangeException do
|
||||
dashboard.save!
|
||||
end
|
||||
end
|
||||
|
||||
def test_project_id_should_changeable_on_non_system_default
|
||||
dashboard = dashboards :private_project_default
|
||||
|
||||
dashboard.project_id = 1
|
||||
dashboard.save!
|
||||
end
|
||||
end
|
|
@ -5,6 +5,7 @@ class GlobalHelperTest < ActionView::TestCase
|
|||
include AdditionalsFontawesomeHelper
|
||||
include AdditionalsMenuHelper
|
||||
include CustomFieldsHelper
|
||||
include AvatarsHelper
|
||||
include Redmine::I18n
|
||||
include ERB::Util
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class I18nTest < Additionals::TestCase
|
||||
include Redmine::I18n
|
||||
|
@ -18,32 +18,17 @@ class I18nTest < Additionals::TestCase
|
|||
end
|
||||
|
||||
def test_locales_validness
|
||||
lang_files_count = Dir[Rails.root.join('plugins',
|
||||
'additionals',
|
||||
'config',
|
||||
'locales',
|
||||
'*.yml')].size
|
||||
assert_equal 8, lang_files_count
|
||||
lang_files_count = Dir[Rails.root.join('plugins/additionals/config/locales/*.yml')].size
|
||||
assert_equal 13, lang_files_count
|
||||
valid_languages.each do |lang|
|
||||
assert set_language_if_valid(lang)
|
||||
case lang.to_s
|
||||
when 'en'
|
||||
assert_equal 'Open external URLs', l(:label_open_external_urls)
|
||||
when 'pt-BR', 'cs', 'de', 'es', 'fr', 'it', 'ja', 'ko', 'po', 'ru', 'zh-TW', 'zh'
|
||||
assert_not l(:label_open_external_urls) == 'Open external URLs', lang
|
||||
end
|
||||
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
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class IssueTest < Additionals::TestCase
|
||||
fixtures :projects, :users, :members, :member_roles, :roles,
|
||||
|
@ -30,8 +30,8 @@ class IssueTest < Additionals::TestCase
|
|||
|
||||
def test_change_open_issue
|
||||
with_additionals_settings(issue_freezed_with_close: 1) do
|
||||
User.current = users(:users_003)
|
||||
issue = issues(:issues_007)
|
||||
User.current = users :users_003
|
||||
issue = issues :issues_007
|
||||
issue.subject = 'Should be be saved'
|
||||
assert issue.save
|
||||
end
|
||||
|
@ -39,13 +39,13 @@ class IssueTest < Additionals::TestCase
|
|||
|
||||
def test_change_closed_issue_with_permission
|
||||
with_additionals_settings(issue_freezed_with_close: 1) do
|
||||
User.current = users(:users_003)
|
||||
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)
|
||||
project = projects :projects_001
|
||||
Member.create!(principal: User.current, project_id: project.id, role_ids: [role.id])
|
||||
|
||||
issue = issues(:issues_008)
|
||||
issue = issues :issues_008
|
||||
|
||||
issue.subject = 'Should be saved'
|
||||
assert issue.save
|
||||
|
@ -57,21 +57,40 @@ class IssueTest < Additionals::TestCase
|
|||
|
||||
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)
|
||||
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
|
||||
|
||||
issue.status_id = 1
|
||||
assert issue.status_was.is_closed
|
||||
assert_not issue.closed?
|
||||
assert_not issue.save
|
||||
end
|
||||
end
|
||||
|
||||
def test_new_issue_should_always_be_changeable
|
||||
with_additionals_settings issue_freezed_with_close: 1 do
|
||||
User.current = users :users_003
|
||||
|
||||
issue = Issue.generate subject: 'new issue for closing test',
|
||||
status_id: 1
|
||||
assert issue.save
|
||||
|
||||
issue = Issue.generate subject: 'new issue for closing test and closed state',
|
||||
status_id: 5
|
||||
assert issue.save
|
||||
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)
|
||||
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
|
||||
|
@ -81,11 +100,22 @@ class IssueTest < Additionals::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_unchanged_existing_issue_should_not_create_validation_error
|
||||
with_additionals_settings issue_freezed_with_close: 1 do
|
||||
User.current = users :users_003
|
||||
issue = issues :issues_008
|
||||
assert issue.save
|
||||
|
||||
# but changed issues should throw error
|
||||
issue.subject = 'changed'
|
||||
assert_not issue.save
|
||||
end
|
||||
end
|
||||
|
||||
def test_auto_assigned_to
|
||||
with_additionals_settings(issue_status_change: '0',
|
||||
issue_auto_assign: '1',
|
||||
with_additionals_settings issue_auto_assign: 1,
|
||||
issue_auto_assign_status: ['1'],
|
||||
issue_auto_assign_role: '1') do
|
||||
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
|
||||
|
@ -93,10 +123,25 @@ class IssueTest < Additionals::TestCase
|
|||
end
|
||||
|
||||
def test_disabled_auto_assigned_to
|
||||
with_additionals_settings(issue_status_change: '0',
|
||||
issue_auto_assign: '0',
|
||||
with_additionals_settings issue_auto_assign: 0,
|
||||
issue_auto_assign_status: ['1'],
|
||||
issue_auto_assign_role: '1') do
|
||||
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
|
||||
|
||||
with_additionals_settings issue_auto_assign: 1,
|
||||
issue_auto_assign_status: [],
|
||||
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
|
||||
|
||||
with_additionals_settings issue_auto_assign: 1,
|
||||
issue_auto_assign_status: ['1'],
|
||||
issue_auto_assign_role: '' 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
|
||||
|
|
84
plugins/additionals/test/unit/project_test.rb
Normal file
84
plugins/additionals/test/unit/project_test.rb
Normal file
|
@ -0,0 +1,84 @@
|
|||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class ProjectTest < Additionals::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,
|
||||
:groups_users,
|
||||
:repositories,
|
||||
:workflows,
|
||||
:attachments
|
||||
|
||||
def setup
|
||||
User.current = nil
|
||||
end
|
||||
|
||||
def test_assignable_users_amount
|
||||
with_settings issue_group_assignment: '1' do
|
||||
project = Project.find(5)
|
||||
assert_equal project.assignable_users.count, project.assignable_users_and_groups.count
|
||||
end
|
||||
with_settings issue_group_assignment: '0' do
|
||||
project = Project.find(5)
|
||||
assert_not_equal project.assignable_users.count, project.assignable_users_and_groups.count
|
||||
end
|
||||
end
|
||||
|
||||
def test_visible_users
|
||||
project = projects :projects_005
|
||||
assert_equal 3, project.visible_users.count
|
||||
end
|
||||
|
||||
def test_visible_principals
|
||||
project = projects :projects_005
|
||||
assert_equal 4, project.visible_principals.count
|
||||
end
|
||||
|
||||
def test_destroy_project
|
||||
User.current = users :users_001
|
||||
|
||||
@ecookbook = projects :projects_001
|
||||
# dashboards
|
||||
assert @ecookbook.dashboards.any?
|
||||
|
||||
@ecookbook.destroy
|
||||
# make sure that the project non longer exists
|
||||
assert_raise(ActiveRecord::RecordNotFound) { Project.find(@ecookbook.id) }
|
||||
# make sure related data was removed
|
||||
assert_nil Dashboard.where(project_id: @ecookbook.id).first
|
||||
end
|
||||
|
||||
def test_users_by_role
|
||||
users_by_role = Project.find(1).users_by_role
|
||||
assert_kind_of Hash, users_by_role
|
||||
role = Role.find(1)
|
||||
assert_kind_of Array, users_by_role[role]
|
||||
assert users_by_role[role].include?(User.find(2))
|
||||
end
|
||||
|
||||
def test_users_by_role_with_hidden_role
|
||||
Role.update_all users_visibility: 'members_of_visible_projects'
|
||||
|
||||
role = Role.find 2
|
||||
role.hide = 1
|
||||
role.save!
|
||||
|
||||
assert_equal 0, Role.where.not(users_visibility: 'members_of_visible_projects').count
|
||||
assert role.hide
|
||||
|
||||
# User.current = User.find 2
|
||||
assert_equal 1, Project.find(1).users_by_role.count
|
||||
|
||||
User.current = User.find 1
|
||||
assert_equal 2, Project.find(1).users_by_role.count
|
||||
end
|
||||
end
|
|
@ -1,16 +1,19 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class QueryTest < Additionals::TestCase
|
||||
fixtures :projects, :users, :members, :member_roles, :roles,
|
||||
:groups_users,
|
||||
:trackers, :projects_trackers,
|
||||
:enabled_modules,
|
||||
:roles
|
||||
:roles,
|
||||
:repositories
|
||||
|
||||
def setup
|
||||
prepare_query_tests
|
||||
User.current = nil
|
||||
end
|
||||
|
||||
def test_issue_query_principals_with_hide
|
||||
prepare_query_tests
|
||||
User.current = @user_with_hide
|
||||
query = IssueQuery.new(project: @project, name: '_')
|
||||
|
||||
|
@ -19,6 +22,7 @@ class QueryTest < Additionals::TestCase
|
|||
end
|
||||
|
||||
def test_issue_query_principals_with_show_hide_permission
|
||||
prepare_query_tests
|
||||
User.current = @user_with_show_hide
|
||||
query = IssueQuery.new(project: @project, name: '_')
|
||||
|
||||
|
@ -26,6 +30,8 @@ class QueryTest < Additionals::TestCase
|
|||
assert_equal 4, query.principals.count
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def prepare_query_tests
|
||||
@role1 = Role.new(name: 'principal test hide1', users_visibility: 'members_of_visible_projects', hide: true)
|
||||
@role1.add_permission!('view_issues')
|
||||
|
@ -35,7 +41,7 @@ class QueryTest < Additionals::TestCase
|
|||
@role2.add_permission!('view_issues', 'show_hidden_roles_in_memberbox')
|
||||
@role2.save!
|
||||
|
||||
@project = projects(:projects_001)
|
||||
@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)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class RoleTest < Additionals::TestCase
|
||||
fixtures :projects, :users, :members, :member_roles, :roles,
|
||||
|
@ -10,18 +10,18 @@ class RoleTest < Additionals::TestCase
|
|||
prepare_tests
|
||||
end
|
||||
|
||||
def test_create
|
||||
def test_with_permission
|
||||
role = Role.new(name: 'role without hide')
|
||||
assert role.save
|
||||
|
||||
role.reload
|
||||
assert_equal false, role.hide
|
||||
assert_not role.hide
|
||||
|
||||
role = Role.new(name: 'role with hide', hide: true)
|
||||
assert role.save
|
||||
|
||||
role.reload
|
||||
assert_equal true, role.hide
|
||||
assert role.hide
|
||||
end
|
||||
|
||||
def test_edit
|
||||
|
@ -30,6 +30,6 @@ class RoleTest < Additionals::TestCase
|
|||
assert role.save
|
||||
|
||||
role.reload
|
||||
assert_equal true, role.hide
|
||||
assert role.hide
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class TimeEntryTest < Additionals::TestCase
|
||||
fixtures :issues, :projects, :users, :time_entries,
|
||||
fixtures :users, :email_addresses,
|
||||
:issues, :projects, :time_entries,
|
||||
:members, :roles, :member_roles,
|
||||
:trackers, :issue_statuses,
|
||||
:projects_trackers,
|
||||
|
@ -19,16 +20,13 @@ class TimeEntryTest < Additionals::TestCase
|
|||
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'
|
||||
entry = TimeEntry.generate(project: projects(:projects_001))
|
||||
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')
|
||||
entry = TimeEntry.generate(issue: issues(:issues_002))
|
||||
assert_not entry.issue.closed?
|
||||
assert entry.valid?
|
||||
assert entry.save
|
||||
|
@ -36,28 +34,21 @@ class TimeEntryTest < Additionals::TestCase
|
|||
|
||||
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
|
||||
entry = TimeEntry.generate(issue: issues(:issues_008))
|
||||
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)
|
||||
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)
|
||||
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')
|
||||
entry = TimeEntry.generate(issue: issues(:issues_008))
|
||||
assert entry.issue.closed?
|
||||
assert entry.valid?
|
||||
assert entry.save
|
||||
|
|
66
plugins/additionals/test/unit/user_test.rb
Normal file
66
plugins/additionals/test/unit/user_test.rb
Normal file
|
@ -0,0 +1,66 @@
|
|||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class UserTest < Additionals::TestCase
|
||||
fixtures :users, :groups_users, :email_addresses,
|
||||
:members, :projects, :roles, :member_roles, :auth_sources,
|
||||
:trackers, :issue_statuses,
|
||||
:projects_trackers,
|
||||
:watchers,
|
||||
:issue_categories, :enumerations, :issues,
|
||||
:journals, :journal_details,
|
||||
:enabled_modules,
|
||||
:tokens, :user_preferences,
|
||||
:dashboards, :dashboard_roles
|
||||
|
||||
def setup
|
||||
prepare_tests
|
||||
User.current = users :users_002
|
||||
end
|
||||
|
||||
def test_with_permission
|
||||
admin_user = User.generate!(admin: true)
|
||||
|
||||
users = User.visible.active.with_permission(:save_dashboards)
|
||||
assert_equal 5, users.count
|
||||
assert users.exists?(id: admin_user)
|
||||
end
|
||||
|
||||
def test_with_permission_on_project
|
||||
assert_equal 3, User.visible.active.with_permission(:save_dashboards, projects(:projects_001)).count
|
||||
end
|
||||
|
||||
def test_admin_should_can_be_admin
|
||||
assert User.where(admin: true).first.can_be_admin?
|
||||
end
|
||||
|
||||
def test_non_admin_should_can_not_be_admin
|
||||
assert_not User.where(admin: false).first.can_be_admin?
|
||||
end
|
||||
|
||||
def test_sudoer_should_can_be_admin
|
||||
skip 'Skip redmine_sudo test, because redmine_contacts is not installed' unless Redmine::Plugin.installed?('redmine_sudo')
|
||||
|
||||
user = users :users_001
|
||||
user.sudoer = true
|
||||
user.save!
|
||||
user.reload
|
||||
|
||||
assert user.sudoer
|
||||
assert user.admin
|
||||
assert User.where(sudoer: true).first.can_be_admin?
|
||||
|
||||
user.admin = false
|
||||
user.save!
|
||||
user.reload
|
||||
|
||||
assert user.sudoer
|
||||
assert_not user.admin
|
||||
assert User.where(sudoer: true).first.can_be_admin?
|
||||
end
|
||||
|
||||
def test_non_sudoer_without_admin_can_not_be_admin
|
||||
skip 'Skip redmine_sudo test, because redmine_contacts is not installed' unless Redmine::Plugin.installed?('redmine_sudo')
|
||||
|
||||
assert_not User.where(sudoer: false, admin: false).first.can_be_admin?
|
||||
end
|
||||
end
|
|
@ -1,4 +1,4 @@
|
|||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require File.expand_path '../../test_helper', __FILE__
|
||||
|
||||
class WatcherTest < Additionals::TestCase
|
||||
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, :enabled_modules,
|
||||
|
@ -9,15 +9,15 @@ class WatcherTest < Additionals::TestCase
|
|||
|
||||
def setup
|
||||
prepare_tests
|
||||
@author = users(:users_001)
|
||||
@assigned_user = users(:users_002)
|
||||
@changing_user = users(:users_004)
|
||||
@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
|
||||
with_additionals_settings issue_autowatch_involved: 0 do
|
||||
User.current = @author
|
||||
issue = Issue.generate(author_id: @author.id)
|
||||
issue = Issue.generate author_id: @author.id
|
||||
issue.save
|
||||
assert_equal 0, issue.watchers.count
|
||||
assert_not issue.watched_by?(@author)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue