From 530eef96033bf1474157bbc9c7739ff8dc7e2ae4 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 23 Jul 2017 12:35:32 +0000 Subject: [PATCH] Converts UI tests to system tests (#23630). git-svn-id: http://svn.redmine.org/redmine/trunk@16864 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- Gemfile | 7 +- doc/RUNNING_TESTS | 2 +- test/application_system_test_case.rb | 78 +++++++++++++ test/system/base.rb | 109 ------------------ .../{issues_test_ui.rb => issues_test.rb} | 4 +- .../{my_page_test_ui.rb => my_page_test.rb} | 4 +- ...ick_jump_test_ui.rb => quick_jump_test.rb} | 4 +- ...sudo_mode_test_ui.rb => sudo_mode_test.rb} | 4 +- .../{timelog_test_ui.rb => timelog_test.rb} | 10 +- 9 files changed, 97 insertions(+), 125 deletions(-) create mode 100644 test/application_system_test_case.rb delete mode 100644 test/system/base.rb rename test/system/{issues_test_ui.rb => issues_test.rb} (98%) rename test/system/{my_page_test_ui.rb => my_page_test.rb} (94%) rename test/system/{quick_jump_test_ui.rb => quick_jump_test.rb} (94%) rename test/system/{sudo_mode_test_ui.rb => sudo_mode_test.rb} (94%) rename test/system/{timelog_test_ui.rb => timelog_test.rb} (94%) diff --git a/Gemfile b/Gemfile index f4715148db6..6b40111f58d 100644 --- a/Gemfile +++ b/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") diff --git a/doc/RUNNING_TESTS b/doc/RUNNING_TESTS index 91a534aa0a7..edd39be4eb1 100644 --- a/doc/RUNNING_TESTS +++ b/doc/RUNNING_TESTS @@ -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` diff --git a/test/application_system_test_case.rb b/test/application_system_test_case.rb new file mode 100644 index 00000000000..63b17f63920 --- /dev/null +++ b/test/application_system_test_case.rb @@ -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 diff --git a/test/system/base.rb b/test/system/base.rb deleted file mode 100644 index d4ecff98563..00000000000 --- a/test/system/base.rb +++ /dev/null @@ -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 diff --git a/test/system/issues_test_ui.rb b/test/system/issues_test.rb similarity index 98% rename from test/system/issues_test_ui.rb rename to test/system/issues_test.rb index 39fa8e7b696..c174ff7a31e 100644 --- a/test/system/issues_test_ui.rb +++ b/test/system/issues_test.rb @@ -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, diff --git a/test/system/my_page_test_ui.rb b/test/system/my_page_test.rb similarity index 94% rename from test/system/my_page_test_ui.rb rename to test/system/my_page_test.rb index 588f851c30b..ab3f943b13c 100644 --- a/test/system/my_page_test_ui.rb +++ b/test/system/my_page_test.rb @@ -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, diff --git a/test/system/quick_jump_test_ui.rb b/test/system/quick_jump_test.rb similarity index 94% rename from test/system/quick_jump_test_ui.rb rename to test/system/quick_jump_test.rb index 7ac3e727c32..5831faf86ed 100644 --- a/test/system/quick_jump_test_ui.rb +++ b/test/system/quick_jump_test.rb @@ -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, diff --git a/test/system/sudo_mode_test_ui.rb b/test/system/sudo_mode_test.rb similarity index 94% rename from test/system/sudo_mode_test_ui.rb rename to test/system/sudo_mode_test.rb index dd3a45463e8..4d7e11bce8e 100644 --- a/test/system/sudo_mode_test_ui.rb +++ b/test/system/sudo_mode_test.rb @@ -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 diff --git a/test/system/timelog_test_ui.rb b/test/system/timelog_test.rb similarity index 94% rename from test/system/timelog_test_ui.rb rename to test/system/timelog_test.rb index 3341a136b72..e1acd0f51a1 100644 --- a/test/system/timelog_test_ui.rb +++ b/test/system/timelog_test.rb @@ -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 @@ def test_default_query_setting 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