# Student Assessment Tests Comprehensive test suite for the complete assessment flow in Cognitive Prism platform. ## Overview This test suite covers the entire assessment journey: 1. **Assessments Page** - Assessment hub and selection 2. **Domains Page** - Domain listing and navigation 3. **Domain Assessment** - Question answering and submission 4. **Domain Feedback** - Per-domain feedback collection 5. **Final Feedback** - Overall assessment feedback 6. **Complete Flow** - End-to-end assessment completion ## Test Structure ``` tests/student_assessment/ ├── conftest.py # Fixtures (assessment-ready student) ├── test_01_assessments_page.py # Assessments hub tests ├── test_02_domains_page.py # Domains listing tests ├── test_03_domain_assessment.py # Question answering tests ├── test_04_domain_feedback.py # Domain feedback tests ├── test_05_final_feedback.py # Final feedback tests └── test_06_complete_assessment_flow.py # End-to-end flow tests ``` ## Fixtures ### `assessment_ready_student` Ensures student is ready for assessments: - ✅ Login (with smart password handling) - ✅ Password reset (if needed) - ✅ Profile completion to 100% (if needed) - ✅ Navigate to Assessments page **Returns**: Dictionary with driver, CPID, and page objects ### `assessment_with_domains` Extends `assessment_ready_student` and starts an assessment: - ✅ Selects first available assessment - ✅ Navigates to domains page - ✅ Extracts domain IDs **Returns**: Dictionary with domains page, assessment ID, and domain IDs ### `domain_assessment_started` Starts a domain assessment: - ✅ Finds first unlocked domain - ✅ Starts domain assessment - ✅ Dismisses guidance modal **Returns**: Dictionary with domain assessment page and domain ID ## Test Categories ### Assessments Page Tests (`test_01_assessments_page.py`) - Page load verification - Assessment cards visibility - Assessment ID extraction - Card structure validation - Begin assessment navigation - Multiple assessments handling ### Domains Page Tests (`test_02_domains_page.py`) - Page load verification - Domain cards visibility - Domain ID extraction - Lock/unlock status checking - Action button validation - Overall progress tracking - Start domain navigation - Back button navigation ### Domain Assessment Tests (`test_03_domain_assessment.py`) - Page load verification - Progress tracking - Timer display - Question detection - Question type detection - Navigation buttons - Answer submission (all types): - Multiple choice - True/False - Rating - Open-ended - Matrix - Submit modal flow ### Domain Feedback Tests (`test_04_domain_feedback.py`) - Modal detection - Modal structure validation - Question 1 (Yes/No + Reason) - Question 2 (Textarea) - Submit feedback - Skip feedback - Navigation after feedback ### Final Feedback Tests (`test_05_final_feedback.py`) - Overall feedback modal - Per-question feedback modal - Rating selection - Comment entry - Feedback submission ### Complete Flow Tests (`test_06_complete_assessment_flow.py`) - Single domain completion (questions + feedback) - Full assessment completion (all domains + final feedback) ## Running Tests ### Run All Assessment Tests ```bash pytest tests/student_assessment/ -v ``` ### Run Specific Test Category ```bash # Assessments page only pytest tests/student_assessment/test_01_assessments_page.py -v # Domains page only pytest tests/student_assessment/test_02_domains_page.py -v # Domain assessment only pytest tests/student_assessment/test_03_domain_assessment.py -v # Domain feedback only pytest tests/student_assessment/test_04_domain_feedback.py -v # Final feedback only pytest tests/student_assessment/test_05_final_feedback.py -v # Complete flow only pytest tests/student_assessment/test_06_complete_assessment_flow.py -v ``` ### Run with Markers ```bash # All assessment tests pytest -m assessment -v # End-to-end tests only pytest -m e2e -v # Complete flow tests pytest -m complete_flow -v # Slow tests (complete flow) pytest -m slow -v ``` ### Run Single Test ```bash pytest tests/student_assessment/test_01_assessments_page.py::TestAssessmentsPage::test_assessments_page_loads -v ``` ## Test Coverage ### ✅ Covered - [x] Assessments page rendering - [x] Assessment card structure - [x] Domain listing and navigation - [x] Domain lock/unlock status - [x] Question type detection - [x] All question types (MC, T/F, Rating, Open-ended, Matrix) - [x] Question navigation (Previous/Next) - [x] Domain submission flow - [x] Domain feedback collection - [x] Final feedback collection - [x] End-to-end flow ### 🔄 Future Enhancements - [ ] Question validation testing - [ ] Timer expiration handling - [ ] Resume incomplete assessments - [ ] Assessment results verification - [ ] Export functionality - [ ] Performance metrics collection ## Test Data Tests use: - **Default test student**: From `config.config.TEST_USERNAME` - **Smart password handling**: Tries Excel password, then `Admin@123` - **Default profile data**: For profile completion - **Automated answers**: For question answering ## Best Practices 1. **Fixtures**: Use fixtures to ensure test isolation and proper setup 2. **Explicit Waits**: All waits use explicit waits (no hard sleeps) 3. **Error Handling**: Comprehensive error handling with meaningful messages 4. **Logging**: Detailed logging for debugging and tracking 5. **Skip Logic**: Tests skip gracefully when prerequisites aren't met 6. **Data-testid**: All locators use `data-testid` attributes ## Troubleshooting ### "No assessments available" - Ensure student profile is 100% complete - Check if assessments are assigned to the student - Verify environment (local vs live) ### "No unlocked domains available" - Some domains may require previous domains to be completed - Check domain dependencies - Verify assessment structure ### "Question not found" - Question may have been answered already - Check if on last question (Submit button should be visible) - Verify question elements are loaded ### "Feedback modal not present" - Domain may not be completed yet - Check if feedback is optional - Verify modal timing ## Notes - Tests are designed to be **independent** and **idempotent** - Each test handles its own setup and cleanup - Tests use **smart skipping** when prerequisites aren't met - **End-to-end tests** are marked as `@pytest.mark.slow` for selective execution - All tests follow **Page Object Model** pattern - Comprehensive **logging** for debugging and tracking