| 
									
										
										
										
											2019-03-21 03:27:53 +00:00
										 |  |  | # frozen_string_literal: true | 
					
						
							| 
									
										
										
										
											2019-03-15 01:32:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-23 12:35:32 +00:00
										 |  |  | # Redmine - project management software | 
					
						
							| 
									
										
										
										
											2019-05-25 07:36:06 +00:00
										 |  |  | # Copyright (C) 2006-2019  Jean-Philippe Lang | 
					
						
							| 
									
										
										
										
											2017-07-23 12:35:32 +00:00
										 |  |  | # | 
					
						
							|  |  |  | # 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 | 
					
						
							| 
									
										
										
										
											2019-09-25 13:14:05 +00:00
										 |  |  |     # https://github.com/SeleniumHQ/selenium/issues/5292 | 
					
						
							|  |  |  |     FileUtils.rm downloaded_files if Redmine::Platform.mswin? | 
					
						
							| 
									
										
										
										
											2017-07-23 12:35:32 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-25 12:31:40 +00:00
										 |  |  |   def downloaded_files(filename='*') | 
					
						
							|  |  |  |     # https://github.com/SeleniumHQ/selenium/issues/5292 | 
					
						
							|  |  |  |     downloaded_path = Redmine::Platform.mswin? ? DOWNLOADS_PATH : "#{ENV['HOME']}/Downloads" | 
					
						
							| 
									
										
										
										
											2019-09-25 17:30:07 +00:00
										 |  |  |     Dir.glob("#{downloaded_path}/#{filename}"). | 
					
						
							|  |  |  |       reject{|f| f=~/\.(tmp|crdownload)$/}.sort_by{|f| File.mtime(f)} | 
					
						
							| 
									
										
										
										
											2017-07-23 12:35:32 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Returns the path of the download file | 
					
						
							| 
									
										
										
										
											2019-09-25 12:31:40 +00:00
										 |  |  |   def downloaded_file(filename='*') | 
					
						
							| 
									
										
										
										
											2019-09-25 17:30:07 +00:00
										 |  |  |     files = [] | 
					
						
							| 
									
										
										
										
											2017-07-23 12:35:32 +00:00
										 |  |  |     Timeout.timeout(5) do | 
					
						
							| 
									
										
										
										
											2019-09-25 17:30:07 +00:00
										 |  |  |       loop do | 
					
						
							|  |  |  |         files = downloaded_files(filename) | 
					
						
							|  |  |  |         break if files.present? | 
					
						
							|  |  |  |         sleep 0.2
 | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2017-07-23 12:35:32 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2019-09-25 17:30:07 +00:00
										 |  |  |     files.last | 
					
						
							| 
									
										
										
										
											2017-07-23 12:35:32 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | FileUtils.mkdir_p ApplicationSystemTestCase::DOWNLOADS_PATH |