2021-10-26 11:44:53 +02:00
|
|
|
module SystemHelpers
|
2018-11-06 11:22:17 +01:00
|
|
|
include ActiveJob::TestHelper
|
|
|
|
|
2015-08-10 11:05:06 +02:00
|
|
|
def login_admin
|
2015-08-13 15:55:19 +02:00
|
|
|
user = create :user
|
2015-08-10 11:05:06 +02:00
|
|
|
login_as user, scope: :user
|
|
|
|
user
|
|
|
|
end
|
|
|
|
|
2019-08-06 11:02:54 +02:00
|
|
|
def login_instructeur
|
|
|
|
instructeur = create(:instructeur)
|
|
|
|
login_as instructeur, scope: :instructeur
|
2015-09-22 10:15:12 +02:00
|
|
|
end
|
|
|
|
|
2018-10-03 11:11:02 +02:00
|
|
|
def sign_in_with(email, password, sign_in_by_link = false)
|
2018-11-06 17:06:45 +01:00
|
|
|
fill_in :user_email, with: email
|
|
|
|
fill_in :user_password, with: password
|
2018-10-03 11:11:02 +02:00
|
|
|
|
2019-07-31 15:04:49 +02:00
|
|
|
if sign_in_by_link
|
2021-11-25 15:38:01 +01:00
|
|
|
User.find_by(email: email)&.instructeur&.update!(bypass_email_login_token: false)
|
2019-07-31 15:04:49 +02:00
|
|
|
end
|
|
|
|
|
2018-10-03 11:11:02 +02:00
|
|
|
perform_enqueued_jobs do
|
|
|
|
click_on 'Se connecter'
|
|
|
|
end
|
|
|
|
|
|
|
|
if sign_in_by_link
|
|
|
|
mail = ActionMailer::Base.deliveries.last
|
2018-12-26 17:35:28 +01:00
|
|
|
message = mail.html_part.body.raw_source
|
2021-02-16 15:05:04 +01:00
|
|
|
instructeur_id = message[/".+\/connexion-par-jeton\/(.+)\?jeton=(.*)"/, 1]
|
|
|
|
jeton = message[/".+\/connexion-par-jeton\/(.+)\?jeton=(.*)"/, 2]
|
2018-10-03 11:11:02 +02:00
|
|
|
|
2019-08-06 11:02:54 +02:00
|
|
|
visit sign_in_by_link_path(instructeur_id, jeton: jeton)
|
2018-10-03 11:11:02 +02:00
|
|
|
end
|
2018-11-06 17:06:45 +01:00
|
|
|
end
|
2018-11-06 11:22:17 +01:00
|
|
|
|
2020-07-21 16:49:26 +02:00
|
|
|
def sign_up_with(email, password = 'my-s3cure-p4ssword')
|
2018-11-06 11:22:17 +01:00
|
|
|
fill_in :user_email, with: email
|
|
|
|
fill_in :user_password, with: password
|
|
|
|
|
|
|
|
perform_enqueued_jobs do
|
|
|
|
click_button 'Créer un compte'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2020-02-24 11:55:29 +01:00
|
|
|
def click_confirmation_link_for(email, in_another_browser: false)
|
2018-11-06 11:22:17 +01:00
|
|
|
confirmation_email = open_email(email)
|
2020-02-24 11:55:29 +01:00
|
|
|
confirmation_link = confirmation_email.body.match(/href="[^"]*(\/users\/confirmation[^"]*)"/)[1]
|
2018-11-06 11:22:17 +01:00
|
|
|
|
2020-02-24 11:55:29 +01:00
|
|
|
if in_another_browser
|
|
|
|
# Simulate the user opening the link in another browser, thus loosing the session cookie
|
|
|
|
Capybara.reset_session!
|
|
|
|
end
|
|
|
|
|
|
|
|
visit confirmation_link
|
2018-11-06 11:22:17 +01:00
|
|
|
end
|
2019-01-14 16:26:53 +01:00
|
|
|
|
2020-02-11 18:17:09 +01:00
|
|
|
def click_procedure_sign_in_link_for(email)
|
|
|
|
confirmation_email = open_email(email)
|
|
|
|
procedure_sign_in_link = confirmation_email.body.match(/href="([^"]*\/commencer\/[^"]*)"/)[1]
|
|
|
|
|
|
|
|
visit procedure_sign_in_link
|
|
|
|
end
|
|
|
|
|
2019-10-21 11:17:23 +02:00
|
|
|
def click_reset_password_link_for(email)
|
|
|
|
reset_password_email = open_email(email)
|
2021-09-02 21:21:10 +02:00
|
|
|
reset_password_url = reset_password_email.body.match(/http[s]?:\/\/[^\/]+(\/[^\s]+reset_password_token=[^\s"]+)/)[1]
|
2019-10-21 11:17:23 +02:00
|
|
|
|
2021-09-02 21:21:10 +02:00
|
|
|
visit reset_password_url
|
2019-10-21 11:17:23 +02:00
|
|
|
end
|
|
|
|
|
2019-11-27 10:19:55 +01:00
|
|
|
# Add a new type de champ in the procedure editor
|
|
|
|
def add_champ(options = {})
|
2021-02-04 12:38:11 +01:00
|
|
|
add_champs(**options)
|
2019-11-27 10:19:55 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
# Add several new type de champ in the procedure editor
|
|
|
|
def add_champs(count: 1, remove_flash_message: false)
|
|
|
|
within '.buttons' do
|
|
|
|
count.times { click_on 'Ajouter un champ' }
|
|
|
|
end
|
|
|
|
|
|
|
|
if remove_flash_message
|
|
|
|
expect(page).to have_button('Ajouter un champ', disabled: false)
|
|
|
|
expect(page).to have_content('Formulaire enregistré')
|
|
|
|
execute_script("document.querySelector('#flash_message').remove();")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-02-06 18:19:27 +01:00
|
|
|
def blur
|
|
|
|
page.find('body').click
|
|
|
|
end
|
2019-06-04 15:06:59 +02:00
|
|
|
|
|
|
|
def pause
|
|
|
|
$stderr.write 'Spec paused. Press enter to continue:'
|
|
|
|
$stdin.gets
|
|
|
|
end
|
2019-06-04 16:17:21 +02:00
|
|
|
|
|
|
|
def wait_until
|
|
|
|
Timeout.timeout(Capybara.default_max_wait_time) do
|
|
|
|
sleep(0.1) until (value = yield)
|
|
|
|
value
|
|
|
|
end
|
|
|
|
end
|
2019-11-26 16:30:45 +01:00
|
|
|
|
2021-04-23 13:45:04 +02:00
|
|
|
def select_combobox(champ, fill_with, value)
|
2021-10-26 16:21:47 +02:00
|
|
|
fill_in champ, with: fill_with
|
2021-04-23 13:45:04 +02:00
|
|
|
selector = "li[data-option-value=\"#{value}\"]"
|
|
|
|
find(selector).click
|
|
|
|
expect(page).to have_css(selector)
|
2021-10-26 16:21:47 +02:00
|
|
|
expect(page).to have_css("[type=\"hidden\"][value=\"#{value}\"]")
|
2021-04-23 13:45:04 +02:00
|
|
|
end
|
2021-02-11 15:27:39 +01:00
|
|
|
|
2021-04-23 13:45:04 +02:00
|
|
|
def select_multi_combobox(champ, fill_with, value)
|
|
|
|
input = find("input[aria-label=\"#{champ}\"")
|
|
|
|
input.click
|
|
|
|
input.fill_in with: fill_with
|
|
|
|
selector = "li[data-option-value=\"#{value}\"]"
|
|
|
|
find(selector).click
|
|
|
|
check_selected_value(champ, value)
|
2021-02-11 15:27:39 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def check_selected_values(champ, values)
|
2021-04-23 13:45:04 +02:00
|
|
|
combobox = find(:xpath, "//input[@aria-label=\"#{champ}\"]/ancestor::div[@data-react-class='ComboMultipleDropdownList']")
|
|
|
|
hidden_field_id = JSON.parse(combobox["data-react-props"])["hiddenFieldId"]
|
|
|
|
hidden_field = find("input[data-uuid=\"#{hidden_field_id}\"]")
|
|
|
|
hidden_field_values = JSON.parse(hidden_field.value)
|
|
|
|
expect(values.sort).to eq(hidden_field_values.sort)
|
|
|
|
end
|
|
|
|
|
|
|
|
def check_selected_value(champ, value)
|
|
|
|
combobox = find(:xpath, "//input[@aria-label=\"#{champ}\"]/ancestor::div[@data-react-class='ComboMultipleDropdownList']")
|
|
|
|
hidden_field_id = JSON.parse(combobox["data-react-props"])["hiddenFieldId"]
|
|
|
|
hidden_field = find("input[data-uuid=\"#{hidden_field_id}\"]")
|
|
|
|
hidden_field_values = JSON.parse(hidden_field.value)
|
|
|
|
expect(hidden_field_values).to include(value)
|
|
|
|
end
|
|
|
|
|
|
|
|
def have_hidden_field(libelle, with:)
|
|
|
|
have_css("##{form_id_for(libelle)}[value=\"#{with}\"]")
|
2021-02-11 15:27:39 +01:00
|
|
|
end
|
|
|
|
|
2021-10-01 12:57:33 +02:00
|
|
|
def log_out
|
|
|
|
click_button(title: 'Mon compte')
|
|
|
|
click_on 'Se déconnecter'
|
|
|
|
|
2021-09-28 15:11:15 +02:00
|
|
|
expect(page).to have_current_path(root_path)
|
|
|
|
end
|
|
|
|
|
2019-11-26 16:30:45 +01:00
|
|
|
# Keep the brower window open after a test success of failure, to
|
|
|
|
# allow inspecting the page or the console.
|
|
|
|
#
|
|
|
|
# Usage:
|
|
|
|
# 1. Disable the 'headless' mode in `spec_helper.rb`
|
|
|
|
# 2. Call `leave_browser_open` at the beginning of your scenario
|
|
|
|
def leave_browser_open
|
|
|
|
Selenium::WebDriver::Chrome::Service.class_eval do
|
|
|
|
def stop
|
|
|
|
STDOUT.puts "#{self.class}#stop is a no-op, because leave_browser_open is enabled"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
Selenium::WebDriver::Driver.class_eval do
|
|
|
|
def quit
|
|
|
|
STDOUT.puts "#{self.class}#quit is a no-op, because leave_browser_open is enabled"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
Capybara::Selenium::Driver.class_eval do
|
|
|
|
def reset!
|
|
|
|
STDOUT.puts "#{self.class}#reset! is a no-op, because leave_browser_open is enabled"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2015-08-10 11:05:06 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
RSpec.configure do |config|
|
2021-10-26 11:44:53 +02:00
|
|
|
config.include SystemHelpers, type: :system
|
2015-08-20 17:30:17 +02:00
|
|
|
end
|