mirror of
https://github.com/redmine/redmine.git
synced 2025-10-26 07:46:17 +01:00
Converts UI tests to system tests (#23630).
git-svn-id: http://svn.redmine.org/redmine/trunk@16864 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
7
Gemfile
7
Gemfile
@@ -86,9 +86,10 @@ group :test do
|
||||
gem "rails-dom-testing"
|
||||
gem "mocha"
|
||||
gem "simplecov", "~> 0.14.1", :require => false
|
||||
# For running UI tests
|
||||
gem "capybara"
|
||||
gem "selenium-webdriver", "~> 2.53.4"
|
||||
# For running system tests
|
||||
gem 'puma', '~> 3.7'
|
||||
gem "capybara", '~> 2.13'
|
||||
gem "selenium-webdriver"
|
||||
end
|
||||
|
||||
local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
|
||||
|
||||
@@ -70,4 +70,4 @@ You need to have ChromeDriver installed and available in your PATH:
|
||||
https://sites.google.com/a/chromium.org/chromedriver/
|
||||
|
||||
Capybara tests can be run with:
|
||||
`rake test:ui`
|
||||
`rails test:system`
|
||||
|
||||
78
test/application_system_test_case.rb
Normal file
78
test/application_system_test_case.rb
Normal file
@@ -0,0 +1,78 @@
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2017 Jean-Philippe Lang
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.expand_path('../test_helper', __FILE__)
|
||||
|
||||
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
|
||||
DOWNLOADS_PATH = File.expand_path(File.join(Rails.root, 'tmp', 'downloads'))
|
||||
|
||||
driven_by :selenium, using: :chrome, screen_size: [1024, 900], options: {
|
||||
desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome(
|
||||
'chromeOptions' => {
|
||||
'prefs' => {
|
||||
'download.default_directory' => DOWNLOADS_PATH,
|
||||
'download.prompt_for_download' => false,
|
||||
'plugins.plugins_disabled' => ["Chrome PDF Viewer"]
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
setup do
|
||||
clear_downloaded_files
|
||||
Setting.delete_all
|
||||
Setting.clear_cache
|
||||
end
|
||||
|
||||
teardown do
|
||||
Setting.delete_all
|
||||
Setting.clear_cache
|
||||
end
|
||||
|
||||
# Should not depend on locale since Redmine displays login page
|
||||
# using default browser locale which depend on system locale for "real" browsers drivers
|
||||
def log_user(login, password)
|
||||
visit '/my/page'
|
||||
assert_equal '/login', current_path
|
||||
within('#login-form form') do
|
||||
fill_in 'username', :with => login
|
||||
fill_in 'password', :with => password
|
||||
find('input[name=login]').click
|
||||
end
|
||||
assert_equal '/my/page', current_path
|
||||
end
|
||||
|
||||
def clear_downloaded_files
|
||||
FileUtils.rm downloaded_files
|
||||
end
|
||||
|
||||
def downloaded_files
|
||||
Dir.glob("#{DOWNLOADS_PATH}/*").reject {|f| f=~/crdownload$/}
|
||||
end
|
||||
|
||||
# Returns the path of the download file
|
||||
def downloaded_file
|
||||
Timeout.timeout(5) do
|
||||
while downloaded_files.empty?
|
||||
sleep 0.2
|
||||
end
|
||||
end
|
||||
downloaded_files.first
|
||||
end
|
||||
end
|
||||
|
||||
FileUtils.mkdir_p ApplicationSystemTestCase::DOWNLOADS_PATH
|
||||
@@ -1,109 +0,0 @@
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2017 Jean-Philippe Lang
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
require 'capybara/rails'
|
||||
require 'fileutils'
|
||||
require 'timeout'
|
||||
|
||||
module Redmine
|
||||
module UiTest
|
||||
module Downloads
|
||||
DOWNLOADS_PATH = File.expand_path(File.join(Rails.root, 'tmp', 'downloads'))
|
||||
|
||||
def clear_downloaded_files
|
||||
FileUtils.rm downloaded_files
|
||||
end
|
||||
|
||||
def downloaded_files
|
||||
Dir.glob("#{DOWNLOADS_PATH}/*").reject {|f| f=~/crdownload$/}
|
||||
end
|
||||
|
||||
def downloaded_file
|
||||
Timeout.timeout(5) do
|
||||
while downloaded_files.empty?
|
||||
sleep 0.2
|
||||
end
|
||||
end
|
||||
downloaded_files.first
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
FileUtils.mkdir_p Redmine::UiTest::Downloads::DOWNLOADS_PATH
|
||||
|
||||
Capybara.register_driver :chrome do |app|
|
||||
Capybara::Selenium::Driver.new(app,
|
||||
:browser => :chrome,
|
||||
:desired_capabilities => Selenium::WebDriver::Remote::Capabilities.chrome(
|
||||
'chromeOptions' => {
|
||||
'args' => [ "--window-size=1024,900" ],
|
||||
'prefs' => {
|
||||
'download.default_directory' => Redmine::UiTest::Downloads::DOWNLOADS_PATH,
|
||||
'download.prompt_for_download' => false,
|
||||
'plugins.plugins_disabled' => ["Chrome PDF Viewer"]
|
||||
}
|
||||
}
|
||||
)
|
||||
)
|
||||
end
|
||||
Capybara.default_driver = :chrome
|
||||
|
||||
# default: 2
|
||||
Capybara.default_wait_time = 2
|
||||
|
||||
module Redmine
|
||||
module UiTest
|
||||
# Base class for UI tests
|
||||
class Base < ActionDispatch::IntegrationTest
|
||||
include Capybara::DSL
|
||||
include Redmine::UiTest::Downloads
|
||||
|
||||
# Stop ActiveRecord from wrapping tests in transactions
|
||||
# Transactional fixtures do not work with Selenium tests, because Capybara
|
||||
# uses a separate server thread, which the transactions would be hidden
|
||||
self.use_transactional_tests = false
|
||||
|
||||
# Should not depend on locale since Redmine displays login page
|
||||
# using default browser locale which depend on system locale for "real" browsers drivers
|
||||
def log_user(login, password)
|
||||
visit '/my/page'
|
||||
assert_equal '/login', current_path
|
||||
within('#login-form form') do
|
||||
fill_in 'username', :with => login
|
||||
fill_in 'password', :with => password
|
||||
find('input[name=login]').click
|
||||
end
|
||||
assert_equal '/my/page', current_path
|
||||
end
|
||||
|
||||
setup do
|
||||
clear_downloaded_files
|
||||
Setting.delete_all
|
||||
Setting.clear_cache
|
||||
end
|
||||
|
||||
teardown do
|
||||
Capybara.reset_sessions! # Forget the (simulated) browser state
|
||||
Capybara.use_default_driver # Revert Capybara.current_driver to Capybara.default_driver
|
||||
Setting.delete_all
|
||||
Setting.clear_cache
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -15,9 +15,9 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.expand_path('../base', __FILE__)
|
||||
require File.expand_path('../../application_system_test_case', __FILE__)
|
||||
|
||||
class Redmine::UiTest::IssuesTest < Redmine::UiTest::Base
|
||||
class IssuesTest < ApplicationSystemTestCase
|
||||
fixtures :projects, :users, :email_addresses, :roles, :members, :member_roles,
|
||||
:trackers, :projects_trackers, :enabled_modules, :issue_statuses, :issues,
|
||||
:enumerations, :custom_fields, :custom_values, :custom_fields_trackers,
|
||||
@@ -15,9 +15,9 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.expand_path('../base', __FILE__)
|
||||
require File.expand_path('../../application_system_test_case', __FILE__)
|
||||
|
||||
class Redmine::UiTest::MyPageTest < Redmine::UiTest::Base
|
||||
class MyPageTest < ApplicationSystemTestCase
|
||||
fixtures :projects, :users, :email_addresses, :roles, :members, :member_roles,
|
||||
:trackers, :projects_trackers, :enabled_modules, :issue_statuses, :issues,
|
||||
:enumerations, :custom_fields, :custom_values, :custom_fields_trackers,
|
||||
@@ -17,9 +17,9 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.expand_path('../base', __FILE__)
|
||||
require File.expand_path('../../application_system_test_case', __FILE__)
|
||||
|
||||
class Redmine::UiTest::QuickJumpTest < Redmine::UiTest::Base
|
||||
class QuickJumpTest < ApplicationSystemTestCase
|
||||
fixtures :projects, :users, :email_addresses, :roles, :members, :member_roles,
|
||||
:trackers, :projects_trackers, :enabled_modules, :issue_statuses, :issues,
|
||||
:enumerations, :custom_fields, :custom_values, :custom_fields_trackers,
|
||||
@@ -15,9 +15,9 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.expand_path('../base', __FILE__)
|
||||
require File.expand_path('../../application_system_test_case', __FILE__)
|
||||
|
||||
class Redmine::UiTest::SudoModeTest < Redmine::UiTest::Base
|
||||
class SudoModeTest < ApplicationSystemTestCase
|
||||
fixtures :users, :email_addresses
|
||||
|
||||
def setup
|
||||
@@ -17,9 +17,11 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.expand_path('../base', __FILE__)
|
||||
require File.expand_path('../../application_system_test_case', __FILE__)
|
||||
|
||||
class Redmine::UiTest::TimelogTest < Redmine::UiTest::Base
|
||||
Capybara.default_max_wait_time = 2
|
||||
|
||||
class TimelogTest < ApplicationSystemTestCase
|
||||
fixtures :projects, :users, :email_addresses, :roles, :members, :member_roles,
|
||||
:trackers, :projects_trackers, :enabled_modules, :issue_statuses, :issues,
|
||||
:enumerations, :custom_fields, :custom_values, :custom_fields_trackers,
|
||||
@@ -85,10 +87,10 @@ class Redmine::UiTest::TimelogTest < Redmine::UiTest::Base
|
||||
visit '/settings?tab=timelog'
|
||||
# Remove a column
|
||||
select 'Comment', :from => 'Selected Columns'
|
||||
click_on "â†"
|
||||
click_on "←"
|
||||
# Add a column
|
||||
select 'Tracker', :from => 'Available Columns'
|
||||
click_on "→"
|
||||
click_on "→"
|
||||
click_on 'Save'
|
||||
|
||||
# Display the list with updated settings
|
||||
Reference in New Issue
Block a user