| 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
 | """Tests for the watcher module."""
from os import remove
from os.path import dirname, join, realpath
from shutil import copy, move, rmtree
from tempfile import mkdtemp
import unittest
import mutagen
import six
from db.db_manager import DbManager
from models.track import Track
from watcher import LibraryWatcher
if six.PY2:
    def _u(string):
        return unicode(string, encoding="utf_8")
else:
    def _u(string):
        return string
class WatcherTestCase(unittest.TestCase):
    """Defines tests for the watcher module.
    Extends:
        unittest.Testcase
    """
    @classmethod
    def setUpClass(cls):
        """Set up fixtures for the tests."""
        cls._tempdir = mkdtemp()
        cls._tempdbdir = mkdtemp()
        cls._db_path = join(cls._tempdbdir, "test.db")
        copy(join(dirname(realpath(__file__)), "test.db"), cls._db_path)
        cls._db = DbManager(cls._db_path)
        cls._watcher = LibraryWatcher(cls._tempdir, cls._db_path)
    @classmethod
    def tearDownClass(cls):
        """Remove test fixtures."""
        cls._watcher.stop()
        rmtree(cls._tempdbdir)
        rmtree(cls._tempdir)
    def test_watcher_actions(self):
        """Test creating, moving, modifying and deleting a file."""
        new_file = join(dirname(realpath(__file__)), "testnew.ogg")
        copy(new_file, self._tempdir)
        self._watcher.check_for_events()
        found_track = Track.find_by_path(join(self._tempdir, "testnew.ogg"),
                                         self._db)
        assert found_track
        assert "testnew.ogg" in found_track.filename
        assert found_track.artists
        found_artist = False
        for artist in found_track.artists:
            if _u("Art Ist") == artist.name:
                found_artist = True
                break
        assert found_artist
        original_file = join(self._tempdir, "testnew.ogg")
        moved_file = join(self._tempdir, "testmoved.ogg")
        move(original_file, moved_file)
        self._watcher.check_for_events()
        moved_track = Track.find_by_path(moved_file, self._db)
        assert moved_track
        assert "testmoved.ogg" in moved_track.filename
        original_metadata = mutagen.File(moved_file, easy=True)
        original_metadata["title"] = [_u("New title")]
        original_metadata.save()
        self._watcher.check_for_events()
        modified_track = Track.find_by_path(moved_file, self._db)
        assert modified_track
        assert modified_track.name == "New title"
        remove(moved_file)
        self._watcher.check_for_events()
        assert Track.find_by_path(moved_file, self._db) is None
 |