emmental/tests/playlist/test_previous.py

93 lines
3.7 KiB
Python

# Copyright 2023 (c) Anna Schumaker.
"""Tests our Previous Tracks Playlist model."""
import pathlib
import tests.util
import emmental.playlist.previous
class TestPrevious(tests.util.TestCase):
"""Tests the Previous Playlist Gio.ListModel."""
def setUp(self):
"""Set up common variables."""
super().setUp()
self.sql.playlists.load(now=True)
self.previous = emmental.playlist.previous.Previous(
self.sql, self.sql.playlists.previous)
self.library = self.sql.libraries.create(pathlib.Path("/a/b"))
self.album = self.sql.albums.create("Test Album", "Artist", "2023")
self.medium = self.sql.media.create(self.album, "", number=1)
self.year = self.sql.years.create(2023)
self.tracks = [self.sql.tracks.create(self.library,
pathlib.Path(f"/a/b/{i}.ogg"),
self.medium, self.year, number=i)
for i in range(1, 6)]
def test_init(self):
"""Test that the Previous Playlist was set up correctly."""
self.assertIsInstance(self.previous,
emmental.playlist.playlist.Playlist)
self.assertEqual(self.previous.playlist, self.sql.playlists.previous)
def test_can_go_forward(self):
"""Test the can-go-forward property."""
self.assertFalse(self.previous.can_go_forward)
self.tracks[0].start()
self.assertFalse(self.previous.can_go_forward)
self.tracks[1].start()
self.assertFalse(self.previous.can_go_forward)
self.previous.next_track()
self.assertTrue(self.previous.can_go_forward)
def test_start_tracks(self):
"""Test that tracks added to the playlist are sorted correctly."""
self.tracks[0].start()
self.assertEqual(self.previous[0], self.tracks[0])
self.assertEqual(self.previous.current_track, self.tracks[0])
self.tracks[1].start()
self.assertEqual(self.previous[0], self.tracks[1])
self.assertEqual(self.previous[1], self.tracks[0])
self.tracks[2].start()
self.assertEqual(self.previous[0], self.tracks[2])
self.assertEqual(self.previous[1], self.tracks[1])
self.assertEqual(self.previous[2], self.tracks[0])
def test_previous_track(self):
"""Test the previous_track() function."""
self.assertIsNone(self.previous.previous_track())
for track in self.tracks:
track.start()
self.previous.current_track = self.tracks[0]
self.assertEqual(self.previous.previous_track(), self.tracks[1])
self.assertEqual(self.previous.previous_track(), self.tracks[2])
self.assertEqual(self.previous.previous_track(), self.tracks[3])
self.assertEqual(self.previous.previous_track(), self.tracks[4])
self.assertIsNone(self.previous.previous_track())
self.previous.playlist = None
self.assertIsNone(self.previous.previous_track())
def test_next_previous_track(self):
"""Test mixing the next_track() and previous_track() functions."""
for track in self.tracks:
track.start()
self.assertEqual(self.previous.next_track(), self.tracks[3])
self.assertEqual(self.previous.next_track(), self.tracks[2])
self.assertEqual(self.previous.next_track(), self.tracks[1])
self.assertEqual(self.previous.next_track(), self.tracks[0])
self.assertIsNone(self.previous.next_track())
self.assertEqual(self.previous.previous_track(), self.tracks[1])
self.assertEqual(self.previous.previous_track(), self.tracks[2])
self.assertEqual(self.previous.previous_track(), self.tracks[3])