from PyQt5.QtCore import Qt from app.playlists import Notes, PlaylistTab, Tracks from app.models import Playlists from musicmuster import Window def test_init(qtbot, session): """Just check we can create a playlist_tab""" playlist = Playlists(session, "my playlist") playlist_tab = PlaylistTab(None, session, playlist) assert playlist_tab def test_save_and_restore(qtbot, session): """Playlist with one track, one note, save and restore""" # Create playlist playlist = Playlists(session, "my playlist") playlist_tab = PlaylistTab(None, session, playlist) # Insert a note note_text = "my note" note_row = 7 note = Notes(session, playlist.id, note_row, note_text) playlist_tab._insert_note(session, note) # Add a track track_path = "/a/b/c" track = Tracks(session, track_path) playlist_tab.insert_track(session, track) # Save playlist playlist_tab.save_playlist(session) # Retrieve playlist playlists = Playlists.get_open(session) assert len(playlists) == 1 retrieved_playlist = playlists[0] assert track_path in [a.path for a in retrieved_playlist.tracks.values()] assert note_text in [a.note for a in retrieved_playlist.notes] def test_meta_all_clear(qtbot, session): # Create playlist playlist = Playlists(session, "my playlist") playlist_tab = PlaylistTab(None, session, playlist) # Add some tracks track1_path = "/a/b/c" track1 = Tracks(session, track1_path) playlist_tab.insert_track(session, track1) track2_path = "/d/e/f" track2 = Tracks(session, track2_path) playlist_tab.insert_track(session, track2) track3_path = "/h/i/j" track3 = Tracks(session, track3_path) playlist_tab.insert_track(session, track3) assert playlist_tab._get_current_track_row() is None assert playlist_tab._get_next_track_row() is None assert playlist_tab._get_notes_rows() == [] assert playlist_tab._get_played_track_rows() == [] assert len(playlist_tab._get_unreadable_track_rows()) == 3 def test_meta(qtbot, session): # Create playlist playlist = Playlists(session, "my playlist") playlist_tab = PlaylistTab(None, session, playlist) # Add some tracks track1_path = "/a/b/c" track1 = Tracks(session, track1_path) playlist_tab.insert_track(session, track1) track2_path = "/d/e/f" track2 = Tracks(session, track2_path) playlist_tab.insert_track(session, track2) track3_path = "/h/i/j" track3 = Tracks(session, track3_path) playlist_tab.insert_track(session, track3) assert len(playlist_tab._get_unreadable_track_rows()) == 3 assert playlist_tab._get_played_track_rows() == [] assert playlist_tab._get_current_track_row() is None assert playlist_tab._get_next_track_row() is None assert playlist_tab._get_notes_rows() == [] playlist_tab._set_played_row(0) assert playlist_tab._get_played_track_rows() == [0] assert playlist_tab._get_current_track_row() is None assert playlist_tab._get_next_track_row() is None assert playlist_tab._get_notes_rows() == [] # Add a note note_text = "my note" note_row = 7 # will be added as row 3 note = Notes(session, playlist.id, note_row, note_text) playlist_tab._insert_note(session, note) assert playlist_tab._get_played_track_rows() == [0] assert playlist_tab._get_current_track_row() is None assert playlist_tab._get_next_track_row() is None assert playlist_tab._get_notes_rows() == [3] playlist_tab._set_next_track_row(1) assert playlist_tab._get_played_track_rows() == [0] assert playlist_tab._get_current_track_row() is None assert playlist_tab._get_next_track_row() == 1 assert playlist_tab._get_notes_rows() == [3] playlist_tab._set_current_track_row(2) assert playlist_tab._get_played_track_rows() == [0] assert playlist_tab._get_current_track_row() == 2 assert playlist_tab._get_next_track_row() == 1 assert playlist_tab._get_notes_rows() == [3] playlist_tab._clear_played_row_status(0) assert playlist_tab._get_played_track_rows() == [] assert playlist_tab._get_current_track_row() == 2 assert playlist_tab._get_next_track_row() == 1 assert playlist_tab._get_notes_rows() == [3] playlist_tab._meta_clear_next() assert playlist_tab._get_played_track_rows() == [] assert playlist_tab._get_current_track_row() == 2 assert playlist_tab._get_next_track_row() is None assert playlist_tab._get_notes_rows() == [3] playlist_tab._clear_current_track_row() assert playlist_tab._get_played_track_rows() == [] assert playlist_tab._get_current_track_row() is None assert playlist_tab._get_next_track_row() is None assert playlist_tab._get_notes_rows() == [3] # Test clearing again has no effect playlist_tab._clear_current_track_row() assert playlist_tab._get_played_track_rows() == [] assert playlist_tab._get_current_track_row() is None assert playlist_tab._get_next_track_row() is None assert playlist_tab._get_notes_rows() == [3] def test_clear_next(qtbot, session): # Create playlist playlist = Playlists(session, "my playlist") playlist_tab = PlaylistTab(None, session, playlist) # Add some tracks track1_path = "/a/b/c" track1 = Tracks(session, track1_path) playlist_tab.insert_track(session, track1) track2_path = "/d/e/f" track2 = Tracks(session, track2_path) playlist_tab.insert_track(session, track2) playlist_tab._set_next_track_row(1) assert playlist_tab._get_next_track_row() == 1 playlist_tab.clear_next(session) assert playlist_tab._get_next_track_row() is None def test_get_selected_row(qtbot, session): # Create playlist playlist = Playlists(session, "my playlist") playlist_tab = PlaylistTab(None, session, playlist) # Add some tracks track1_path = "/a/b/c" track1 = Tracks(session, track1_path) playlist_tab.insert_track(session, track1) track2_path = "/d/e/f" track2 = Tracks(session, track2_path) playlist_tab.insert_track(session, track2) window = Window() qtbot.addWidget(playlist_tab) with qtbot.waitExposed(window): window.show() row0_item0 = playlist_tab.item(0, 0) assert row0_item0 is not None rect = playlist_tab.visualItemRect(row0_item0) qtbot.mouseClick( playlist_tab.viewport(), Qt.LeftButton, pos=rect.center() )