# Test Suite Organization

This directory contains all automated tests organized by functionality following world-class best practices.

## Directory Structure

```
tests/
├── conftest.py                    # Shared pytest fixtures and configuration
├── student_authentication/        # Authentication-related tests
│   ├── __init__.py
│   ├── test_login.py             # Login functionality tests
│   ├── test_logout.py            # Logout functionality tests
│   ├── test_password_reset.py   # Password reset tests
│   └── test_complete_student_flow.py  # Complete authentication flow
├── student_profile/              # Profile-related tests
│   ├── __init__.py
│   └── test_profile_filling.py  # Profile completion tests
└── student_assessment/           # Assessment-related tests (Future)
    └── __init__.py
```

## Test Categories

### 1. Student Authentication (`student_authentication/`)

Tests for student authentication flows:

- **`test_login.py`**: Login functionality
  - ✅ Successful login
  - ✅ Login with invalid credentials
  - ✅ Login with remember me
  - ✅ Login form elements visibility

- **`test_logout.py`**: Logout functionality
  - ✅ Logout from dashboard
  - ✅ Logout after password reset
  - ⚠️  Note: Logout functionality may need UI implementation

- **`test_password_reset.py`**: Password reset functionality
  - ✅ Password reset for new student (first login)
  - ✅ Password reset check for already reset student
  - ✅ Password reset form validation
  - ✅ Change password to standard (Admin@123)

- **`test_complete_student_flow.py`**: Complete authentication flow
  - ✅ Login → Password Reset → Dashboard → Logout sequence
  - ✅ Password reset sequence validation

### 2. Student Profile (`student_profile/`)

Tests for student profile management:

- **`test_profile_filling.py`**: Profile completion
  - ✅ Profile incomplete modal appears
  - ✅ Navigation to profile editor
  - ✅ Profile editor page loads
  - ✅ All profile tabs accessible
  - ✅ Complete profile filling with data

### 3. Student Assessment (`student_assessment/`)

Tests for assessment flows (Future implementation):

- Assessment navigation
- Domain completion
- Question answering
- Feedback submission

## Running Tests

### Run all tests:
```bash
pytest tests/ -v
```

### Run specific category:
```bash
# Authentication tests
pytest tests/student_authentication/ -v

# Profile tests
pytest tests/student_profile/ -v

# Assessment tests (when implemented)
pytest tests/student_assessment/ -v
```

### Run specific test file:
```bash
pytest tests/student_authentication/test_login.py -v
pytest tests/student_profile/test_profile_filling.py -v
```

### Run specific test:
```bash
pytest tests/student_authentication/test_login.py::TestLogin::test_login_success -v
```

### Run with markers:
```bash
pytest -m authentication -v
pytest -m profile -v
pytest -m assessment -v
```

## Test Execution Order

Tests are designed to be independent, but follow this logical sequence:

1. **Authentication** (Login, Password Reset, Logout)
2. **Profile** (Profile Completion)
3. **Assessment** (Assessment Navigation, Completion)

## Best Practices Followed

### ✅ Framework Structure
- **Organized by functionality** - Clear separation of concerns
- **Proper package structure** - `__init__.py` files for Python packages
- **Shared fixtures** - `conftest.py` for common setup/teardown
- **Test isolation** - Each test is independent

### ✅ Naming Conventions
- **Files**: `test_*.py` (pytest requirement)
- **Classes**: `Test*` (pytest requirement)
- **Methods**: `test_*` (pytest requirement)
- **Descriptive names**: Clear indication of what is being tested

### ✅ Test Organization
- **One test class per feature** - Easy to locate and maintain
- **Grouped by functionality** - Related tests together
- **Clear test structure** - Setup → Action → Assertion

### ✅ Code Quality
- **Page Object Model** - All page interactions through page objects
- **Explicit waits** - No hard-coded sleeps
- **Error handling** - Proper exception handling
- **Documentation** - Docstrings for all test methods

## Test Data

Tests use fixtures for test data:
- `new_student_credentials`: New student (not yet reset password)
- `existing_student_credentials`: Existing student (already reset password)
- `new_student_with_data`: New student with complete profile data

**TODO**: Update fixtures to read from Excel file with actual student data.

## Prerequisites

Before running tests:
1. ✅ Login functionality must work
2. ✅ Password reset functionality must work
3. ✅ Profile editor must be accessible
4. ✅ All `data-testid` attributes must be present in UI

## Next Steps

1. ✅ Complete authentication tests
2. ✅ Complete profile tests
3. ⏳ Implement assessment tests
4. ⏳ Add integration tests
5. ⏳ Add performance tests

## Notes

- All tests follow the **Page Object Model** pattern
- All tests use **explicit waits** (no `time.sleep()`)
- All tests use **data-testid** locators (best practice)
- Password tracking system prevents ambiguity after password reset
- Test sequence ensures password reset happens before other operations
