# 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])