emmental/tests/tracklist/test_sorter.py

87 lines
3.3 KiB
Python

# Copyright 2022 (c) Anna Schumaker.
"""Tests our Playlist Sorter."""
import emmental.tracklist.sorter
import unittest
from gi.repository import GObject
from gi.repository import Gio
class TestSortConstants(unittest.TestCase):
"""Test case for Sort Order constants."""
def test_sort_fields(self):
"""Test the sort fields definition dictionary."""
self.assertDictEqual(emmental.tracklist.sorter.SORT_FIELDS,
{"Album": ["album"], "Artist": ["artist"],
"Album Artist": ["albumartist"],
"Filepath": ["filepath"], "Length": ["length"],
"Last Played Date": ["lastplayed"],
"Last Started Date": ["laststarted"],
"Play Count": ["playcount"],
"Release Date": ["release"],
"Title": ["title"],
"Track Number": ["mediumno", "number"]})
class TestSortField(unittest.TestCase):
"""Test case for our SortField object."""
def setUp(self):
"""Set up common variables."""
self.model = Gio.ListStore()
self.field = emmental.tracklist.sorter.SortField(self.model, "Album")
def test_init(self):
"""Test that the Sort Field is initialized correctly."""
self.assertIsInstance(self.field, GObject.GObject)
self.assertEqual(self.field.name, "Album")
self.assertEqual(self.field.model, self.model)
self.assertFalse(self.field.enabled)
self.assertFalse(self.field.reversed)
with self.assertRaises(KeyError):
emmental.tracklist.sorter.SortField(self.model, "Invalid Field")
def test_str(self):
"""Test converting a Sort Field to a string."""
for (field, cols) in emmental.tracklist.sorter.SORT_FIELDS.items():
expected = ", ".join(cols)
reversed = ", ".join([f"{c} DESC" for c in cols])
with self.subTest(field=field, expected=(expected, reversed)):
self.field.name = field
self.field.reversed = False
self.assertEqual(str(self.field), expected)
self.field.reversed = True
self.assertEqual(str(self.field), reversed)
def test_disable(self):
"""Test disabling a Sort Field."""
self.model.disable = unittest.mock.Mock()
self.field.disable()
self.model.disable.assert_called_with(self.field)
def test_enable(self):
"""Test enabling a Sort Field."""
self.model.enable = unittest.mock.Mock()
self.field.enable()
self.model.enable.assert_called_with(self.field)
def test_move_down(self):
"""Test moving a Sort Field down."""
self.model.move_down = unittest.mock.Mock()
self.field.move_down()
self.model.move_down.assert_called_with(self.field)
def test_move_up(self):
"""Test moving a Sort Field up."""
self.model.move_up = unittest.mock.Mock()
self.field.move_up()
self.model.move_up.assert_called_with(self.field)
def test_reverse(self):
"""Test reversing a Sort Field."""
self.model.reverse = unittest.mock.Mock()
self.field.reverse()
self.model.reverse.assert_called_with(self.field)