Actualiza el plugin Additionals a 3.0.2-master

This commit is contained in:
Manuel Cillero 2021-03-20 11:12:56 +01:00
parent 3b6a41320c
commit cfa0d58b18
164 changed files with 2027 additions and 58190 deletions

View file

@ -0,0 +1,279 @@
module CrudControllerBase
extend ActiveSupport::Concern
included do
# Show
def test_show
unless prepare_crud_test :show
# no controller action should be available, test it
assert_raises ActionController::UrlGenerationError do
get :show
end
return
end
get :show, params: @crud[:show_params].presence || { id: @crud[:entity].id }
if @crud[:show_assert_response].present?
assert_response @crud[:show_assert_response]
else
assert_response :success
end
assert_select(*@crud[:show_assert_select]) if @crud[:show_assert_select].present?
end
def test_show_without_permission
return unless prepare_crud_test :show, no_permission: true
get :show, params: @crud[:show_params].presence || { id: @crud[:entity].id }
assert_response :forbidden
end
# Index
def test_index
unless prepare_crud_test :index
# no controller action should be available, test it
assert_raises ActionController::UrlGenerationError do
get :index
end
return
end
get :index, params: @crud[:index_params]
if @crud[:index_assert_response].present?
assert_response @crud[:index_assert_response]
else
assert_response :success
end
assert_select(*@crud[:index_assert_select]) if @crud[:index_assert_select].present?
end
def test_index_without_permission
return unless prepare_crud_test :index, no_permission: true
get :index, params: @crud[:index_params]
if @crud[:index_forbitten_status].present?
assert_response @crud[:index_forbitten_status]
else
assert_response :forbidden
end
end
# New
def test_new
unless prepare_crud_test :new
# no controller action should be available, test it
assert_raises ActionController::UrlGenerationError do
get :new
end
return
end
get :new, params: @crud[:new_params].presence || {}
assert_response :success
end
def test_new_without_permission
return unless prepare_crud_test :new, no_permission: true
get :new, params: @crud[:new_params].presence || {}
assert_response :forbidden
end
# Create
def test_create
unless prepare_crud_test :create
# no controller action should be available, test it
assert_raises ActionController::UrlGenerationError do
post :create
end
return
end
assert_difference("#{@crud[:entity].class.name}.count") do
assert_no_difference 'Journal.count' do
post :create, params: form_params(:create)
end
end
if @crud[:create_redirect_to]
assert_redirected_to @crud[:create_redirect_to]
else
assert_response 302
end
entity = @crud[:entity].class.order(id: :desc).first
if @crud[:created_assert].present?
@crud[:created_assert].each do |name|
assert entity.send(name), "Expected false to be truthy for #{name}"
end
end
if @crud[:create_assert_not].present?
@crud[:create_assert_not].each do |name|
assert_not entity.send(name), "Expected true to be nil or false for #{name}"
end
end
return if @crud[:create_assert_equals].blank?
@crud[:create_assert_equals].each do |name, value|
assert_equal value, entity.send(name)
end
end
def test_create_without_permission
return unless prepare_crud_test :create, no_permission: true
assert_no_difference("#{@crud[:entity].class.name}.count") do
post :create, params: form_params(:create)
end
assert_response :forbidden
end
# Edit
def test_edit
unless prepare_crud_test :edit
# no controller action should be available, test it
assert_raises ActionController::UrlGenerationError do
post :edit
end
return
end
get :edit, params: { id: @crud[:entity].id }
assert_response :success
if @crud[:edit_assert_select].present?
assert_select(*@crud[:edit_assert_select])
else
assert_select "form#edit_#{@crud[:form]}"
end
end
def test_edit_without_permission
return unless prepare_crud_test :edit, no_permission: true
get :edit, params: { id: @crud[:entity].id }
assert_response :forbidden
end
# Update
def test_update
unless prepare_crud_test :update
# no controller action should be available, test it
assert_raises ActionController::UrlGenerationError do
put :update
end
return
end
put :update, params: form_params(:update)
if @crud[:update_redirect_to]
assert_redirected_to @crud[:update_redirect_to]
else
assert_response 302
end
@crud[:entity].reload
if @crud[:update_assert].present?
@crud[:update_assert].each do |name|
assert @crud[:entity].send(name), "Expected false to be truthy for #{name}"
end
end
if @crud[:update_assert_not].present?
@crud[:update_assert_not].each do |name|
assert_not @crud[:entity].send(name), "Expected true to be nil or false for #{name}"
end
end
return if @crud[:update_assert_equals].blank?
@crud[:update_assert_equals].each do |name, value|
assert_equal value, @crud[:entity].send(name)
end
end
def test_update_without_permission
return unless prepare_crud_test :update, no_permission: true
put :update, params: form_params(:update)
assert_response :forbidden
return if @crud[:update_equals].blank?
@crud[:entity].reload
@crud[:update_equals].each do |name, value|
assert_not_equal value, @crud[:entity].send(name)
end
end
# Delete
def test_delete
unless prepare_crud_test :delete
# no controller action should be available, test it
assert_raises ActionController::UrlGenerationError do
delete :destroy
end
return
end
assert_difference("#{@crud[:entity].class.name}.count", -1) do
delete :destroy, params: { id: @crud[:entity].id }
end
return if @crud[:delete_redirect_to].blank?
assert_redirected_to @crud[:delete_redirect_to]
end
def test_delete_without_permission
return unless prepare_crud_test :delete, no_permission: true
assert_no_difference("#{@crud[:entity].class.name}.count") do
delete :destroy, params: { id: @crud[:entity].id }
end
assert_response :forbidden
end
private
def form_params(action)
crud_params = @crud["#{action}_params".to_sym]
if @crud[:form]
{ id: @crud[:entity].id, @crud[:form] => crud_params }
else
crud_params
end
end
def prepare_crud_test(action, no_permission: false)
return false if @crud[:without_actions].present? && @crud[:without_actions].include?(action)
@request.session[:user_id] = if no_permission
@user_without_permission.id
else
@user.id
end
true
end
end
end

