LRR/testWithZayid/SeleniumZayid/test_recover_password_with_...

76 lines
2.9 KiB
Python

from helper import login, logout
import time
import pytest
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# test case: user can request a password reset link by providing a valid email address
def test_user_can_request_password_reset_link(driver, url: str, restore_database: None):
driver.maximize_window()
# # Navigate to forgot password page
driver.get(f"{url}/index.php")
button = driver.find_element(By.ID, "recover_password_link")
button.click()
# Enter valid email and request reset link
elem = driver.find_element(By.NAME, "email")
elem.send_keys(
"amanaf1994@gmail.com"
) # Ensure this email exists in the test database
button = driver.find_element(By.ID, "recover_password_link_in_recover_password")
button.click()
# Wait for the success message indicating the token is generated and the reset link was sent containing the token
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "email_sent_success_message"))
)
success_message = driver.find_element(By.ID, "email_sent_success_message").text
assert "We've sent a password reset link to your email address." in success_message
driver.quit()
def test_user_can_reset_password(driver, url: str, restore_database: None):
# Assuming a valid token is already generated and stored for the test user, we can't check it in db,
# because we don't want the test to be dependent on the db
token = "12b1f0bc8b7d57449e0df5ad8860e8084a4a5cfaad3e2eb97a4e5d3855ee4f6c"
driver.maximize_window()
driver.get(f"{url}/UpdatePassword.php?token={token}")
# Check if the password reset form is displayed
form = driver.find_element(By.ID, "update_password_form")
assert form is not None
# Enter new password
new_password = "NewPassword123!" # New password
elem = driver.find_element(By.NAME, "password")
elem.send_keys(new_password)
# Confirm the new password
elem = driver.find_element(By.NAME, "confirmpassword")
elem.send_keys(new_password)
# Submit the form to reset the password
button = driver.find_element(By.ID, "update_password_btn")
button.click()
# Wait for the success message indicating the password has been reset
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "password_update_success_message"))
)
success_message = driver.find_element(By.ID, "password_update_success_message").text
assert "Your password has been reset." in success_message
# # Now, try logging in with the new password
login(driver, url, "amanaf1994@gmail.com", new_password)
# Verify that the user is logged in
elems = driver.find_elements(By.CLASS_NAME, "nav-link")
assert (
"Student ID:" in elems[0].text
) # Ensure the Student ID appears in the navigation
driver.quit()