129 lines
4.5 KiB
Python
Executable File
129 lines
4.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Test Single Student Flow
|
|
|
|
Quick test script to verify the complete flow works for a single student.
|
|
"""
|
|
import sys
|
|
import time
|
|
from pathlib import Path
|
|
|
|
project_root = Path(__file__).parent.parent
|
|
sys.path.insert(0, str(project_root))
|
|
|
|
from pages.login_page import LoginPage
|
|
from pages.mandatory_reset_page import MandatoryResetPage
|
|
from pages.profile_incomplete_page import ProfileIncompletePage
|
|
from pages.profile_editor_page import ProfileEditorPage
|
|
from utils.driver_manager import DriverManager
|
|
from config.config import BASE_URL, TEST_NEW_PASSWORD
|
|
|
|
|
|
def test_student_flow(cpid, password, headless=False):
|
|
"""
|
|
Test complete flow for a single student
|
|
|
|
Args:
|
|
cpid: Student CPID
|
|
password: Student password
|
|
headless: Run in headless mode
|
|
"""
|
|
driver = None
|
|
try:
|
|
print(f"\n{'='*80}")
|
|
print(f"TESTING STUDENT: {cpid}")
|
|
print(f"{'='*80}\n")
|
|
|
|
# Initialize driver
|
|
driver_manager = DriverManager()
|
|
driver = driver_manager.get_driver(headless=headless)
|
|
|
|
# Step 1: Login
|
|
print("[STEP 1] Logging in...")
|
|
login_page = LoginPage(driver)
|
|
login_page.login(identifier=cpid, password=password)
|
|
time.sleep(2)
|
|
print(f" ✅ Logged in successfully")
|
|
print(f" Current URL: {driver.current_url}")
|
|
|
|
# Step 2: Handle Password Reset
|
|
print("\n[STEP 2] Checking for Password Reset...")
|
|
reset_page = MandatoryResetPage(driver)
|
|
if reset_page.is_modal_present():
|
|
print(" ✅ Password reset modal found")
|
|
print(" Automatically handling password reset...")
|
|
reset_page.reset_password(
|
|
current_password=password,
|
|
new_password=TEST_NEW_PASSWORD,
|
|
confirm_password=TEST_NEW_PASSWORD
|
|
)
|
|
print(" ✅ Password reset completed")
|
|
password = TEST_NEW_PASSWORD # Update for future use
|
|
else:
|
|
print(" ✅ No password reset required")
|
|
|
|
# Step 3: Handle Profile Incomplete Modal
|
|
print("\n[STEP 3] Checking for Profile Incomplete Modal...")
|
|
profile_incomplete = ProfileIncompletePage(driver)
|
|
if profile_incomplete.is_modal_present():
|
|
progress = profile_incomplete.get_progress_value()
|
|
print(f" Profile incomplete - Current Progress: {progress}")
|
|
print(" Clicking Complete Profile button...")
|
|
profile_incomplete.click_complete()
|
|
time.sleep(3)
|
|
print(f" Navigated to: {driver.current_url}")
|
|
else:
|
|
print(" ✅ Profile already complete or modal not present")
|
|
|
|
# Step 4: Check Profile Editor (only if profile incomplete modal was shown)
|
|
print("\n[STEP 4] Checking Profile Status...")
|
|
try:
|
|
# Try to navigate to profile editor to check status
|
|
from pages.student_nav_page import StudentNavPage
|
|
nav = StudentNavPage(driver)
|
|
# Check if we can access profile editor
|
|
current_url = driver.current_url
|
|
if "/profile" in current_url or "/dashboard" in current_url:
|
|
print(f" Current URL: {current_url}")
|
|
print(" ✅ Successfully logged in and navigated")
|
|
print(" Note: Profile status can be checked from dashboard")
|
|
except Exception as e:
|
|
print(f" ⚠️ Could not check profile editor: {e}")
|
|
print(" But login was successful!")
|
|
|
|
print(f"\n{'='*80}")
|
|
print("TEST COMPLETED SUCCESSFULLY")
|
|
print(f"{'='*80}\n")
|
|
|
|
# Keep browser open for inspection if not headless
|
|
if not headless:
|
|
print("Keeping browser open for 30 seconds for inspection...")
|
|
time.sleep(30)
|
|
|
|
except Exception as e:
|
|
print(f"\n❌ ERROR: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
finally:
|
|
if driver:
|
|
driver.quit()
|
|
|
|
|
|
def main():
|
|
"""Main entry point"""
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser(description='Test single student flow')
|
|
parser.add_argument('--cpid', type=str, required=True, help='Student CPID')
|
|
parser.add_argument('--password', type=str, required=True, help='Student password')
|
|
parser.add_argument('--headless', action='store_true', help='Run in headless mode')
|
|
|
|
args = parser.parse_args()
|
|
|
|
test_student_flow(args.cpid, args.password, headless=args.headless)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
|