View file

@ -13,6 +13,7 @@ system_default_welcome:
- my_spent_time
left:
- text
- text_async
- legacy_left
right:
- text__1
@ -23,6 +24,9 @@ system_default_welcome:
text:
:title: Welcome left
:text: Some example text in left text block
text_async:
:title: Async loaded
:text: Use it for better performance
text__1:
:title: Welcome right
:text: Some example text in right text block

View file

@ -1,20 +1,22 @@
require File.expand_path '../../test_helper', __FILE__
class DashboardAsyncBlocksControllerTest < Additionals::ControllerTest
fixtures :projects,
:users,
fixtures :projects, :users, :email_addresses, :user_preferences,
:roles,
:members,
:member_roles,
:issues,
:issue_relations,
:issue_statuses,
:versions,
:trackers,
:projects_trackers,
:issue_categories,
:enabled_modules,
:journals, :journal_details,
:dashboards, :dashboard_roles,
:queries
:repositories, :changesets,
:queries, :watchers
include Redmine::I18n

View file

@ -16,18 +16,30 @@ class DashboardsControllerTest < Additionals::ControllerTest
:dashboards, :dashboard_roles,
:queries
include CrudControllerBase
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
User.current = nil
@user = users :users_002
@user_without_permission = users :users_004
@crud = { form: :dashboard,
show_assert_response: 406,
index_assert_response: 406,
create_params: { name: 'tester board',
enable_sidebar: true,
dashboard_type: DashboardContentWelcome::TYPE_NAME,
author_id: @user.id },
create_assert_equals: { name: 'tester board' },
create_assert: %i[enable_sidebar],
edit_assert_select: ['form#dashboard-form'],
update_params: { name: 'changed',
enable_sidebar: true },
update_assert_equals: { name: 'changed' },
update_assert: %i[enable_sidebar],
entity: dashboards(:private_welcome2),
delete_redirect_to: home_url }
end
end

View file

@ -80,6 +80,7 @@ class IssuesControllerTest < Additionals::ControllerTest
@request.session[:user_id] = 2
get :show,
params: { id: 2 }
assert_select 'a.assign-to-me'
end
end

View file

