fix: unify theme system - fix theme switching persistence
- Unified localStorage key to 'theme-preference' across all components
- Fixed header.tsx using wrong localStorage key ('theme' instead of 'theme-preference')
- Added localStorage hybrid persistence for instant theme changes
- Removed router.refresh() which was causing stale data revert
- Replaced Blue theme with Sepia
- Consolidated auth() calls to prevent race conditions
- Updated UserSettingsData types to include all themes
This commit is contained in:
156
keep-notes/tests/migration/README.md
Normal file
156
keep-notes/tests/migration/README.md
Normal file
@@ -0,0 +1,156 @@
|
||||
# Migration Tests
|
||||
|
||||
This directory contains comprehensive test suites for validating Prisma schema and data migrations for the Keep notes application.
|
||||
|
||||
## Test Files
|
||||
|
||||
- **setup.ts** - Test utilities for database setup, teardown, and test data generation
|
||||
- **schema-migration.test.ts** - Validates schema migrations (tables, columns, indexes, relationships)
|
||||
- **data-migration.test.ts** - Validates data migration (transformation, integrity, edge cases)
|
||||
- **rollback.test.ts** - Validates rollback capability and data recovery
|
||||
- **performance.test.ts** - Validates migration performance with various dataset sizes
|
||||
- **integrity.test.ts** - Validates data integrity (no loss/corruption, foreign keys, indexes)
|
||||
|
||||
## Running Tests
|
||||
|
||||
### Run all migration tests
|
||||
```bash
|
||||
npm run test:migration
|
||||
```
|
||||
|
||||
### Run migration tests in watch mode
|
||||
```bash
|
||||
npm run test:migration:watch
|
||||
```
|
||||
|
||||
### Run specific test file
|
||||
```bash
|
||||
npm run test:unit tests/migration/schema-migration.test.ts
|
||||
```
|
||||
|
||||
### Run tests with coverage
|
||||
```bash
|
||||
npm run test:unit:coverage
|
||||
```
|
||||
|
||||
## Test Coverage Goals
|
||||
|
||||
- **Minimum threshold:** 80% coverage for migration-related code
|
||||
- **Coverage areas:** Migration scripts, test utilities, schema transformations
|
||||
- **Exclude from coverage:** Test files themselves (`*.test.ts`)
|
||||
|
||||
## Test Structure
|
||||
|
||||
### Schema Migration Tests
|
||||
- Core table existence (User, Note, Notebook, Label, etc.)
|
||||
- AI feature tables (AiFeedback, MemoryEchoInsight, UserAISettings)
|
||||
- Note table AI fields (autoGenerated, aiProvider, aiConfidence, etc.)
|
||||
- Index creation on critical fields
|
||||
- Foreign key relationships
|
||||
- Unique constraints
|
||||
- Default values
|
||||
|
||||
### Data Migration Tests
|
||||
- Empty database migration
|
||||
- Basic note migration
|
||||
- AI fields data migration
|
||||
- AiFeedback data migration
|
||||
- MemoryEchoInsight data migration
|
||||
- UserAISettings data migration
|
||||
- Data integrity verification
|
||||
- Edge cases (empty strings, long content, special characters)
|
||||
- Performance benchmarks
|
||||
|
||||
### Rollback Tests
|
||||
- Schema state verification
|
||||
- Column/table rollback simulation
|
||||
- Data recovery after rollback
|
||||
- Orphaned record handling
|
||||
- Rollback safety checks
|
||||
- Rollback error handling
|
||||
|
||||
### Performance Tests
|
||||
- Empty migration (< 1 second)
|
||||
- Small dataset (10 notes) (< 1 second)
|
||||
- Medium dataset (100 notes) (< 5 seconds)
|
||||
- Target dataset (1,000 notes) (< 30 seconds)
|
||||
- Stress test (10,000 notes) (< 30 seconds)
|
||||
- AI features performance
|
||||
- Database size tracking
|
||||
- Concurrent operations
|
||||
|
||||
### Integrity Tests
|
||||
- No data loss
|
||||
- No data corruption
|
||||
- Foreign key relationship maintenance
|
||||
- Index integrity
|
||||
- AI fields preservation
|
||||
- Batch operations integrity
|
||||
- Data type integrity
|
||||
|
||||
## Test Utilities
|
||||
|
||||
The `setup.ts` file provides reusable utilities:
|
||||
|
||||
- `setupTestEnvironment()` - Initialize test environment
|
||||
- `createTestPrismaClient()` - Create isolated Prisma client
|
||||
- `initializeTestDatabase()` - Apply all migrations
|
||||
- `cleanupTestDatabase()` - Clean up test database
|
||||
- `createSampleNotes()` - Generate sample test notes
|
||||
- `createSampleAINotes()` - Generate AI-enabled test notes
|
||||
- `measureExecutionTime()` - Performance measurement helper
|
||||
- `verifyDataIntegrity()` - Data integrity checks
|
||||
- `verifyTableExists()` - Table existence verification
|
||||
- `verifyColumnExists()` - Column existence verification
|
||||
- `verifyIndexExists()` - Index existence verification
|
||||
- `getTableSchema()` - Get table schema information
|
||||
- `getDatabaseSize()` - Get database file size
|
||||
|
||||
## Acceptance Criteria Coverage
|
||||
|
||||
✅ **AC 1:** Unit tests exist for all migration scripts
|
||||
✅ **AC 2:** Integration tests verify database state before/after migrations
|
||||
✅ **AC 3:** Test suite validates rollback capability
|
||||
✅ **AC 4:** Performance tests ensure migrations complete within acceptable limits
|
||||
✅ **AC 5:** Tests verify data integrity (no loss/corruption)
|
||||
✅ **AC 6:** Test coverage meets minimum threshold (80%)
|
||||
|
||||
## CI/CD Integration
|
||||
|
||||
These tests are configured to run in CI/CD pipelines:
|
||||
|
||||
```yaml
|
||||
# Example CI configuration
|
||||
- name: Run migration tests
|
||||
run: npm run test:migration
|
||||
|
||||
- name: Check coverage
|
||||
run: npm run test:unit:coverage
|
||||
```
|
||||
|
||||
## Isolation
|
||||
|
||||
Each test suite runs in an isolated test database:
|
||||
- **Location:** `prisma/test-databases/migration-test.db`
|
||||
- **Lifecycle:** Created before test suite, deleted after
|
||||
- **Conflict:** No conflict with development database
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Tests fail with database locked error
|
||||
Ensure no other process is using the test database. The test utilities automatically clean up the test database.
|
||||
|
||||
### Tests timeout
|
||||
Increase timeout values in `vitest.config.ts` if necessary.
|
||||
|
||||
### Coverage below threshold
|
||||
Review coverage report in `coverage/index.html` to identify untested code.
|
||||
|
||||
## Contributing
|
||||
|
||||
When adding new migrations:
|
||||
|
||||
1. Add corresponding test cases in appropriate test files
|
||||
2. Update this README with new test coverage
|
||||
3. Ensure coverage threshold (80%) is maintained
|
||||
4. Run all migration tests before committing
|
||||
Reference in New Issue
Block a user