test_global_auto_archive_switch.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. """The global auto-archive switch is the master over the printers' own.
  2. Off, no printer archives a print started outside Bambuddy; on, each
  3. printer's own switch decides. The global switch used to be saved and never
  4. read, so turning it off changed nothing.
  5. """
  6. import pytest
  7. from sqlalchemy import select
  8. from backend.app.models.archive import PrintArchive
  9. from backend.app.models.settings import Settings
  10. from backend.tests.integration.test_external_print_confirmation_1898 import ( # noqa: F401 (autouse fixture)
  11. SUBTASK,
  12. _clear_print_state,
  13. _drive_print_start,
  14. )
  15. async def _archives(db_session) -> list:
  16. db_session.expire_all()
  17. return list((await db_session.execute(select(PrintArchive))).scalars().all())
  18. @pytest.mark.asyncio
  19. @pytest.mark.integration
  20. async def test_global_off_archives_nothing(test_engine, db_session, printer_factory):
  21. printer = await printer_factory()
  22. db_session.add(Settings(key="auto_archive", value="false"))
  23. await db_session.commit()
  24. await _drive_print_start(test_engine, printer, download_ok=False)
  25. assert await _archives(db_session) == []
  26. @pytest.mark.asyncio
  27. @pytest.mark.integration
  28. async def test_global_on_lets_the_printer_decide(test_engine, db_session, printer_factory):
  29. printer = await printer_factory()
  30. db_session.add(Settings(key="auto_archive", value="true"))
  31. await db_session.commit()
  32. await _drive_print_start(test_engine, printer, download_ok=False)
  33. assert len(await _archives(db_session)) == 1
  34. @pytest.mark.asyncio
  35. @pytest.mark.integration
  36. async def test_a_printer_switched_off_stays_off_under_global_on(test_engine, db_session, printer_factory):
  37. printer = await printer_factory(auto_archive=False)
  38. await _drive_print_start(test_engine, printer, download_ok=False)
  39. assert await _archives(db_session) == []
  40. @pytest.mark.asyncio
  41. @pytest.mark.integration
  42. async def test_unset_global_lets_the_printer_decide(test_engine, db_session, printer_factory):
  43. """Installs that never saved the setting have no row; it reads as on."""
  44. printer = await printer_factory()
  45. await _drive_print_start(test_engine, printer, download_ok=False)
  46. assert len(await _archives(db_session)) == 1
  47. @pytest.mark.asyncio
  48. @pytest.mark.integration
  49. async def test_global_off_still_tracks_a_print_bambuddy_sent(test_engine, db_session, printer_factory, archive_factory):
  50. from backend.app.main import _active_prints, register_expected_print
  51. printer = await printer_factory()
  52. archive = await archive_factory(printer.id, filename=f"{SUBTASK}.gcode.3mf", status="pending", with_run=False)
  53. db_session.add(Settings(key="auto_archive", value="false"))
  54. await db_session.commit()
  55. archive_id = archive.id
  56. register_expected_print(printer.id, f"{SUBTASK}.gcode.3mf", archive_id)
  57. await _drive_print_start(test_engine, printer, download_ok=False)
  58. assert [a.id for a in await _archives(db_session)] == [archive_id]
  59. assert (await db_session.get(PrintArchive, archive_id)).status == "printing"
  60. assert archive_id in _active_prints.values()