76 lines
2.9 KiB
Python
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()
|