@ -433,6 +433,27 @@ class WikiControllerTest < Additionals::ControllerTest
text: '#2 Add ingredients categories'
end
def test_show_user_with_current_user
@request.session[:user_id] = WIKI_MACRO_USER_ID
@page.content.text = '{{user(current_user)}}'
@page.content.save!
get :show,
params: { project_id: 1, id: @page_name }
assert_response :success
assert_select '#content a.user.active[href=?]', '/users/2',
text: 'John Smith'
end
def test_show_user_with_current_user_as_text
@request.session[:user_id] = WIKI_MACRO_USER_ID
@page.content.text = '{{user(current_user, text=true)}}'
@page.content.save!
get :show,
params: { project_id: 1, id: @page_name }
assert_response :success
assert_select '#content span.user.active', text: 'John Smith'
end
def test_show_user_with_id
@request.session[:user_id] = WIKI_MACRO_USER_ID
@page.content.text = '{{user(1)}}'
@ -440,7 +461,7 @@ class WikiControllerTest < Additionals::ControllerTest
get :show,
params: { project_id: 1, id: @page_name }
assert_response :success
assert_select 'a[href=?]', '/users/1',
assert_select '#content a[href=?]', '/users/1',
text: 'Redmine Admin'
end
@ -451,8 +472,8 @@ class WikiControllerTest < Additionals::ControllerTest
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',
assert_select '#content a.user', text: 'Redmine Admin'
assert_select '#content a[href=?]', '/users/1',
text: 'Redmine Admin'
end
@ -463,8 +484,8 @@ class WikiControllerTest < Additionals::ControllerTest
get :show,
params: { project_id: 1, id: @page_name }
assert_response :success
assert_select 'a[href=?]', '/users/2',
text: 'jsmith'
assert_select '#content a[href=?]', '/users/2',
text: 'John Smith'
end
def test_show_user_with_name_fullname
@ -474,8 +495,8 @@ class WikiControllerTest < Additionals::ControllerTest
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',
assert_select '#content a.user', text: 'John Smith'
assert_select '#content a[href=?]', '/users/2',
text: 'John Smith'
end
end

View file

@ -1,5 +1,15 @@
module Additionals
module GlobalTestHelper
def assert_select_td_column(column_name)
c = column_name.to_s
.gsub('issue.cf', 'issue_cf')
.gsub('project.cf', 'project_cf')
.gsub('user.cf', 'user_cf')
.tr('.', '-')
assert_select "td.#{c}"
end
def with_additionals_settings(settings, &_block)
change_additionals_settings(settings)
yield

View file

@ -66,7 +66,7 @@ module ApiTest
assert_equal 'API test', issue.subject
assert_response :created
assert_equal 'application/xml', @response.content_type
assert_equal 'application/xml', @response.media_type
assert_select 'issue > id', text: issue.id.to_s
end
end
@ -96,7 +96,7 @@ module ApiTest
assert_equal 'API test', issue.subject
assert_response :created
assert_equal 'application/xml', @response.content_type
assert_equal 'application/xml', @response.media_type
assert_select 'issue > id', text: issue.id.to_s
end
end

View file

@ -16,6 +16,7 @@ class RoutingTest < Redmine::RoutingTest
def test_auto_completes
should_route 'GET /auto_completes/fontawesome' => 'auto_completes#fontawesome'
should_route 'GET /auto_completes/issue_assignee' => 'auto_completes#issue_assignee'
should_route 'GET /auto_completes/global_users' => 'auto_completes#global_users'
end
def test_dashboards

View file

@ -1,3 +0,0 @@
gem 'rubocop', require: false
gem 'rubocop-performance', require: false
gem 'rubocop-rails', require: false

View file

@ -1,4 +0,0 @@
# for travis debugging
# config.logger = Logger.new $stdout
# config.logger.level = Logger::INFO
# config.log_level = :info

View file

@ -0,0 +1,6 @@
# = Redmine configuration file
# default configuration options for all environments
default:
sudo_mode: false
sudo_mode_timeout: 1

View file

@ -1,8 +0,0 @@
test:
adapter: mysql2
database: travis_ci_test
host: localhost
username: root
password:
pool: 5
encoding: utf8mb4

View file

