git-svn-id: http://svn.redmine.org/redmine/trunk@16864 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/4.0.0
gem "rails-dom-testing" | gem "rails-dom-testing" | ||||
gem "mocha" | gem "mocha" | ||||
gem "simplecov", "~> 0.14.1", :require => false | 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 | end | ||||
local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local") | local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local") |
https://sites.google.com/a/chromium.org/chromedriver/ | https://sites.google.com/a/chromium.org/chromedriver/ | ||||
Capybara tests can be run with: | Capybara tests can be run with: | ||||
`rake test:ui` | |||||
`rails test:system` |
# 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 |
# 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 |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # 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, | fixtures :projects, :users, :email_addresses, :roles, :members, :member_roles, | ||||
:trackers, :projects_trackers, :enabled_modules, :issue_statuses, :issues, | :trackers, :projects_trackers, :enabled_modules, :issue_statuses, :issues, | ||||
:enumerations, :custom_fields, :custom_values, :custom_fields_trackers, | :enumerations, :custom_fields, :custom_values, :custom_fields_trackers, |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # 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, | fixtures :projects, :users, :email_addresses, :roles, :members, :member_roles, | ||||
:trackers, :projects_trackers, :enabled_modules, :issue_statuses, :issues, | :trackers, :projects_trackers, :enabled_modules, :issue_statuses, :issues, | ||||
:enumerations, :custom_fields, :custom_values, :custom_fields_trackers, | :enumerations, :custom_fields, :custom_values, :custom_fields_trackers, |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # 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, | fixtures :projects, :users, :email_addresses, :roles, :members, :member_roles, | ||||
:trackers, :projects_trackers, :enabled_modules, :issue_statuses, :issues, | :trackers, :projects_trackers, :enabled_modules, :issue_statuses, :issues, | ||||
:enumerations, :custom_fields, :custom_values, :custom_fields_trackers, | :enumerations, :custom_fields, :custom_values, :custom_fields_trackers, |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # 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 | fixtures :users, :email_addresses | ||||
def setup | def setup |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # 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, | fixtures :projects, :users, :email_addresses, :roles, :members, :member_roles, | ||||
:trackers, :projects_trackers, :enabled_modules, :issue_statuses, :issues, | :trackers, :projects_trackers, :enabled_modules, :issue_statuses, :issues, | ||||
:enumerations, :custom_fields, :custom_values, :custom_fields_trackers, | :enumerations, :custom_fields, :custom_values, :custom_fields_trackers, | ||||
visit '/settings?tab=timelog' | visit '/settings?tab=timelog' | ||||
# Remove a column | # Remove a column | ||||
select 'Comment', :from => 'Selected Columns' | select 'Comment', :from => 'Selected Columns' | ||||
click_on "â†" | |||||
click_on "←" | |||||
# Add a column | # Add a column | ||||
select 'Tracker', :from => 'Available Columns' | select 'Tracker', :from => 'Available Columns' | ||||
click_on "→" | |||||
click_on "→" | |||||
click_on 'Save' | click_on 'Save' | ||||
# Display the list with updated settings | # Display the list with updated settings |