MetaSync: basic tests

No tests for Amarok, unfortunately
This commit is contained in:
Tom Jaspers 2015-05-10 14:46:59 +02:00
parent abd02052b9
commit afeedd2e70
2 changed files with 264 additions and 0 deletions

View file

@ -0,0 +1,173 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Major Version</key><integer>1</integer>
<key>Minor Version</key><integer>1</integer>
<key>Date</key><date>2015-05-08T14:36:28Z</date>
<key>Application Version</key><string>12.1.2.27</string>
<key>Features</key><integer>5</integer>
<key>Show Content Ratings</key><true/>
<key>Music Folder</key><string>file:///beetstests/Music/iTunes/iTunes%20Media/</string>
<key>Library Persistent ID</key><string>1ABA8417E4946A32</string>
<key>Tracks</key>
<dict>
<key>634</key>
<dict>
<key>Track ID</key><integer>634</integer>
<key>Name</key><string>Tessellate</string>
<key>Artist</key><string>alt-J</string>
<key>Album Artist</key><string>alt-J</string>
<key>Album</key><string>An Awesome Wave</string>
<key>Genre</key><string>Alternative</string>
<key>Kind</key><string>MPEG audio file</string>
<key>Size</key><integer>5525212</integer>
<key>Total Time</key><integer>182674</integer>
<key>Disc Number</key><integer>1</integer>
<key>Disc Count</key><integer>1</integer>
<key>Track Number</key><integer>3</integer>
<key>Track Count</key><integer>13</integer>
<key>Year</key><integer>2012</integer>
<key>Date Modified</key><date>2015-02-02T15:23:08Z</date>
<key>Date Added</key><date>2014-04-24T09:28:38Z</date>
<key>Bit Rate</key><integer>238</integer>
<key>Sample Rate</key><integer>44100</integer>
<key>Play Count</key><integer>0</integer>
<key>Play Date</key><integer>3513593824</integer>
<key>Skip Count</key><integer>3</integer>
<key>Skip Date</key><date>2015-02-05T15:41:04Z</date>
<key>Rating</key><integer>80</integer>
<key>Album Rating</key><integer>80</integer>
<key>Album Rating Computed</key><true/>
<key>Artwork Count</key><integer>1</integer>
<key>Sort Album</key><string>Awesome Wave</string>
<key>Sort Artist</key><string>alt-J</string>
<key>Persistent ID</key><string>20E89D1580C31363</string>
<key>Track Type</key><string>File</string>
<key>Location</key><string>file:///beetstests/Music/Music/Alt-J/An%20Awesome%20Wave/03%20Tessellate.mp3</string>
<key>File Folder Count</key><integer>4</integer>
<key>Library Folder Count</key><integer>2</integer>
</dict>
<key>636</key>
<dict>
<key>Track ID</key><integer>636</integer>
<key>Name</key><string>Breezeblocks</string>
<key>Artist</key><string>alt-J</string>
<key>Album Artist</key><string>alt-J</string>
<key>Album</key><string>An Awesome Wave</string>
<key>Genre</key><string>Alternative</string>
<key>Kind</key><string>MPEG audio file</string>
<key>Size</key><integer>6827195</integer>
<key>Total Time</key><integer>227082</integer>
<key>Disc Number</key><integer>1</integer>
<key>Disc Count</key><integer>1</integer>
<key>Track Number</key><integer>4</integer>
<key>Track Count</key><integer>13</integer>
<key>Year</key><integer>2012</integer>
<key>Date Modified</key><date>2015-02-02T15:23:08Z</date>
<key>Date Added</key><date>2014-04-24T09:28:38Z</date>
<key>Bit Rate</key><integer>237</integer>
<key>Sample Rate</key><integer>44100</integer>
<key>Play Count</key><integer>31</integer>
<key>Play Date</key><integer>3513594051</integer>
<key>Play Date UTC</key><date>2015-05-04T12:20:51Z</date>
<key>Skip Count</key><integer>0</integer>
<key>Rating</key><integer>100</integer>
<key>Album Rating</key><integer>80</integer>
<key>Album Rating Computed</key><true/>
<key>Artwork Count</key><integer>1</integer>
<key>Sort Album</key><string>Awesome Wave</string>
<key>Sort Artist</key><string>alt-J</string>
<key>Persistent ID</key><string>D7017B127B983D38</string>
<key>Track Type</key><string>File</string>
<key>Location</key><string>file:///beetstests/Music/Music/Alt-J/An%20Awesome%20Wave/04%20Breezeblocks.mp3</string>
<key>File Folder Count</key><integer>4</integer>
<key>Library Folder Count</key><integer>2</integer>
</dict>
</dict>
<key>Playlists</key>
<array>
<dict>
<key>Name</key><string>Library</string>
<key>Master</key><true/>
<key>Playlist ID</key><integer>11480</integer>
<key>Playlist Persistent ID</key><string>CD6FF684E7A6A166</string>
<key>Visible</key><false/>
<key>All Items</key><true/>
<key>Playlist Items</key>
<array>
<dict>
<key>Track ID</key><integer>634</integer>
</dict>
<dict>
<key>Track ID</key><integer>636</integer>
</dict>
</array>
</dict>
<dict>
<key>Name</key><string>Music</string>
<key>Playlist ID</key><integer>16906</integer>
<key>Playlist Persistent ID</key><string>4FB2E64E0971DD45</string>
<key>Distinguished Kind</key><integer>4</integer>
<key>Music</key><true/>
<key>All Items</key><true/>
<key>Playlist Items</key>
<array>
<dict>
<key>Track ID</key><integer>634</integer>
</dict>
<dict>
<key>Track ID</key><integer>636</integer>
</dict>
</array>
</dict>
<dict>
<key>Name</key><string>Movies</string>
<key>Playlist ID</key><integer>22338</integer>
<key>Playlist Persistent ID</key><string>ED848683ABD912C5</string>
<key>Distinguished Kind</key><integer>2</integer>
<key>Movies</key><true/>
<key>All Items</key><true/>
</dict>
<dict>
<key>Name</key><string>TV Shows</string>
<key>Playlist ID</key><integer>22344</integer>
<key>Playlist Persistent ID</key><string>030882163A22E881</string>
<key>Distinguished Kind</key><integer>3</integer>
<key>TV Shows</key><true/>
<key>All Items</key><true/>
</dict>
<dict>
<key>Name</key><string>Podcasts</string>
<key>Playlist ID</key><integer>22347</integer>
<key>Playlist Persistent ID</key><string>8A8C2A6F094235CF</string>
<key>Distinguished Kind</key><integer>10</integer>
<key>Podcasts</key><true/>
<key>All Items</key><true/>
</dict>
<dict>
<key>Name</key><string>iTunes U</string>
<key>Playlist ID</key><integer>22354</integer>
<key>Playlist Persistent ID</key><string>571BAA51CE17C191</string>
<key>Distinguished Kind</key><integer>31</integer>
<key>iTunesU</key><true/>
<key>All Items</key><true/>
</dict>
<dict>
<key>Name</key><string>Audiobooks</string>
<key>Playlist ID</key><integer>22357</integer>
<key>Playlist Persistent ID</key><string>2D2BE73BF9612562</string>
<key>Distinguished Kind</key><integer>5</integer>
<key>Audiobooks</key><true/>
<key>All Items</key><true/>
</dict>
<dict>
<key>Name</key><string>Genius</string>
<key>Playlist ID</key><integer>22372</integer>
<key>Playlist Persistent ID</key><string>F35301460DED0A7A</string>
<key>Distinguished Kind</key><integer>26</integer>
<key>All Items</key><true/>
</dict>
</array>
</dict>
</plist>

