test_wled_config_migration.py 1.2 KB

123456789101112131415161718192021222324252627282930
  1. """Migration coverage for per-printer WLED configuration (#1528)."""
  2. import pytest
  3. from sqlalchemy import inspect, text
  4. from sqlalchemy.ext.asyncio import async_sessionmaker
  5. from backend.app.core.database import run_migrations
  6. from backend.app.models.printer import Printer
  7. @pytest.mark.asyncio
  8. async def test_wled_config_migration_is_additive_and_idempotent(test_engine):
  9. session_factory = async_sessionmaker(test_engine, expire_on_commit=False)
  10. async with session_factory() as db:
  11. db.add(Printer(name="Legacy", serial_number="WLED-LEGACY", ip_address="10.0.0.1", access_code="code"))
  12. await db.commit()
  13. async with test_engine.begin() as conn:
  14. await conn.execute(text("ALTER TABLE printers DROP COLUMN wled_config"))
  15. await run_migrations(conn)
  16. await run_migrations(conn)
  17. columns = await conn.run_sync(
  18. lambda sync_conn: {col["name"] for col in inspect(sync_conn).get_columns("printers")}
  19. )
  20. stored = (
  21. await conn.execute(text("SELECT wled_config FROM printers WHERE serial_number = 'WLED-LEGACY'"))
  22. ).scalar_one()
  23. assert "wled_config" in columns
  24. assert stored is None