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()