def test_fcfs_selection(self): set_config_value('SELECTION_SCHEME', 'FCFS') load_config_from_db() self.mpd.clear() _ensure_mpd_playlist_consistency(self.mpd) assert len(self.mpd.playlistinfo()) == 0 assert len(PlayQueueEntry.query.all()) == 0 # Simulate 5 users queueing up 10 tracks each in serial users = [] for i in range(1, 4): user = self.create_test_user() for i in range(1, 4): users.append(user) track = self.random_sample_track() add_track_from_spotify_url(self.mpd, track['file'], user.id) # Simulate the callback chain that would occur in the wild last_order = [] while last_order != [i['id'] for i in self.mpd.playlistinfo()]: last_order = [i['id'] for i in self.mpd.playlistinfo()] _ensure_mpd_playlist_consistency(self.mpd) mpd_playlist = self.mpd.playlistinfo() db_tracks = PlayQueueEntry.query.order_by(PlayQueueEntry.playback_priority.asc()).all() for (pqe, mpd_track) in zip(db_tracks, mpd_playlist): assert pqe.playback_priority == mpd_track['pos'] for (pqe, prop_user) in zip(db_tracks, users): assert pqe.user == prop_user
def test_fcfs_selection(self): set_config_value('SELECTION_SCHEME', 'FCFS') load_config_from_db() self.mpd.clear() _ensure_mpd_playlist_consistency(self.mpd) assert len(self.mpd.playlistinfo()) == 0 assert len(PlayQueueEntry.query.all()) == 0 # Simulate 5 users queueing up 10 tracks each in serial users = [] for i in range(1, 4): user = self.create_test_user() for i in range(1, 4): users.append(user) track = self.random_sample_track() add_track_from_spotify_url(self.mpd, track['file'], user.id) # Simulate the callback chain that would occur in the wild last_order = [] while last_order != [i['id'] for i in self.mpd.playlistinfo()]: last_order = [i['id'] for i in self.mpd.playlistinfo()] _ensure_mpd_playlist_consistency(self.mpd) mpd_playlist = self.mpd.playlistinfo() db_tracks = PlayQueueEntry.query.order_by( PlayQueueEntry.playback_priority.asc()).all() for (pqe, mpd_track) in zip(db_tracks, mpd_playlist): assert pqe.playback_priority == mpd_track['pos'] for (pqe, prop_user) in zip(db_tracks, users): assert pqe.user == prop_user
def test_nxtrack_purge(self): self.mpd.clear() track = track_from_spotify_url("spotify:track:6LDYVzxjDSAO92UZ5veM3u") self.db.session.add(PlayQueueEntry(track=track, mpd_id=0)) self.db.session.commit() _ensure_mpd_playlist_consistency(self.mpd) assert len(self.mpd.playlistinfo()) == 0 assert len(PlayQueueEntry.query.all()) == 0
def test_add_anon_track(self): self.mpd.clear() _ensure_mpd_playlist_consistency(self.mpd) self.mpd.addid("spotify:track:6LDYVzxjDSAO92UZ5veM3u") _ensure_mpd_playlist_consistency(self.mpd) assert len(self.mpd.playlistinfo()) == 1 assert len(PlayQueueEntry.query.all()) == 1 db_entry = PlayQueueEntry.query.first() assert db_entry.track.spotify_url == "spotify:track:6LDYVzxjDSAO92UZ5veM3u" assert db_entry.user is None
def test_fcfs_with_voting_selection(self): set_config_value('SELECTION_SCHEME', 'FCFS_VOTE') load_config_from_db() self.mpd.clear() _ensure_mpd_playlist_consistency(self.mpd) assert len(self.mpd.playlistinfo()) == 0 assert len(PlayQueueEntry.query.all()) == 0 user1 = self.create_test_user() user2 = self.create_test_user() tracks = [] for i in range(1, 11): st = self.random_sample_track() tracks.append( add_track_from_spotify_url(self.mpd, st['file'], user1.id)) # Simulate the callback chain that would occur in the wild last_order = [] while last_order != [i['id'] for i in self.mpd.playlistinfo()]: last_order = [i['id'] for i in self.mpd.playlistinfo()] _ensure_mpd_playlist_consistency(self.mpd) for mpd_track, expected_track in zip(self.mpd.playlistinfo(), tracks): assert mpd_track['file'] == expected_track.spotify_url r = random.Random() pqes = PlayQueueEntry.query.order_by(PlayQueueEntry.time_added).all() up_voted = [] down_voted = [] for i in range(1, 4): pqe = r.choice(pqes) pqes.remove(pqe) up_voted.append(pqe) vote = Vote(user=user2, pqe=pqe, direction=1) db.session.add(vote) for i in range(1, 4): pqe = r.choice(pqes) pqes.remove(pqe) down_voted.append(pqe) vote = Vote(user=user2, pqe=pqe, direction=-1) db.session.add(vote) db.session.commit() up_voted = sorted(up_voted, key=lambda x: x.time_added) down_voted = sorted(down_voted, key=lambda x: x.time_added) expected_order = up_voted + pqes + down_voted # Simulate the callback chain that would occur in the wild last_order = [] while last_order != [i['id'] for i in self.mpd.playlistinfo()]: last_order = [i['id'] for i in self.mpd.playlistinfo()] _ensure_mpd_playlist_consistency(self.mpd) for mpd_track, expected_track in zip(self.mpd.playlistinfo(), expected_order): assert mpd_track['file'] == expected_track.track.spotify_url
def test_fcfs_with_voting_selection(self): set_config_value('SELECTION_SCHEME', 'FCFS_VOTE') load_config_from_db() self.mpd.clear() _ensure_mpd_playlist_consistency(self.mpd) assert len(self.mpd.playlistinfo()) == 0 assert len(PlayQueueEntry.query.all()) == 0 user1 = self.create_test_user() user2 = self.create_test_user() tracks = [] for i in range(1,11): st = self.random_sample_track() tracks.append(add_track_from_spotify_url(self.mpd, st['file'], user1.id)) # Simulate the callback chain that would occur in the wild last_order = [] while last_order != [i['id'] for i in self.mpd.playlistinfo()]: last_order = [i['id'] for i in self.mpd.playlistinfo()] _ensure_mpd_playlist_consistency(self.mpd) for mpd_track, expected_track in zip(self.mpd.playlistinfo(), tracks): assert mpd_track['file'] == expected_track.spotify_url r = random.Random() pqes = PlayQueueEntry.query.order_by(PlayQueueEntry.time_added).all() up_voted = [] down_voted = [] for i in range(1,4): pqe = r.choice(pqes) pqes.remove(pqe) up_voted.append(pqe) vote = Vote(user=user2, pqe=pqe, direction=1) db.session.add(vote) for i in range(1,4): pqe = r.choice(pqes) pqes.remove(pqe) down_voted.append(pqe) vote = Vote(user=user2, pqe=pqe, direction=-1) db.session.add(vote) db.session.commit() up_voted = sorted(up_voted, key=lambda x: x.time_added) down_voted = sorted(down_voted, key=lambda x: x.time_added) expected_order = up_voted + pqes + down_voted # Simulate the callback chain that would occur in the wild last_order = [] while last_order != [i['id'] for i in self.mpd.playlistinfo()]: last_order = [i['id'] for i in self.mpd.playlistinfo()] _ensure_mpd_playlist_consistency(self.mpd) for mpd_track, expected_track in zip(self.mpd.playlistinfo(), expected_order): assert mpd_track['file'] == expected_track.track.spotify_url