Files
soundboard-py/soundboard/tests/test_board.py
T

101 lines
3.0 KiB
Python

import os
import sys
import tempfile
import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import config
from board import Board
class TestBoard(unittest.TestCase):
def setUp(self):
self.dir = tempfile.mkdtemp()
self.path = os.path.join(self.dir, "config.json")
def _board(self):
return Board(self.path)
def test_add_button_defaults_label_to_basename(self):
b = self._board()
btn = b.add_button("/sounds/airhorn.mp3")
self.assertEqual(btn["label"], "airhorn")
self.assertEqual(btn["id"], "btn_001")
self.assertEqual(len(b.buttons), 1)
def test_add_button_custom_label(self):
b = self._board()
btn = b.add_button("/sounds/x.wav", label="Custom")
self.assertEqual(btn["label"], "Custom")
def test_ids_increment_and_persist(self):
b = self._board()
b.add_button("/a.wav")
b.add_button("/b.wav")
self.assertEqual([x["id"] for x in b.buttons], ["btn_001", "btn_002"])
# Reload: new ids continue after the highest existing one.
b2 = self._board()
btn = b2.add_button("/c.wav")
self.assertEqual(btn["id"], "btn_003")
def test_remove_button(self):
b = self._board()
b.add_button("/a.wav")
btn = b.add_button("/b.wav")
b.remove_button("btn_001")
self.assertEqual([x["id"] for x in b.buttons], ["btn_002"])
# persisted
self.assertEqual(len(self._board().buttons), 1)
def test_remove_unknown_raises(self):
b = self._board()
with self.assertRaises(KeyError):
b.remove_button("nope")
def test_rename_button(self):
b = self._board()
b.add_button("/a.wav")
b.rename_button("btn_001", " Renamed ")
self.assertEqual(b.get_button("btn_001")["label"], "Renamed")
def test_rename_empty_raises(self):
b = self._board()
b.add_button("/a.wav")
with self.assertRaises(ValueError):
b.rename_button("btn_001", " ")
def test_settings_persist(self):
b = self._board()
b.set_output_device("CABLE Input")
b.set_volume(42)
reloaded = self._board()
self.assertEqual(reloaded.output_device, "CABLE Input")
self.assertEqual(reloaded.volume, 42)
def test_volume_clamped(self):
b = self._board()
b.set_volume(150)
self.assertEqual(b.volume, 100)
b.set_volume(-10)
self.assertEqual(b.volume, 0)
def test_on_change_fires(self):
b = self._board()
calls = []
b.on_change = lambda: calls.append(1)
b.add_button("/a.wav")
b.rename_button("btn_001", "z")
b.remove_button("btn_001")
self.assertEqual(len(calls), 3)
def test_to_config_matches_schema(self):
b = self._board()
b.add_button("/a.wav", "A")
cfg = b.to_config()
self.assertEqual(set(cfg.keys()), set(config.default_config().keys()))
if __name__ == "__main__":
unittest.main()