コード例 #1
0
    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
コード例 #2
0
ファイル: queue_test.py プロジェクト: charlierm/partify
    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
コード例 #3
0
    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
コード例 #4
0
ファイル: queue_test.py プロジェクト: charlierm/partify
    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