Files
picpeak/docs/test-optional-event-fields.md
T
Paul Nothaft 77a4bfd499 feat: implement 4 new features with bug fixes and refactoring plan
## Features Implemented

### 1. Event Rename Functionality
- Add EventRenameDialog component with live slug preview
- Create eventRenameService for safe event renaming
- Add slug_redirects table for old URL redirects
- Support optional email notification on rename
- Fix date formatting in slug (YYYY-MM-DD format)

### 2. Optional Event Contact Fields
- Add settings to make customer name/email/admin email optional
- Create migration for field requirement settings
- Update CreateEventPage forms to show "(optional)" labels
- Fix boolean parsing in publicSettings.js

### 3. Photo Filtering & Export
- Add PhotoFilterPanel with rating/likes/favorites/comments filters
- Create PhotoExportMenu with ZIP/metadata/XMP export options
- Add photoExportService with Lightroom XMP sidecar generation
- Create photoFilterBuilder utility for query construction
- Wire up photo selection to export button via onSelectionChange

### 4. Custom CSS Gallery Templates
- Add CssTemplateEditor component with 3 template slots
- Create cssSanitizer utility blocking XSS vectors
- Add gallery CSS endpoint for template delivery
- Integrate Custom CSS tab into Settings page
- Include default "Elegant Dark" template

## Bug Fixes
- Fix event rename date formatting (was showing full Date string)
- Fix common.optional translation key missing in locales
- Fix photo export button staying disabled when photos selected
- Fix authService import missing in SettingsPage

## Documentation
- Add comprehensive REFACTORING_PLAN.md for codebase improvement
- Add test specification documents for all features
- Add feature documentation for CSS templates

## Database Migrations
- 049_add_slug_redirects.js
- 050_add_optional_event_fields_settings.js
- 051_add_photo_filter_indexes.js
- 052_add_css_templates.js
2026-01-02 09:56:19 +01:00

6.9 KiB

Test Specification: Optional Event Fields

This document specifies the test cases for the Optional Event Fields feature, which allows administrators to configure whether customer name, customer email, and admin email are required when creating events.

Prerequisites

  • Local Docker environment running (docker-compose up)
  • Access to admin dashboard
  • Backend migrations applied

Test Cases

1. Settings Page - Event Creation Tab

TC-OEF-001: Event Creation Tab Visibility

Steps:

  1. Navigate to Settings page (/admin/settings)
  2. Verify "Event Creation" tab is visible

Expected Result:

  • Tab labeled "Event Creation" or similar should be present in the settings navigation

TC-OEF-002: Default Field Requirements

Steps:

  1. Navigate to Settings > Event Creation tab
  2. Check initial state of all three toggles

Expected Result:

  • "Require Customer Name" toggle is ON (enabled)
  • "Require Customer Email" toggle is ON (enabled)
  • "Require Admin Email" toggle is ON (enabled)

TC-OEF-003: Toggle Customer Name Requirement

Steps:

  1. Navigate to Settings > Event Creation
  2. Toggle OFF "Require Customer Name"
  3. Click Save

Expected Result:

  • Setting saves successfully
  • Toast notification confirms save
  • Toggle remains OFF after page refresh

TC-OEF-004: Toggle Customer Email Requirement

Steps:

  1. Navigate to Settings > Event Creation
  2. Toggle OFF "Require Customer Email"
  3. Click Save

Expected Result:

  • Setting saves successfully
  • Warning message about email functionality is shown
  • Toggle remains OFF after page refresh

TC-OEF-005: Toggle Admin Email Requirement

Steps:

  1. Navigate to Settings > Event Creation
  2. Toggle OFF "Require Admin Email"
  3. Click Save

Expected Result:

  • Setting saves successfully
  • Warning message about notifications is shown
  • Toggle remains OFF after page refresh

2. Create Event Form - Conditional Validation

TC-OEF-006: All Fields Required (Default)

Steps:

  1. Ensure all three settings are ON in Settings > Event Creation
  2. Navigate to Create Event page
  3. Try to submit form without filling customer name, customer email, or admin email

Expected Result:

  • Validation errors shown for all three empty fields
  • Form does not submit

TC-OEF-007: Customer Name Optional

Steps:

  1. Set "Require Customer Name" to OFF in Settings
  2. Navigate to Create Event page
  3. Verify Host Name field label shows "(optional)"
  4. Submit form without customer name (but with required fields filled)

