UNPKG

payload-plugin-newsletter

Version:

Complete newsletter management plugin for Payload CMS with subscriber management, magic link authentication, and email service integration

152 lines (113 loc) 4.48 kB
# Test Implementation Summary ## Completed Tests ### Unit Tests (✅ All Passing - 30 tests) 1. **Access Control Utilities** (`src/__tests__/unit/utils/access.test.ts`) - Tests for `isAdmin` function with various user patterns - Tests for custom admin detection functions - Edge case handling 2. **JWT Utilities** (`src/__tests__/unit/utils/jwt.test.ts`) - Magic link token generation and verification - Session token generation and verification - Token security (algorithm attacks, expiration) - Environment configuration handling - Magic link URL generation ### Security Tests (✅ All Passing - 46 tests) 1. **Subscriber Access Control** (`src/__tests__/security/subscriber-access.test.ts`) - Admin-only operations - Admin or self access patterns - Cross-subscriber data isolation - Synthetic user (magic link) authentication 2. **Newsletter Settings Access** (`src/__tests__/security/settings-access.test.ts`) - Public read access for validation - Admin-only write operations - API key protection - Settings singleton pattern 3. **CSRF Protection** (`src/__tests__/security/csrf-protection.test.ts`) - Token validation patterns - SameSite cookie protection - Double submit cookie pattern - Referer validation - Pre-flight request handling 4. **XSS Prevention** (`src/__tests__/security/xss-prevention.test.ts`) - Input sanitization patterns - Template injection prevention - Content Security Policy examples - JSON injection prevention - URL injection prevention - MongoDB injection prevention ### Integration Tests (✅ Partially Passing) 1. **Verify Magic Link Endpoint** (`src/__tests__/integration/endpoints/verify-magic-link.test.ts`) - Token validation - Email verification flow - Synthetic user generation - Token clearing after use ## Test Infrastructure Created ### Mock Implementations 1. **Email Provider Mocks** (`src/__tests__/mocks/email-providers.ts`) - Behavior-based Resend mock - Behavior-based Broadcast mock - Rate limiting simulation - Error handling 2. **Payload Mock** (`src/__tests__/mocks/payload.ts`) - CRUD operations simulation - Access control simulation - Collection-specific behaviors - Test helpers for seeding data ### Test Fixtures 1. **Subscribers** (`src/__tests__/fixtures/subscribers.ts`) - Active, pending, and unsubscribed users - Mock token data 2. **Newsletter Settings** (`src/__tests__/fixtures/newsletter-settings.ts`) - Complete settings configuration - Email provider settings ### Test Configuration 1. **Unit Tests** (`vitest.config.ts`) - Happy-dom environment - Proper test isolation - Coverage configuration 2. **Integration Tests** (`vitest.integration.config.ts`) - Node environment - Longer timeouts - Single-threaded execution ## Security Test Coverage The implemented tests cover all the security areas marked as "ANIKET: okay do it": 1.**Access Control** - Admin role detection - Subscriber self-service patterns - Cross-user data isolation 2.**Authentication** - Magic link token security - Session token management - Token expiration and reuse prevention 3.**Input Validation** - XSS prevention patterns - SQL/NoSQL injection prevention - Template injection prevention 4.**CSRF Protection** - Token validation patterns - Cookie security - Origin validation 5.**Data Protection** - API key handling - Sensitive data exposure prevention - Error message sanitization ## Running the Tests ```bash # Run all unit tests bun run test:unit # Run security tests bun run test:security # Run integration tests bun run test:integration # Run all tests bun run test # Run tests with coverage bun run test:coverage # Run tests in watch mode bun run test:watch # Run tests with UI bun run test:ui ``` ## Notes Some integration tests are failing because they were written against expected implementations that differ from the actual endpoint implementations. The core security patterns and unit tests are all passing and provide good coverage of the security improvements made in versions 0.3.0 and 0.3.1. The test infrastructure is flexible and can be easily extended as the plugin evolves. The behavior-based mocks allow for realistic testing of email provider interactions, and the Payload mock provides a good simulation of the CMS behavior for testing access control patterns.