91
test/test_metasync.py Normal file
View file

@ -0,0 +1,91 @@
# This file is part of beets.
# Copyright 2015, Tom Jaspers.
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
import os
from beets.library import Item
from test import _common
from test._common import unittest
from test.helper import TestHelper
class MetaSyncTest(_common.TestCase, TestHelper):
itunes_library = os.path.join(_common.RSRC, 'itunes_library.xml')
def setUp(self):
self.setup_beets()
self.load_plugins('metasync')
self.config['metasync']['source'] = 'itunes'
self.config['metasync']['itunes']['library'] = self.itunes_library
self._set_up_data()
def _set_up_data(self):
items = [_common.item() for _ in range(2)]
items[0].title = 'Tessellate'
items[0].artist = 'alt-J'
items[0].albumartist = 'alt-J'
items[0].album = 'An Awesome Wave'
items[0].itunes_rating = 60
items[1].title = 'Breezeblocks'
items[1].artist = 'alt-J'
items[1].albumartist = 'alt-J'
items[1].album = 'An Awesome Wave'
for item in items:
self.lib.add(item)
def tearDown(self):
self.unload_plugins()
self.teardown_beets()
def test_load_item_types(self):
# This test also verifies that the MetaSources have loaded correctly
self.assertIn('amarok_score', Item._types)
self.assertIn('itunes_rating', Item._types)
def test_pretend_sync_from_itunes(self):
out = self.run_with_output('metasync', '-p')
self.assertIn('itunes_rating: 60 -> 80', out)
self.assertIn('itunes_rating: 100', out)
self.assertIn('itunes_playcount: 31', out)
self.assertIn('itunes_skipcount: 3', out)
self.assertIn('itunes_lastplayed: 2015-05-04 12:20:51', out)
self.assertIn('itunes_lastskipped: 2015-02-05 15:41:04', out)
self.assertEqual(self.lib.items()[0].itunes_rating, 60)
def test_sync_from_itunes(self):
self.run_command('metasync')
self.assertEqual(self.lib.items()[0].itunes_rating, 80)
self.assertEqual(self.lib.items()[0].itunes_playcount, 0)
self.assertEqual(self.lib.items()[0].itunes_skipcount, 3)
self.assertFalse(hasattr(self.lib.items()[0], 'itunes_lastplayed'))
self.assertEqual(self.lib.items()[0].itunes_lastskipped, 1423147264.0)
self.assertEqual(self.lib.items()[1].itunes_rating, 100)
self.assertEqual(self.lib.items()[1].itunes_playcount, 31)
self.assertEqual(self.lib.items()[1].itunes_skipcount, 0)
self.assertEqual(self.lib.items()[1].itunes_lastplayed, 1430734851.0)
self.assertFalse(hasattr(self.lib.items()[1], 'itunes_lastskipped'))
def suite():
return unittest.TestLoader().loadTestsFromName(__name__)
if __name__ == b'__main__':
unittest.main(defaultTest='suite')