Expected Result:

  • Host Name label shows "(optional)" suffix
  • Form submits successfully without customer name
  • Event is created

TC-OEF-008: Customer Email Optional

Steps:

  1. Set "Require Customer Email" to OFF in Settings
  2. Navigate to Create Event page
  3. Verify Host Email field label shows "(optional)"
  4. Submit form without customer email (but with required fields filled)

Expected Result:

  • Host Email label shows "(optional)" suffix
  • Form submits successfully without customer email
  • Event is created

TC-OEF-009: Admin Email Optional

Steps:

  1. Set "Require Admin Email" to OFF in Settings
  2. Navigate to Create Event page
  3. Verify Admin Email field label shows "(optional)"
  4. Submit form without admin email (but with required fields filled)

Expected Result:

  • Admin Email label shows "(optional)" suffix
  • Form submits successfully without admin email
  • Event is created

TC-OEF-010: All Fields Optional

Steps:

  1. Set all three settings to OFF in Settings
  2. Navigate to Create Event page
  3. Submit form with only event name, date, and password

Expected Result:

  • All three optional fields show "(optional)" suffix
  • Form submits successfully
  • Event is created with null/empty contact fields

3. Backend Validation

TC-OEF-011: Backend Respects Settings

Steps:

  1. Set "Require Customer Email" to OFF
  2. Make direct API call to create event without customer_email:
    POST /api/admin/events
    { event_name: "Test", event_date: "2025-01-15", ... }
    

Expected Result:

  • API accepts the request
  • Returns 201 Created
  • Event is created without customer_email

TC-OEF-012: Backend Rejects When Required

Steps:

  1. Set "Require Customer Email" to ON
  2. Make direct API call to create event without customer_email

Expected Result:

  • API rejects the request
  • Returns 400 Bad Request with validation error
  • Error message indicates customer_email is required

4. Format Validation for Optional Fields

TC-OEF-013: Invalid Email Format Still Rejected

Steps:

  1. Set "Require Customer Email" to OFF
  2. Navigate to Create Event page
  3. Enter invalid email format (e.g., "notanemail")
  4. Submit form

Expected Result:

  • Validation error for invalid email format
  • Form does not submit
  • Error message: "Invalid email format"

5. Create Event Enhanced Page

TC-OEF-014: Enhanced Page Respects Settings

Steps:

  1. Set all three settings to OFF
  2. Navigate to enhanced Create Event page (/admin/events/create)
  3. Verify all three fields show "(optional)"
  4. Submit form without contact fields

Expected Result:

  • All optional labels visible
  • Form submits successfully
  • Event is created

6. Settings Persistence

TC-OEF-015: Settings Persist Across Sessions

Steps:

  1. Set specific combination (e.g., customer name OFF, emails ON)
  2. Log out
  3. Log back in
  4. Navigate to Settings > Event Creation

Expected Result:

  • Settings remain as configured
  • Toggle states match what was saved

TC-OEF-016: Settings Persist Across Backend Restart

Steps:

  1. Set specific combination of settings
  2. Restart backend container
  3. Create new event

Expected Result:

  • Validation behavior matches saved settings
  • Database persisted settings correctly

Edge Cases

TC-OEF-017: Empty String vs Null

Steps:

  1. Set field to optional
  2. Create event with empty string for that field
  3. View event details

Expected Result:

  • Field stores empty value appropriately
  • No errors in display

TC-OEF-018: Rapid Toggle Changes

Steps:

  1. Quickly toggle settings on/off multiple times
  2. Save after each change

Expected Result:

  • Each save completes without error
  • Final state matches last save action

Automated Testing Notes

For Playwright tests:

  1. Login to admin dashboard
  2. Navigate to Settings
  3. Click Event Creation tab
  4. Manipulate toggles using checkbox selectors
  5. Navigate to Create Event
  6. Verify label text contains or doesn't contain "(optional)"
  7. Attempt form submission with various field combinations
  8. Assert on validation messages and success/failure states

Files Modified

Backend

  • /backend/migrations/core/050_add_optional_event_fields_settings.js
  • /backend/src/routes/adminEvents.js
  • /backend/src/routes/publicSettings.js

Frontend

  • /frontend/src/pages/admin/SettingsPage.tsx
  • /frontend/src/pages/admin/CreateEventPage.tsx
  • /frontend/src/pages/admin/CreateEventPageEnhanced.tsx