@ -0,0 +1,8 @@
test:
adapter: mysql2
database: redmine
port: <%= ENV["MYSQL_PORT"] %>
host: 127.0.0.1
username: root
password: BestPasswordEver
encoding: utf8mb4

View file

@ -0,0 +1,23 @@
production:
adapter: postgresql
host: localhost
database: redmine
username: postgres
password: postgres
encoding: utf8
development:
adapter: postgresql
host: localhost
database: redmine
username: postgres
password: postgres
encoding: utf8
test:
adapter: postgresql
host: localhost
database: redmine
username: postgres
password: postgres
encoding: utf8

View file

@ -1,6 +0,0 @@
test:
adapter: postgresql
database: travis_ci_test
username: postgres
pool: 5
encoding: utf8

View file

@ -10,6 +10,7 @@ end
require File.expand_path "#{File.dirname __FILE__}/../../../test/test_helper"
require File.expand_path "#{File.dirname __FILE__}/global_test_helper"
require File.expand_path "#{File.dirname __FILE__}/crud_controller_base"
module Additionals
module TestHelper

View file

@ -0,0 +1,13 @@
require File.expand_path '../../test_helper', __FILE__
class AdditionalsInfoTest < Additionals::TestCase
def test_system_info
text = AdditionalsInfo.system_info
assert_not_equal '', text
assert_not_equal 'unknown', text
end
def test_windows_platform
assert_not AdditionalsInfo.windows_platform?
end
end

View file

@ -50,10 +50,9 @@ class AdditionalsTest < Additionals::TestCase
end
def test_load_macros
assert_equal ['fa'], Additionals.load_macros(['fa'])
macros = Additionals.load_macros
assert_raises LoadError do
Additionals.load_macros(%w[fa invalid])
end
assert macros.count.positive?
assert(macros.detect { |macro| macro.include? 'fa_macro' })
end
end

View file

@ -20,7 +20,7 @@ class DashboardTest < Additionals::TestCase
dashboard_type: DashboardContentWelcome::TYPE_NAME,
author_id: 2
assert dashboard.save
assert_save dashboard
end
def test_create_project_dashboard
@ -29,7 +29,7 @@ class DashboardTest < Additionals::TestCase
project: Project.find(1),
author_id: 2
assert dashboard.save
assert_save dashboard
end
def test_do_not_create_dashboard_for_role_without_roles
@ -48,7 +48,7 @@ class DashboardTest < Additionals::TestCase
visibility: Dashboard::VISIBILITY_ROLES,
roles: Role.where(id: [1, 3]).to_a
assert dashboard.save
assert_save dashboard
dashboard.reload
assert_equal [1, 3], dashboard.role_ids.sort
@ -61,7 +61,7 @@ class DashboardTest < Additionals::TestCase
author_id: 2,
visibility: Dashboard::VISIBILITY_ROLES,
roles: [used_role]
assert dashboard.save
assert_save dashboard
dashboard.reload
assert_equal [used_role.id], dashboard.role_ids
@ -82,7 +82,7 @@ class DashboardTest < Additionals::TestCase
system_default: true,
author: User.current,
visibility: 2
assert dashboard.save
assert_save dashboard
assert dashboard.system_default
assert_equal 2, dashboard.visibility
@ -96,7 +96,7 @@ class DashboardTest < Additionals::TestCase
visibility: 2
assert dashboard.valid?
assert dashboard.save
assert_save dashboard
assert dashboard.system_default
assert_equal 2, dashboard.visibility
@ -206,7 +206,7 @@ class DashboardTest < Additionals::TestCase
assert_equal 2, dashboard.roles.count
relation = DashboardRole.new(role_id: 3, dashboard_id: dashboard.id)
assert relation.save
assert_save relation
dashboard.reload
assert_equal 3, dashboard.roles.count
@ -217,7 +217,7 @@ class DashboardTest < Additionals::TestCase
assert_equal 2, dashboard.roles.count
dashboard.roles << Role.generate!
assert dashboard.save
assert_save dashboard
dashboard.reload
assert_equal 3, dashboard.roles.count
end
@ -228,7 +228,7 @@ class DashboardTest < Additionals::TestCase
# change system default
dashboard2 = dashboards :public_welcome
dashboard2.system_default = true
assert dashboard2.save
assert_save dashboard2
dashboard = dashboards :welcome_for_roles
dashboard.reload
@ -276,6 +276,6 @@ class DashboardTest < Additionals::TestCase
dashboard = dashboards :private_project_default
dashboard.project_id = 1
dashboard.save!
assert_save dashboard
end
end

