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 113 114 115
|
# Copyright 2018 Phidica Veia
# 2021 Nick Boultbee
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
import sqlite3
from senf import fsn2uri
from quodlibet.formats import AudioFile
from tests.helper import temp_filename
from quodlibet.library import SongFileLibrary
from . import PluginTestCase
def get_example_db(song_path, rating, playcount, skipcount, lastplayed,
dateadded):
# create a temporary database in memory
db = sqlite3.connect(':memory:')
# create a simplified version of a banshee track table
csr = db.cursor()
csr.execute('''CREATE TABLE CoreTracks(
ArtistID INTEGER,
AlbumID INTEGER,
Uri TEXT,
Title TEXT,
Rating INTEGER,
PlayCount INTEGER,
SkipCount INTEGER,
LastPlayedStamp INTEGER,
DateAddedStamp INTEGER
)
''')
# insert song and save
song_uri = fsn2uri(song_path)
csr.execute('INSERT INTO CoreTracks VALUES (?,?,?,?,?,?,?,?,?)',
(1, 1, song_uri, 'Music', rating, playcount, skipcount,
lastplayed, dateadded))
db.commit()
# give the user the in-memory database
return db
class TBansheeImport(PluginTestCase):
def setUp(self):
self.mod = self.modules["bansheeimport"]
def test(self):
lib = SongFileLibrary()
with temp_filename() as song_fn:
song = AudioFile({"~filename": song_fn})
song.sanitize()
lib.add([song])
# test recovery of basic song
data = {"path": song("~filename"), "rating": 1,
"playcount": 1, "skipcount": 2,
"lastplayed": 1371802107, "added": 1260691996}
db = get_example_db(data["path"], data["rating"],
data["playcount"], data["skipcount"],
data["lastplayed"], data["added"])
importer = self.mod.BansheeDBImporter(lib)
importer.read(db)
count = importer.finish()
db.close()
self.assertEqual(song("~#rating"), data["rating"] / 5.0)
self.assertEqual(song("~#playcount"), data["playcount"])
self.assertEqual(song("~#skipcount"), data["skipcount"])
self.assertEqual(song("~#lastplayed"), data["lastplayed"])
self.assertEqual(song("~#added"), data["added"])
self.assertEqual(count, 1)
# test recovery of different version of same song
data_mod = {"path": song("~filename"), "rating": 2,
"playcount": 4, "skipcount": 1,
"lastplayed": data["lastplayed"] - 1, "added": data["added"] + 1}
db = get_example_db(data_mod["path"], data_mod["rating"],
data_mod["playcount"], data_mod["skipcount"],
data_mod["lastplayed"], data_mod["added"])
importer = self.mod.BansheeDBImporter(lib)
importer.read(db)
count = importer.finish()
db.close()
self.assertEqual(song("~#rating"), data_mod["rating"] / 5.0)
self.assertEqual(song("~#playcount"), data_mod["playcount"])
self.assertEqual(song("~#skipcount"), data_mod["skipcount"])
self.assertEqual(song("~#lastplayed"), data["lastplayed"])
self.assertEqual(song("~#added"), data["added"])
self.assertEqual(count, 1)
# test that no recovery is performed when data is identical
db = get_example_db(data_mod["path"], data_mod["rating"],
data_mod["playcount"], data_mod["skipcount"],
data_mod["lastplayed"], data_mod["added"])
importer = self.mod.BansheeDBImporter(lib)
importer.read(db)
count = importer.finish()
db.close()
self.assertEqual(count, 0)
|