Files
bambuddy/backend/tests/unit/test_slicer_settings.py
maziggy 8d42b05f62 Add configurable slicer preference — Bambu Studio or OrcaSlicer (#313)
Users can now choose their preferred slicer (Bambu Studio or OrcaSlicer)
in Settings → General. All "Open in Slicer" buttons across Archives,
3D Preview, and context menus use the correct protocol for the selected
slicer. OrcaSlicer uses orcaslicer://open?file=<URL> on all platforms;
Bambu Studio uses bambustudio:// (Windows) or bambustudioopen:// (macOS/
Linux). Default remains Bambu Studio for backward compatibility.
2026-02-10 09:38:06 +01:00

49 lines
1.9 KiB
Python

"""Unit tests for preferred_slicer setting in AppSettings schema."""
import pytest
from backend.app.schemas.settings import AppSettings, AppSettingsUpdate
@pytest.mark.unit
class TestPreferredSlicerSchema:
"""Tests for the preferred_slicer field in settings schemas."""
def test_default_value_is_bambu_studio(self):
"""Default preferred_slicer should be bambu_studio."""
settings = AppSettings()
assert settings.preferred_slicer == "bambu_studio"
def test_set_to_orcaslicer(self):
"""Should accept orcaslicer as a valid value."""
settings = AppSettings(preferred_slicer="orcaslicer")
assert settings.preferred_slicer == "orcaslicer"
def test_set_to_bambu_studio_explicit(self):
"""Should accept bambu_studio as an explicit value."""
settings = AppSettings(preferred_slicer="bambu_studio")
assert settings.preferred_slicer == "bambu_studio"
def test_update_schema_default_is_none(self):
"""AppSettingsUpdate preferred_slicer should default to None."""
update = AppSettingsUpdate()
assert update.preferred_slicer is None
def test_update_schema_accepts_value(self):
"""AppSettingsUpdate should accept a preferred_slicer value."""
update = AppSettingsUpdate(preferred_slicer="orcaslicer")
assert update.preferred_slicer == "orcaslicer"
def test_serialization_roundtrip(self):
"""Settings should survive serialization roundtrip."""
settings = AppSettings(preferred_slicer="orcaslicer")
data = settings.model_dump()
restored = AppSettings(**data)
assert restored.preferred_slicer == "orcaslicer"
def test_partial_update_preserves_other_fields(self):
"""Updating preferred_slicer should not affect other fields."""
update = AppSettingsUpdate(preferred_slicer="orcaslicer")
data = update.model_dump(exclude_none=True)
assert data == {"preferred_slicer": "orcaslicer"}