137 lines
5.1 KiB
Python
137 lines
5.1 KiB
Python
"""
|
|
Component Test: Profile Editor Tab Navigation
|
|
|
|
Tests profile editor tab navigation in isolation.
|
|
"""
|
|
import pytest
|
|
from pages.login_page import LoginPage
|
|
from pages.mandatory_reset_page import MandatoryResetPage
|
|
from pages.profile_editor_page import ProfileEditorPage
|
|
from config.config import TEST_USERNAME, TEST_PASSWORD, TEST_NEW_PASSWORD
|
|
from utils.password_tracker import password_tracker
|
|
|
|
|
|
@pytest.mark.component
|
|
@pytest.mark.profile
|
|
class TestProfileTabsComponent:
|
|
"""Component tests for profile editor tab navigation"""
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def setup(self, driver):
|
|
"""Setup: Login and navigate to profile editor"""
|
|
login_page = LoginPage(driver)
|
|
login_page.login(identifier=TEST_USERNAME, password=None)
|
|
|
|
# Handle password reset if needed
|
|
reset_page = MandatoryResetPage(driver)
|
|
if reset_page.is_modal_present():
|
|
current_password = password_tracker.get_password(TEST_USERNAME, TEST_PASSWORD)
|
|
try:
|
|
reset_page.reset_password(
|
|
current_password=current_password,
|
|
new_password=TEST_NEW_PASSWORD,
|
|
confirm_password=TEST_NEW_PASSWORD,
|
|
student_cpid=TEST_USERNAME
|
|
)
|
|
except:
|
|
# Try with TEST_NEW_PASSWORD as current
|
|
try:
|
|
reset_page.reset_password(
|
|
current_password=TEST_NEW_PASSWORD,
|
|
new_password=TEST_NEW_PASSWORD,
|
|
confirm_password=TEST_NEW_PASSWORD,
|
|
student_cpid=TEST_USERNAME
|
|
)
|
|
except:
|
|
pass # Password might already be reset
|
|
|
|
# Navigate to profile editor
|
|
profile_page = ProfileEditorPage(driver)
|
|
profile_page.navigate()
|
|
profile_page.wait_for_page_load()
|
|
|
|
yield profile_page
|
|
|
|
def test_all_tabs_navigable(self, setup, driver):
|
|
"""Test that all 8 tabs can be navigated"""
|
|
profile_page = setup
|
|
|
|
# Test navigation to each tab (0-7)
|
|
tab_names = [
|
|
"Personal Information",
|
|
"Parent/Guardian Information",
|
|
"Institution Details",
|
|
"Focus Areas",
|
|
"Self-Assessment",
|
|
"Hobbies & Clubs",
|
|
"Achievements",
|
|
"Expectations"
|
|
]
|
|
|
|
for i, tab_name in enumerate(tab_names):
|
|
try:
|
|
profile_page.navigate_to_tab(i)
|
|
print(f"✅ Tab {i+1}/8 ({tab_name}) navigated successfully")
|
|
except Exception as e:
|
|
pytest.fail(f"Failed to navigate to tab {i+1} ({tab_name}): {e}")
|
|
|
|
def test_tab_0_personal_information(self, setup):
|
|
"""Test Personal Information tab (Tab 0)"""
|
|
profile_page = setup
|
|
profile_page.navigate_to_tab(0)
|
|
|
|
# Verify form fields are visible
|
|
assert profile_page.is_element_visible(profile_page.FIRST_NAME_INPUT, timeout=5), \
|
|
"First name input should be visible"
|
|
assert profile_page.is_element_visible(profile_page.LAST_NAME_INPUT, timeout=5), \
|
|
"Last name input should be visible"
|
|
|
|
print("✅ Personal Information tab loads correctly")
|
|
|
|
def test_tab_1_parent_guardian(self, setup):
|
|
"""Test Parent/Guardian Information tab (Tab 1)"""
|
|
profile_page = setup
|
|
profile_page.navigate_to_tab(1)
|
|
|
|
# Verify form fields are visible
|
|
assert profile_page.is_element_visible(profile_page.FATHER_FULL_NAME_INPUT, timeout=5), \
|
|
"Father name input should be visible"
|
|
|
|
print("✅ Parent/Guardian Information tab loads correctly")
|
|
|
|
def test_tab_2_institution_details(self, setup):
|
|
"""Test Institution Details tab (Tab 2)"""
|
|
profile_page = setup
|
|
profile_page.navigate_to_tab(2)
|
|
|
|
# Verify form fields are visible
|
|
assert profile_page.is_element_visible(profile_page.CURRENT_GRADE_INPUT, timeout=5), \
|
|
"Current grade input should be visible"
|
|
|
|
print("✅ Institution Details tab loads correctly")
|
|
|
|
def test_tab_7_expectations_save_button(self, setup):
|
|
"""Test Expectations tab (Tab 7) has Save button"""
|
|
profile_page = setup
|
|
profile_page.navigate_to_tab(7)
|
|
|
|
# Verify Save button is visible (only on last tab)
|
|
assert profile_page.is_element_visible(profile_page.SAVE_BUTTON, timeout=5), \
|
|
"Save button should be visible on last tab"
|
|
|
|
print("✅ Save button appears on Expectations tab (last tab)")
|
|
|
|
def test_tab_scrolling(self, setup):
|
|
"""Test tab scrolling for tabs 4-7"""
|
|
profile_page = setup
|
|
|
|
# Navigate to tabs that require scrolling
|
|
for tab_index in [4, 5, 6, 7]:
|
|
try:
|
|
profile_page.navigate_to_tab(tab_index)
|
|
print(f"✅ Tab {tab_index+1} navigated with scrolling")
|
|
except Exception as e:
|
|
pytest.fail(f"Failed to navigate to tab {tab_index+1} with scrolling: {e}")
|
|
|
|
|