View file

@ -26,17 +26,6 @@ class GlobalHelperTest < ActionView::TestCase
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))
@ -65,7 +54,7 @@ class GlobalHelperTest < ActionView::TestCase
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))
parse_issue_url('http://localhost/issue/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 },

View file

@ -23,7 +23,7 @@ class IssueTest < Additionals::TestCase
def test_create
issue = Issue.new(project_id: 1, tracker_id: 1, author_id: 3, subject: 'test_create')
assert issue.save
assert_save issue
assert_equal issue.tracker.default_status, issue.status
assert_nil issue.description
end
@ -33,7 +33,7 @@ class IssueTest < Additionals::TestCase
User.current = users :users_003
issue = issues :issues_007
issue.subject = 'Should be be saved'
assert issue.save
assert_save issue
end
end
@ -48,7 +48,7 @@ class IssueTest < Additionals::TestCase
issue = issues :issues_008
issue.subject = 'Should be saved'
assert issue.save
assert_save issue
issue.reload
assert_equal 'Should be saved', issue.subject
@ -79,11 +79,11 @@ class IssueTest < Additionals::TestCase
issue = Issue.generate subject: 'new issue for closing test',
status_id: 1
assert issue.save
assert_save issue
issue = Issue.generate subject: 'new issue for closing test and closed state',
status_id: 5
assert issue.save
assert_save issue
end
end
@ -93,7 +93,7 @@ class IssueTest < Additionals::TestCase
issue = issues :issues_008
issue.subject = 'Should be saved'
assert issue.save
assert_save issue
issue.reload
assert_equal 'Should be saved', issue.subject
@ -104,7 +104,7 @@ class IssueTest < Additionals::TestCase
with_additionals_settings issue_freezed_with_close: 1 do
User.current = users :users_003
issue = issues :issues_008
assert issue.save
assert_save issue
# but changed issues should throw error
issue.subject = 'changed'
@ -117,7 +117,7 @@ class IssueTest < Additionals::TestCase
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_save issue
assert_equal 2, issue.assigned_to_id
end
end
@ -127,7 +127,7 @@ class IssueTest < Additionals::TestCase
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_save issue
assert_nil issue.assigned_to_id
end
@ -135,7 +135,7 @@ class IssueTest < Additionals::TestCase
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_save issue
assert_nil issue.assigned_to_id
end
@ -143,7 +143,7 @@ class IssueTest < Additionals::TestCase
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_save issue
assert_nil issue.assigned_to_id
end
end

View file

@ -12,13 +12,13 @@ class RoleTest < Additionals::TestCase
def test_with_permission
role = Role.new(name: 'role without hide')
assert role.save
assert_save role
role.reload
assert_not role.hide
role = Role.new(name: 'role with hide', hide: true)
assert role.save
assert_save role
role.reload
assert role.hide
@ -27,7 +27,7 @@ class RoleTest < Additionals::TestCase
def test_edit
role = roles(:roles_001)
role.hide = true
assert role.save
assert_save role
role.reload
assert role.hide

View file

@ -22,14 +22,14 @@ class TimeEntryTest < Additionals::TestCase
def test_create_time_entry_without_issue
entry = TimeEntry.generate(project: projects(:projects_001))
assert entry.valid?
assert entry.save
assert_save entry
end
def test_create_time_entry_with_open_issue
entry = TimeEntry.generate(issue: issues(:issues_002))
assert_not entry.issue.closed?
assert entry.valid?
assert entry.save
assert_save entry
end
def test_create_time_entry_with_closed_issue_without_permission
@ -51,6 +51,6 @@ class TimeEntryTest < Additionals::TestCase
entry = TimeEntry.generate(issue: issues(:issues_008))
assert entry.issue.closed?
assert entry.valid?
assert entry.save
assert_save entry
end
end