File: test_history.py

package info (click to toggle)
mopidy 3.4.2-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,696 kB
  • sloc: python: 16,669; sh: 159; makefile: 127
file content (112 lines) | stat: -rw-r--r-- 3,608 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import unittest

from mopidy.core import HistoryController
from mopidy.internal.models import HistoryState, HistoryTrack
from mopidy.models import Artist, Ref, Track


class PlaybackHistoryTest(unittest.TestCase):
    def setUp(self):  # noqa: N802
        self.tracks = [
            Track(
                uri="dummy1:a",
                name="foo",
                artists=[Artist(name="foober"), Artist(name="barber")],
            ),
            Track(uri="dummy2:a", name="foo"),
            Track(uri="dummy3:a", name="bar"),
            Track(uri="dummy4:a", name="foo", artists=[Artist(name=None)]),
        ]
        self.history = HistoryController()

    def test_add_track(self):
        self.history._add_track(self.tracks[0])
        assert self.history.get_length() == 1

        self.history._add_track(self.tracks[1])
        assert self.history.get_length() == 2

        self.history._add_track(self.tracks[2])
        assert self.history.get_length() == 3

    def test_non_tracks_are_rejected(self):
        with self.assertRaises(TypeError):
            self.history._add_track(object())

        assert self.history.get_length() == 0

    def test_history_entry_contents(self):
        track = self.tracks[0]
        self.history._add_track(track)

        result = self.history.get_history()
        (timestamp, ref) = result[0]

        assert isinstance(timestamp, int)
        assert track.uri == ref.uri
        assert track.name in ref.name
        for artist in track.artists:
            assert artist.name in ref.name

    def test_track_artist_no_name(self):
        self.history._add_track(self.tracks[3])
        assert self.history.get_length() == 1


class CoreHistorySaveLoadStateTest(unittest.TestCase):
    def setUp(self):  # noqa: N802
        self.tracks = [
            Track(uri="dummy1:a", name="foober"),
            Track(uri="dummy2:a", name="foo"),
            Track(uri="dummy3:a", name="bar"),
        ]

        self.refs = []
        for t in self.tracks:
            self.refs.append(Ref.track(uri=t.uri, name=t.name))

        self.history = HistoryController()

    def test_save(self):
        self.history._add_track(self.tracks[2])
        self.history._add_track(self.tracks[1])

        value = self.history._save_state()

        assert len(value.history) == 2
        # last in, first out
        assert value.history[0].track == self.refs[1]
        assert value.history[1].track == self.refs[2]

    def test_load(self):
        state = HistoryState(
            history=[
                HistoryTrack(timestamp=34, track=self.refs[0]),
                HistoryTrack(timestamp=45, track=self.refs[2]),
                HistoryTrack(timestamp=56, track=self.refs[1]),
            ]
        )
        coverage = ["history"]
        self.history._load_state(state, coverage)

        hist = self.history.get_history()
        assert len(hist) == 3
        assert hist[0] == (34, self.refs[0])
        assert hist[1] == (45, self.refs[2])
        assert hist[2] == (56, self.refs[1])

        # after import, adding more tracks must be possible
        self.history._add_track(self.tracks[1])
        hist = self.history.get_history()
        assert len(hist) == 4
        assert hist[0][1] == self.refs[1]
        assert hist[1] == (34, self.refs[0])
        assert hist[2] == (45, self.refs[2])
        assert hist[3] == (56, self.refs[1])

    def test_load_invalid_type(self):
        with self.assertRaises(TypeError):
            self.history._load_state(11, None)

    def test_load_none(self):
        self.history._load_state(None, None)