# Test Specification: Custom CSS Gallery Templates This document specifies the test cases for the Custom CSS Gallery Templates feature, which allows administrators to create and manage up to 3 custom CSS templates for gallery styling. ## Prerequisites - Local Docker environment running (`docker-compose up`) - Access to admin dashboard - Backend migrations applied (052_add_css_templates.js) ## Test Cases ### 1. Template Editor Access #### TC-CCT-001: Access CSS Templates Tab **Steps:** 1. Navigate to Settings page 2. Look for "Custom CSS Templates" or "Styling" section **Expected Result:** - CSS Templates editor is accessible - Three template slots are visible as tabs #### TC-CCT-002: Default Template Content **Steps:** 1. Navigate to CSS Templates editor 2. Select Template 1 tab **Expected Result:** - Template 1 named "Elegant Dark" - Contains pre-populated CSS content - Is marked as enabled - Is marked as default ### 2. Template Editing #### TC-CCT-003: Edit Template Name **Steps:** 1. Select Template 2 2. Change name from "Untitled" to "My Custom Theme" 3. Save template **Expected Result:** - Name updates in tab - Save confirmation shown - Name persists after refresh #### TC-CCT-004: Edit CSS Content **Steps:** 1. Select Template 2 2. Add CSS: `.gallery-page { background: #ff0000; }` 3. Save template **Expected Result:** - CSS saved successfully - No sanitization warnings for valid CSS - Character count updates #### TC-CCT-005: Enable/Disable Template **Steps:** 1. Select Template 2 2. Toggle "Enable this template" checkbox 3. Save template **Expected Result:** - Template status changes - Tab shows check mark when enabled - Disabled templates not available in event form ### 3. CSS Sanitization #### TC-CCT-006: Block JavaScript Expressions **Steps:** 1. Enter CSS with `expression(alert('xss'))` 2. Save template **Expected Result:** - Pattern blocked (replaced with /* BLOCKED */) - Sanitization warning shown - Template saves with sanitized content #### TC-CCT-007: Block @import Rules **Steps:** 1. Enter CSS with `@import url('http://evil.com/styles.css');` 2. Save template **Expected Result:** - @import blocked - Warning shown - External resource not loaded #### TC-CCT-008: Block External URLs **Steps:** 1. Enter CSS with `background-image: url('http://external.com/image.jpg');` 2. Save template **Expected Result:** - External URL blocked - Only data: URIs allowed for images - Warning shown #### TC-CCT-009: Allow Safe CSS Properties **Steps:** 1. Enter CSS with standard properties: ```css .gallery-page { background-color: #333; color: white; font-family: Arial, sans-serif; padding: 20px; } ``` 2. Save template **Expected Result:** - All properties saved as-is - No sanitization warnings - CSS valid ### 4. Template Size Limits #### TC-CCT-010: CSS Size Limit **Steps:** 1. Try to save CSS content > 100KB 2. Attempt to save **Expected Result:** - Error message about size limit - Template not saved - User informed of 100KB limit ### 5. Reset to Default #### TC-CCT-011: Reset Template 1 **Steps:** 1. Modify Template 1 CSS 2. Save changes 3. Click "Reset to Default" 4. Confirm action **Expected Result:** - Template reverts to default "Elegant Dark" content - Name reset to "Elegant Dark" - Enable status reset to true #### TC-CCT-012: Reset Button Only on Template 1 **Steps:** 1. Select Template 2 2. Look for Reset button **Expected Result:** - Reset to Default button NOT shown for Template 2 or 3 - Only Template 1 has reset option ### 6. Event Integration #### TC-CCT-013: Template Dropdown in Event Form **Steps:** 1. Enable at least one CSS template 2. Navigate to Create Event page 3. Look for CSS Template selector **Expected Result:** - Dropdown shows "None (Use default theme)" option - Enabled templates appear in list - Disabled templates NOT shown #### TC-CCT-014: Assign Template to Event **Steps:** 1. Create new event 2. Select an enabled CSS template 3. Save event **Expected Result:** - Event created with template assigned - Template ID stored in database - Event edit shows selected template #### TC-CCT-015: Update Event Template **Steps:** 1. Edit existing event 2. Change CSS template selection 3. Save event **Expected Result:** - Template updated successfully - Gallery reflects new template ### 7. Gallery CSS Loading #### TC-CCT-016: Gallery Loads Custom CSS **Steps:** 1. Assign template to an event 2. View gallery as guest 3. Inspect page source/styles **Expected Result:** - Custom CSS injected via `