When init_db() called Base.metadata.create_all() before Alembic migrations,
the ORM model created the webhook_configs table. Alembic migration 009 then
failed with OperationalError: table webhook_configs already exists.
Fix: check for alembic_version table before calling create_all(). Tracked
databases skip create_all and let Alembic handle all schema changes instead.
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
- Replace bare Exception catches with sa.exc.OperationalError in migration 007
- Use ScriptDirectory.get_heads() for dynamic revision ID assertions in tests
- Make migration count assertion flexible (>= 8 instead of == 8)
- Rewrite pending migrations test to actually test upgrade from revision 006
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
- Rename test for clarity (fallback_to_builtin_template_when_custom_template_fails)
- Add MIME type validation for SVG logo test
- Use precise assertion for logo location check count
- Add column type validation in migration test
- All 39 tests pass
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
- Added tests for database.py migration functions
- Added tests for error handling in init_db()
- Added tests for file path columns migration
- Added tests for unique index dropping
- Added tests for idempotent migrations
- Added tests for email template fallback logic
- Added tests for SVG logo attachment
- Added tests for SMTP without TLS and without auth
- Added tests for timeout errors in SMTP
- Added tests for upload_to_email task validation
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>