84 lines
2.2 KiB
Python
84 lines
2.2 KiB
Python
import unittest
|
|
from datetime import date
|
|
|
|
from mopidy.scanner import Scanner, translator
|
|
from mopidy.models import Track, Artist, Album
|
|
|
|
from tests import data_folder
|
|
|
|
class FakeGstDate(object):
|
|
def __init__(self, year, month, day):
|
|
self.year = year
|
|
self.month = month
|
|
self.day = day
|
|
|
|
class TranslatorTest(unittest.TestCase):
|
|
def test_basic_data(self):
|
|
data = {
|
|
'uri': 'uri',
|
|
'album': u'albumname',
|
|
'track-number': 1,
|
|
'artist': u'name',
|
|
'title': u'trackname',
|
|
'track-count': 2,
|
|
'date': FakeGstDate(2006, 1, 1,),
|
|
'container-format': u'ID3 tag',
|
|
# length etc?
|
|
}
|
|
|
|
expected = Track(
|
|
uri='uri',
|
|
name='trackname',
|
|
album=Album(name='albumname', num_tracks=2),
|
|
artists=[Artist(name='name')],
|
|
date=date(2006, 1, 1),
|
|
track_no=1,
|
|
)
|
|
|
|
actual = translator(data)
|
|
|
|
self.assertEqual(expected, actual)
|
|
|
|
|
|
class ScannerTest(unittest.TestCase):
|
|
def setUp(self):
|
|
self.errors = {}
|
|
self.data = {}
|
|
|
|
def scan(self, path):
|
|
scanner = Scanner(data_folder(path),
|
|
self.data_callback, self.error_callback)
|
|
scanner.start()
|
|
|
|
def check(self, name, key, value):
|
|
name = data_folder(name)
|
|
self.assertEqual(self.data[name][key], value)
|
|
|
|
def data_callback(self, uri, data):
|
|
uri = uri[len('file://'):]
|
|
self.data[uri] = data
|
|
|
|
def error_callback(self, uri, errors):
|
|
uri = uri[len('file://'):]
|
|
self.errors[uri] = errors
|
|
|
|
def test_data_is_set(self):
|
|
self.scan('scanner/simple')
|
|
self.assert_(self.data)
|
|
|
|
def test_errors_is_not_set(self):
|
|
self.scan('scanner/simple')
|
|
self.assert_(not self.errors)
|
|
|
|
def test_artist_is_set(self):
|
|
self.scan('scanner/simple')
|
|
self.check('scanner/simple/song1.mp3', 'artist', 'name')
|
|
|
|
def test_album_is_set(self):
|
|
self.scan('scanner/simple')
|
|
self.check('scanner/simple/song1.mp3', 'album', 'albumname')
|
|
|
|
def test_track_is_set(self):
|
|
self.scan('scanner/simple')
|
|
self.check('scanner/simple/song1.mp3', 'title', 'trackname')
|