mirror of
https://github.com/discourse/discourse.git
synced 2025-07-31 05:03:38 +00:00
DEV: Use Capybara::Session#using_wait_time
instead (#32116)
When `Capybara.threadsafe` has been set to `true` as in our case, we have to use `Capybara::Session#using_wait_time` instead of `Capybara.using_wait_time`. The latter sets `default_max_wait_time` on `Capybara.default_max_wait_time` while the former sets `default_max_wait_time` on the session.
This commit is contained in:
parent
72c837bc98
commit
0f3d61b463
@ -52,8 +52,8 @@ describe "Changing email", type: :system do
|
||||
end
|
||||
|
||||
it "works when user has totp 2fa", dump_threads_on_failure: true do
|
||||
# Tests is flaky so trying with a longer wait time as a workaround
|
||||
Capybara.using_wait_time(Capybara.default_max_wait_time * 2) do
|
||||
# Test is flaky so trying with a longer wait time as a workaround
|
||||
using_wait_time(Capybara.default_max_wait_time * 2) do
|
||||
SiteSetting.hide_email_address_taken = false
|
||||
|
||||
second_factor = Fabricate(:user_second_factor_totp, user: user)
|
||||
@ -70,8 +70,8 @@ describe "Changing email", type: :system do
|
||||
end
|
||||
|
||||
it "works when user has webauthn 2fa" do
|
||||
# Tests is flaky so trying with a longer wait time as a workaround
|
||||
Capybara.using_wait_time(Capybara.default_max_wait_time * 2) do
|
||||
# Test is flaky so trying with a longer wait time as a workaround
|
||||
using_wait_time(Capybara.default_max_wait_time * 2) do
|
||||
begin
|
||||
# enforced 2FA flow needs a user created > 5 minutes ago
|
||||
user.created_at = 6.minutes.ago
|
||||
|
@ -42,11 +42,14 @@ shared_examples "forgot password scenarios" do
|
||||
|
||||
context "when user does not have any multi-factor authentication configured" do
|
||||
it "should allow a user to reset their password" do
|
||||
visit_reset_password_link
|
||||
# Test is flaky so trying with a longer wait time as a workaround
|
||||
using_wait_time(Capybara.default_max_wait_time * 2) do
|
||||
visit_reset_password_link
|
||||
|
||||
user_reset_password_page.fill_in_new_password("newsuperpassword").submit_new_password
|
||||
user_reset_password_page.fill_in_new_password("newsuperpassword").submit_new_password
|
||||
|
||||
expect(user_reset_password_page).to have_logged_in_user
|
||||
expect(user_reset_password_page).to have_logged_in_user
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -55,42 +58,46 @@ shared_examples "forgot password scenarios" do
|
||||
fab!(:user_second_factor_totp) { Fabricate(:user_second_factor_totp, user:) }
|
||||
|
||||
it "should allow a user to reset password with TOTP" do
|
||||
visit_reset_password_link
|
||||
# Test is flaky so trying with a longer wait time as a workaround
|
||||
using_wait_time(Capybara.default_max_wait_time * 2) do
|
||||
visit_reset_password_link
|
||||
|
||||
expect(user_reset_password_page).to have_no_toggle_button_to_second_factor_form
|
||||
expect(user_reset_password_page).to have_no_toggle_button_to_second_factor_form
|
||||
|
||||
user_reset_password_page
|
||||
.fill_in_totp(ROTP::TOTP.new(user_second_factor_totp.data).now)
|
||||
.submit_totp
|
||||
.fill_in_new_password("newsuperpassword")
|
||||
.submit_new_password
|
||||
user_reset_password_page
|
||||
.fill_in_totp(ROTP::TOTP.new(user_second_factor_totp.data).now)
|
||||
.submit_totp
|
||||
.fill_in_new_password("newsuperpassword")
|
||||
.submit_new_password
|
||||
|
||||
expect(user_reset_password_page).to have_logged_in_user
|
||||
expect(user_reset_password_page).to have_logged_in_user
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "when user only has security key configured" do
|
||||
before do
|
||||
@authenticator =
|
||||
page.driver.browser.add_virtual_authenticator(
|
||||
Selenium::WebDriver::VirtualAuthenticatorOptions.new,
|
||||
)
|
||||
|
||||
create_user_security_key(user)
|
||||
end
|
||||
|
||||
after { @authenticator.remove! }
|
||||
|
||||
it "should allow a user to reset password with a security key" do
|
||||
visit_reset_password_link
|
||||
# Test is flaky so trying with a longer wait time as a workaround
|
||||
using_wait_time(Capybara.default_max_wait_time * 2) do
|
||||
authenticator =
|
||||
page.driver.browser.add_virtual_authenticator(
|
||||
Selenium::WebDriver::VirtualAuthenticatorOptions.new,
|
||||
)
|
||||
|
||||
expect(user_reset_password_page).to have_no_toggle_button_to_second_factor_form
|
||||
create_user_security_key(user)
|
||||
|
||||
user_reset_password_page.submit_security_key
|
||||
visit_reset_password_link
|
||||
|
||||
user_reset_password_page.fill_in_new_password("newsuperpassword").submit_new_password
|
||||
expect(user_reset_password_page).to have_no_toggle_button_to_second_factor_form
|
||||
|
||||
expect(user_reset_password_page).to have_logged_in_user
|
||||
user_reset_password_page.submit_security_key
|
||||
|
||||
user_reset_password_page.fill_in_new_password("newsuperpassword").submit_new_password
|
||||
|
||||
expect(user_reset_password_page).to have_logged_in_user
|
||||
ensure
|
||||
authenticator.remove!
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -99,47 +106,51 @@ shared_examples "forgot password scenarios" do
|
||||
fab!(:user_second_factor_totp) { Fabricate(:user_second_factor_totp, user:) }
|
||||
|
||||
it "should allow a user to reset password with backup code" do
|
||||
visit_reset_password_link
|
||||
# Test is flaky so trying with a longer wait time as a workaround
|
||||
using_wait_time(Capybara.default_max_wait_time * 2) do
|
||||
visit_reset_password_link
|
||||
|
||||
user_reset_password_page
|
||||
.use_backup_codes
|
||||
.fill_in_backup_code("iAmValidBackupCode")
|
||||
.submit_backup_code
|
||||
.fill_in_new_password("newsuperpassword")
|
||||
.submit_new_password
|
||||
user_reset_password_page
|
||||
.use_backup_codes
|
||||
.fill_in_backup_code("iAmValidBackupCode")
|
||||
.submit_backup_code
|
||||
.fill_in_new_password("newsuperpassword")
|
||||
.submit_new_password
|
||||
|
||||
expect(user_reset_password_page).to have_logged_in_user
|
||||
expect(user_reset_password_page).to have_logged_in_user
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "when user has security key and backup codes configured" do
|
||||
fab!(:user_second_factor_backup) { Fabricate(:user_second_factor_backup, user:) }
|
||||
|
||||
before do
|
||||
@authenticator =
|
||||
page.driver.browser.add_virtual_authenticator(
|
||||
Selenium::WebDriver::VirtualAuthenticatorOptions.new,
|
||||
)
|
||||
|
||||
create_user_security_key(user)
|
||||
end
|
||||
|
||||
after { @authenticator.remove! }
|
||||
|
||||
it "should allow a user to reset password with backup code instead of security key" do
|
||||
visit_reset_password_link
|
||||
# Test is flaky so trying with a longer wait time as a workaround
|
||||
using_wait_time(Capybara.default_max_wait_time * 2) do
|
||||
authenticator =
|
||||
page.driver.browser.add_virtual_authenticator(
|
||||
Selenium::WebDriver::VirtualAuthenticatorOptions.new,
|
||||
)
|
||||
|
||||
user_reset_password_page.try_another_way
|
||||
create_user_security_key(user)
|
||||
|
||||
expect(user_reset_password_page).to have_no_toggle_button_in_second_factor_form
|
||||
visit_reset_password_link
|
||||
|
||||
user_reset_password_page
|
||||
.fill_in_backup_code("iAmValidBackupCode")
|
||||
.submit_backup_code
|
||||
.fill_in_new_password("newsuperpassword")
|
||||
.submit_new_password
|
||||
user_reset_password_page.try_another_way
|
||||
|
||||
expect(user_reset_password_page).to have_logged_in_user
|
||||
expect(user_reset_password_page).to have_no_toggle_button_in_second_factor_form
|
||||
|
||||
user_reset_password_page
|
||||
.fill_in_backup_code("iAmValidBackupCode")
|
||||
.submit_backup_code
|
||||
.fill_in_new_password("newsuperpassword")
|
||||
.submit_new_password
|
||||
|
||||
expect(user_reset_password_page).to have_logged_in_user
|
||||
ensure
|
||||
authenticator.remove!
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -147,71 +158,70 @@ shared_examples "forgot password scenarios" do
|
||||
fab!(:user_second_factor_totp) { Fabricate(:user_second_factor_totp, user:) }
|
||||
fab!(:user_second_factor_backup) { Fabricate(:user_second_factor_backup, user:) }
|
||||
|
||||
before do
|
||||
@authenticator =
|
||||
page.driver.browser.add_virtual_authenticator(
|
||||
Selenium::WebDriver::VirtualAuthenticatorOptions.new,
|
||||
)
|
||||
|
||||
create_user_security_key(user)
|
||||
end
|
||||
|
||||
after { @authenticator.remove! }
|
||||
|
||||
it "should allow a user to toggle from security key to TOTP and between TOTP and backup codes" do
|
||||
visit_reset_password_link
|
||||
# Test is flaky so trying with a longer wait time as a workaround
|
||||
using_wait_time(Capybara.default_max_wait_time * 2) do
|
||||
authenticator =
|
||||
page.driver.browser.add_virtual_authenticator(
|
||||
Selenium::WebDriver::VirtualAuthenticatorOptions.new,
|
||||
)
|
||||
|
||||
user_reset_password_page.try_another_way
|
||||
create_user_security_key(user)
|
||||
|
||||
expect(user_reset_password_page).to have_totp_description
|
||||
visit_reset_password_link
|
||||
|
||||
user_reset_password_page.use_backup_codes
|
||||
user_reset_password_page.try_another_way
|
||||
|
||||
expect(user_reset_password_page).to have_backup_codes_description
|
||||
expect(user_reset_password_page).to have_totp_description
|
||||
|
||||
user_reset_password_page.use_totp
|
||||
user_reset_password_page.use_backup_codes
|
||||
|
||||
expect(user_reset_password_page).to have_totp_description
|
||||
expect(user_reset_password_page).to have_backup_codes_description
|
||||
|
||||
user_reset_password_page.use_totp
|
||||
|
||||
expect(user_reset_password_page).to have_totp_description
|
||||
ensure
|
||||
authenticator.remove!
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "when user has TOTP and security key configured but no backup codes" do
|
||||
fab!(:user_second_factor_totp) { Fabricate(:user_second_factor_totp, user:) }
|
||||
|
||||
before do
|
||||
@authenticator =
|
||||
page.driver.browser.add_virtual_authenticator(
|
||||
Selenium::WebDriver::VirtualAuthenticatorOptions.new,
|
||||
)
|
||||
|
||||
create_user_security_key(user)
|
||||
end
|
||||
|
||||
after { @authenticator.remove! }
|
||||
|
||||
it "should allow a user to reset password with TOTP instead of security key" do
|
||||
visit_reset_password_link
|
||||
# Test is flaky so trying with a longer wait time as a workaround
|
||||
using_wait_time(Capybara.default_max_wait_time * 2) do
|
||||
authenticator =
|
||||
page.driver.browser.add_virtual_authenticator(
|
||||
Selenium::WebDriver::VirtualAuthenticatorOptions.new,
|
||||
)
|
||||
|
||||
user_reset_password_page.try_another_way
|
||||
create_user_security_key(user)
|
||||
|
||||
expect(user_reset_password_page).to have_no_toggle_button_in_second_factor_form
|
||||
visit_reset_password_link
|
||||
|
||||
user_reset_password_page
|
||||
.fill_in_totp(ROTP::TOTP.new(user_second_factor_totp.data).now)
|
||||
.submit_totp
|
||||
.fill_in_new_password("newsuperpassword")
|
||||
.submit_new_password
|
||||
user_reset_password_page.try_another_way
|
||||
|
||||
expect(user_reset_password_page).to have_logged_in_user
|
||||
expect(user_reset_password_page).to have_no_toggle_button_in_second_factor_form
|
||||
|
||||
user_reset_password_page
|
||||
.fill_in_totp(ROTP::TOTP.new(user_second_factor_totp.data).now)
|
||||
.submit_totp
|
||||
.fill_in_new_password("newsuperpassword")
|
||||
.submit_new_password
|
||||
|
||||
expect(user_reset_password_page).to have_logged_in_user
|
||||
ensure
|
||||
authenticator.remove!
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "User resetting password", type: :system, dump_threads_on_failure: true do
|
||||
# Tests are flaky so trying with a longer wait time as a workaround
|
||||
around { |example| Capybara.using_wait_time(Capybara.default_max_wait_time * 2) { example.run } }
|
||||
|
||||
describe "when desktop" do
|
||||
include_examples "forgot password scenarios"
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user