File indexing completed on 2024-04-28 04:48:43
0001 /* 0002 SPDX-FileCopyrightText: 2015 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr> 0003 0004 SPDX-License-Identifier: LGPL-3.0-or-later 0005 */ 0006 0007 #include "databasetestdata.h" 0008 0009 #include "databaseinterface.h" 0010 #include "datatypes.h" 0011 0012 #include "config-upnp-qt.h" 0013 0014 #include <QObject> 0015 #include <QUrl> 0016 #include <QString> 0017 #include <QHash> 0018 #include <QVector> 0019 #include <QThread> 0020 #include <QStandardPaths> 0021 #include <QDir> 0022 #include <QFile> 0023 #include <QSqlError> 0024 #include <QSqlDatabase> 0025 #include <QSqlQuery> 0026 #include <QTemporaryFile> 0027 0028 #include <QDebug> 0029 0030 #include <QTest> 0031 #include <QSignalSpy> 0032 0033 #include <algorithm> 0034 0035 class DatabaseInterfaceTests: public QObject, public DatabaseTestData 0036 { 0037 Q_OBJECT 0038 0039 public: 0040 0041 explicit DatabaseInterfaceTests(QObject *aParent = nullptr) : QObject(aParent) 0042 { 0043 } 0044 0045 private Q_SLOTS: 0046 0047 void initTestCase() 0048 { 0049 qRegisterMetaType<QHash<qulonglong,int>>("QHash<qulonglong,int>"); 0050 qRegisterMetaType<QHash<QString,QUrl>>("QHash<QString,QUrl>"); 0051 qRegisterMetaType<QVector<qlonglong>>("QVector<qlonglong>"); 0052 qRegisterMetaType<QHash<qlonglong,int>>("QHash<qlonglong,int>"); 0053 qRegisterMetaType<QHash<QUrl,QDateTime>>("QHash<QUrl,QDateTime>"); 0054 qRegisterMetaType<DataTypes::ListTrackDataType>("ListTrackDataType"); 0055 qRegisterMetaType<DataTypes::ListAlbumDataType>("ListAlbumDataType"); 0056 qRegisterMetaType<DataTypes::ListArtistDataType>("ListArtistDataType"); 0057 qRegisterMetaType<DataTypes::ListGenreDataType>("ListGenreDataType"); 0058 qRegisterMetaType<DataTypes::TrackDataType>("TrackDataType"); 0059 qRegisterMetaType<DataTypes::AlbumDataType>("AlbumDataType"); 0060 qRegisterMetaType<DataTypes::ArtistDataType>("ArtistDataType"); 0061 qRegisterMetaType<DataTypes::GenreDataType>("GenreDataType"); 0062 qRegisterMetaType<DataTypes::ListRadioDataType>("ListRadioDataType"); 0063 } 0064 0065 void avoidCrashInTrackIdFromTitleAlbumArtist() 0066 { 0067 DatabaseInterface musicDb; 0068 musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album3"), 1, 1); 0069 } 0070 0071 void avoidCrashInAllArtists() 0072 { 0073 DatabaseInterface musicDb; 0074 musicDb.allArtistsData(); 0075 } 0076 0077 void avoidCrashInallAlbumsData() 0078 { 0079 DatabaseInterface musicDb; 0080 musicDb.allAlbumsData(); 0081 } 0082 0083 void avoidCrashInAllRadios() 0084 { 0085 DatabaseInterface musicDb; 0086 musicDb.allRadiosData(); 0087 } 0088 0089 void verifyNumberOfRadioStations() 0090 { 0091 QTemporaryFile databaseFile; 0092 databaseFile.open(); 0093 qDebug() << "verifyNumberOfRadioStations" << databaseFile.fileName(); 0094 DatabaseInterface musicDb; 0095 musicDb.init(QStringLiteral("testDb"),databaseFile.fileName()); 0096 QSignalSpy musicDbRadioAddedSpy(&musicDb,&DatabaseInterface::radioAdded); 0097 QCOMPARE(musicDb.allRadiosData().count(), 18); 0098 } 0099 0100 void addOneRadio() 0101 { 0102 QTemporaryFile databaseFile; 0103 databaseFile.open(); 0104 qDebug() << "addOneRadio" << databaseFile.fileName(); 0105 DatabaseInterface musicDb; 0106 musicDb.init(QStringLiteral("testDb"),databaseFile.fileName()); 0107 QSignalSpy musicDbRadioAddedSpy(&musicDb,&DatabaseInterface::radioAdded); 0108 int initialCount = musicDb.allRadiosData().count(); 0109 0110 auto newRadio = DataTypes::TrackDataType(); 0111 newRadio[DataTypes::CommentRole]=QStringLiteral("Test Comment"); 0112 newRadio[DataTypes::ResourceRole]=QUrl::fromEncoded("http://ice2.somafm.com/defcon-128-aac"); 0113 newRadio[DataTypes::TitleRole]=QStringLiteral("Test Radio"); 0114 newRadio[DataTypes::RatingRole]=9; 0115 newRadio[DataTypes::ImageUrlRole]=QUrl::fromEncoded("https://somafm.com/img3/defcon400.png"); 0116 newRadio[DataTypes::ElementTypeRole]=ElisaUtils::Radio; 0117 auto newRadios = DataTypes::ListRadioDataType(); 0118 0119 newRadios.push_back(newRadio); 0120 //Covers are ignored for radios. 0121 musicDb.insertTracksList(newRadios,mNewCovers); 0122 musicDbRadioAddedSpy.wait(300); 0123 0124 QCOMPARE(musicDb.allRadiosData().count(),initialCount + 1); 0125 QCOMPARE(musicDbRadioAddedSpy.count(),1); 0126 databaseFile.close(); 0127 } 0128 0129 void modifyOneRadio(){ 0130 QTemporaryFile databaseFile; 0131 databaseFile.open(); 0132 qDebug() << "modifyOneRadio" << databaseFile.fileName(); 0133 DatabaseInterface musicDb; 0134 musicDb.init(QStringLiteral("testDb"),databaseFile.fileName()); 0135 QSignalSpy musicDbRadioAddedSpy(&musicDb,&DatabaseInterface::radioAdded); 0136 QSignalSpy musicDbRadioModifiedSpy(&musicDb,&DatabaseInterface::radioModified); 0137 int initialCount = musicDb.allRadiosData().count(); 0138 0139 auto newRadio = DataTypes::TrackDataType(); 0140 newRadio[DataTypes::CommentRole]=QStringLiteral("Test Comment"); 0141 newRadio[DataTypes::ResourceRole]=QUrl::fromEncoded("http://ice2.somafm.com/defcon-128-aac"); 0142 newRadio[DataTypes::TitleRole]=QStringLiteral("Test Radio"); 0143 newRadio[DataTypes::RatingRole]=9; 0144 newRadio[DataTypes::ImageUrlRole]=QUrl::fromEncoded("https://somafm.com/img3/defcon400.png"); 0145 newRadio[DataTypes::ElementTypeRole]=ElisaUtils::Radio; 0146 auto newRadios = DataTypes::ListRadioDataType(); 0147 0148 newRadios.push_back(newRadio); 0149 //Covers are ignored for radios. 0150 musicDb.insertTracksList(newRadios,mNewCovers); 0151 musicDbRadioAddedSpy.wait(300); 0152 0153 QCOMPARE(musicDb.allRadiosData().count(),initialCount + 1); 0154 QCOMPARE(musicDbRadioAddedSpy.count(),1); 0155 0156 newRadios.clear(); 0157 0158 auto radioId = musicDb.radioIdFromFileName(QUrl::fromEncoded("http://ice2.somafm.com/defcon-128-aac")); 0159 auto modifiedRadio = musicDb.radioDataFromDatabaseId(radioId); 0160 modifiedRadio[DataTypes::CommentRole]=QStringLiteral("News Test Comment"); 0161 newRadios.push_back(modifiedRadio); 0162 musicDb.insertTracksList(newRadios,mNewCovers); 0163 0164 QCOMPARE(musicDb.allRadiosData().count(),initialCount + 1); 0165 QCOMPARE(musicDbRadioAddedSpy.count(),1); 0166 QCOMPARE(musicDbRadioModifiedSpy.count(),1); 0167 databaseFile.close(); 0168 } 0169 0170 void addOneTrackWithoutAlbumArtist() 0171 { 0172 QTemporaryFile databaseFile; 0173 databaseFile.open(); 0174 0175 qDebug() << "addOneTrackWithoutAlbumArtist" << databaseFile.fileName(); 0176 0177 DatabaseInterface musicDb; 0178 0179 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 0180 0181 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 0182 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 0183 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 0184 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 0185 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 0186 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 0187 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 0188 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 0189 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 0190 0191 QCOMPARE(musicDb.allAlbumsData().count(), 0); 0192 QCOMPARE(musicDb.allArtistsData().count(), 0); 0193 QCOMPARE(musicDb.allTracksData().count(), 0); 0194 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 0195 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 0196 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 0197 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0198 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0199 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0200 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0201 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0202 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0203 0204 auto newTrack = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 0205 QStringLiteral("artist2"), QStringLiteral("album3"), {}, 0206 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 0207 QDateTime::fromMSecsSinceEpoch(23), 0208 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, 0209 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 0210 auto newTracks = DataTypes::ListTrackDataType(); 0211 newTracks.push_back(newTrack); 0212 0213 auto newCovers = mNewCovers; 0214 newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 0215 0216 musicDb.insertTracksList(newTracks, newCovers); 0217 0218 musicDbTrackAddedSpy.wait(300); 0219 0220 QCOMPARE(musicDb.allAlbumsData().count(), 1); 0221 QCOMPARE(musicDb.allArtistsData().count(), 1); 0222 QCOMPARE(musicDb.allTracksData().count(), 1); 0223 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 0224 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 0225 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 0226 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0227 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0228 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0229 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0230 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0231 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0232 0233 auto track = musicDb.trackDataFromDatabaseId(musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist2"), 0234 QStringLiteral("album3"), 6, 1)); 0235 0236 QCOMPARE(track.isValid(), true); 0237 QCOMPARE(track.title(), QStringLiteral("track6")); 0238 QCOMPARE(track.artist(), QStringLiteral("artist2")); 0239 QCOMPARE(track.album(), QStringLiteral("album3")); 0240 QVERIFY(!track.albumArtist().isEmpty()); 0241 QCOMPARE(track.albumCover(), QUrl::fromLocalFile(QStringLiteral("album3"))); 0242 QCOMPARE(track.trackNumber(), 6); 0243 QCOMPARE(track.discNumber(), 1); 0244 QCOMPARE(track.duration(), QTime::fromMSecsSinceStartOfDay(23)); 0245 QCOMPARE(track.resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$23"))); 0246 QCOMPARE(track.rating(), 5); 0247 QCOMPARE(track.genre(), QStringLiteral("genre1")); 0248 QCOMPARE(track.composer(), QStringLiteral("composer1")); 0249 QCOMPARE(track.lyricist(), QStringLiteral("lyricist1")); 0250 0251 auto albumId = musicDb.albumIdFromTitleAndArtist(QStringLiteral("album3"), QStringLiteral("artist2"), QStringLiteral("/")); 0252 QVERIFY(albumId != 0); 0253 auto album = musicDb.albumDataFromDatabaseId(albumId); 0254 auto albumData = musicDb.albumData(albumId); 0255 0256 QCOMPARE(album.isValid(), true); 0257 QCOMPARE(albumData.count(), 1); 0258 QCOMPARE(album.title(), QStringLiteral("album3")); 0259 QCOMPARE(album.artist(), QStringLiteral("artist2")); 0260 QCOMPARE(album[DataTypes::ColumnsRoles::SecondaryTextRole], QStringLiteral("artist2")); 0261 QVERIFY(album.isValidArtist()); 0262 QCOMPARE(album.albumArtURI(), QUrl::fromLocalFile(QStringLiteral("album3"))); 0263 QCOMPARE(album.isSingleDiscAlbum(), true); 0264 } 0265 0266 void addAndRemoveOneTrackWithoutAlbum() 0267 { 0268 QTemporaryFile databaseFile; 0269 databaseFile.open(); 0270 0271 qDebug() << "addAndRemoveOneTrackWithoutAlbum" << databaseFile.fileName(); 0272 0273 DatabaseInterface musicDb; 0274 0275 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 0276 0277 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 0278 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 0279 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 0280 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 0281 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 0282 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 0283 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 0284 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 0285 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 0286 0287 QCOMPARE(musicDb.allAlbumsData().count(), 0); 0288 QCOMPARE(musicDb.allArtistsData().count(), 0); 0289 QCOMPARE(musicDb.allTracksData().count(), 0); 0290 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 0291 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 0292 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 0293 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0294 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0295 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0296 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0297 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0298 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0299 0300 auto newTrack = DataTypes::TrackDataType {true, QStringLiteral("$24"), QStringLiteral("0"), QStringLiteral("track10"), 0301 QStringLiteral("artist8"), {}, QStringLiteral("artist8"), 0302 9, 1, QTime::fromMSecsSinceStartOfDay(24), {QUrl::fromLocalFile(QStringLiteral("/$24"))}, QDateTime::fromMSecsSinceEpoch(24), 0303 {}, 9, true, QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 0304 0305 auto newTracks = DataTypes::ListTrackDataType(); 0306 newTracks.push_back(newTrack); 0307 0308 auto newCovers = mNewCovers; 0309 newCovers[QStringLiteral("file:///$24")] = QUrl::fromLocalFile(QStringLiteral("album4")); 0310 0311 musicDb.insertTracksList(newTracks, newCovers); 0312 0313 musicDbTrackAddedSpy.wait(300); 0314 0315 QCOMPARE(musicDb.allAlbumsData().count(), 0); 0316 QCOMPARE(musicDb.allArtistsData().count(), 1); 0317 QCOMPARE(musicDb.allTracksData().count(), 1); 0318 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 0319 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 0320 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 0321 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0322 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0323 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0324 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0325 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0326 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0327 0328 auto trackId = musicDb.trackIdFromFileName(QUrl::fromLocalFile(QStringLiteral("/$24"))); 0329 QVERIFY(trackId != 0); 0330 auto track = musicDb.trackDataFromDatabaseId(trackId); 0331 0332 QCOMPARE(track.isValid(), true); 0333 QCOMPARE(track.title(), QStringLiteral("track10")); 0334 QCOMPARE(track.artist(), QStringLiteral("artist8")); 0335 QCOMPARE(track.album(), QString()); 0336 QVERIFY(!track.albumArtist().isEmpty()); 0337 QCOMPARE(track.albumCover(), QUrl()); 0338 QCOMPARE(track.trackNumber(), 9); 0339 QCOMPARE(track.discNumber(), 1); 0340 QCOMPARE(track.duration(), QTime::fromMSecsSinceStartOfDay(24)); 0341 QCOMPARE(track.resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$24"))); 0342 QCOMPARE(track.rating(), 9); 0343 QCOMPARE(track.genre(), QStringLiteral("genre1")); 0344 QCOMPARE(track.composer(), QStringLiteral("composer1")); 0345 QCOMPARE(track.lyricist(), QStringLiteral("lyricist1")); 0346 0347 musicDb.removeTracksList({track.resourceURI()}); 0348 0349 QCOMPARE(musicDb.allAlbumsData().count(), 0); 0350 QCOMPARE(musicDb.allArtistsData().count(), 0); 0351 QCOMPARE(musicDb.allTracksData().count(), 0); 0352 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 0353 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 0354 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 0355 QCOMPARE(musicDbArtistRemovedSpy.count(), 1); 0356 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0357 QCOMPARE(musicDbTrackRemovedSpy.count(), 1); 0358 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0359 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0360 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0361 } 0362 0363 void addAndRemoveOneTrackWithoutTrackNumber() 0364 { 0365 DatabaseInterface musicDb; 0366 0367 musicDb.init(QStringLiteral("testDb")); 0368 0369 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 0370 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 0371 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 0372 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 0373 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 0374 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 0375 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 0376 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 0377 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 0378 0379 QCOMPARE(musicDb.allAlbumsData().count(), 0); 0380 QCOMPARE(musicDb.allArtistsData().count(), 0); 0381 QCOMPARE(musicDb.allTracksData().count(), 0); 0382 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 0383 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 0384 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 0385 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0386 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0387 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0388 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0389 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0390 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0391 0392 auto newTrack = DataTypes::TrackDataType {true, QStringLiteral("$26"), QStringLiteral("0"), QStringLiteral("track12"), 0393 QStringLiteral("artist8"), QStringLiteral("album4"), QStringLiteral("artist8"), 0394 -1, 1, QTime::fromMSecsSinceStartOfDay(26), {QUrl::fromLocalFile(QStringLiteral("/$26"))}, QDateTime::fromMSecsSinceEpoch(26), 0395 QUrl::fromLocalFile(QStringLiteral("file://image$26")), 9, true, 0396 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 0397 newTrack.remove(DataTypes::TrackNumberRole); 0398 auto newTracks = DataTypes::ListTrackDataType(); 0399 newTracks.push_back(newTrack); 0400 0401 auto newCovers = mNewCovers; 0402 newCovers[QStringLiteral("file:///$26")] = QUrl::fromLocalFile(QStringLiteral("album4")); 0403 0404 musicDb.insertTracksList(newTracks, newCovers); 0405 0406 musicDbTrackAddedSpy.wait(300); 0407 0408 QCOMPARE(musicDb.allAlbumsData().count(), 1); 0409 QCOMPARE(musicDb.allArtistsData().count(), 1); 0410 QCOMPARE(musicDb.allTracksData().count(), 1); 0411 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 0412 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 0413 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 0414 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0415 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0416 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0417 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0418 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0419 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0420 0421 auto track = musicDb.trackDataFromDatabaseId(musicDb.trackIdFromFileName(QUrl::fromLocalFile(QStringLiteral("/$26")))); 0422 0423 QCOMPARE(track.isValid(), true); 0424 QCOMPARE(track.title(), QStringLiteral("track12")); 0425 QCOMPARE(track.artist(), QStringLiteral("artist8")); 0426 QCOMPARE(track.album(), QStringLiteral("album4")); 0427 QCOMPARE(track.albumArtist(), QStringLiteral("artist8")); 0428 QCOMPARE(track.albumCover(), QUrl::fromLocalFile(QStringLiteral("album4"))); 0429 QCOMPARE(track.hasTrackNumber(), false); 0430 QCOMPARE(track.discNumber(), 1); 0431 QCOMPARE(track.duration(), QTime::fromMSecsSinceStartOfDay(26)); 0432 QCOMPARE(track.resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$26"))); 0433 QCOMPARE(track.rating(), 9); 0434 QCOMPARE(track.genre(), QStringLiteral("genre1")); 0435 QCOMPARE(track.composer(), QStringLiteral("composer1")); 0436 QCOMPARE(track.lyricist(), QStringLiteral("lyricist1")); 0437 0438 musicDb.removeTracksList({track.resourceURI()}); 0439 0440 QCOMPARE(musicDb.allAlbumsData().count(), 0); 0441 QCOMPARE(musicDb.allArtistsData().count(), 0); 0442 QCOMPARE(musicDb.allTracksData().count(), 0); 0443 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 0444 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 0445 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 0446 QCOMPARE(musicDbArtistRemovedSpy.count(), 1); 0447 QCOMPARE(musicDbAlbumRemovedSpy.count(), 1); 0448 QCOMPARE(musicDbTrackRemovedSpy.count(), 1); 0449 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0450 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0451 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0452 } 0453 0454 void addAndRemoveOneTrackWithoutArtist() 0455 { 0456 DatabaseInterface musicDb; 0457 0458 musicDb.init(QStringLiteral("testDb")); 0459 0460 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 0461 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 0462 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 0463 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 0464 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 0465 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 0466 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 0467 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 0468 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 0469 0470 QCOMPARE(musicDb.allAlbumsData().count(), 0); 0471 QCOMPARE(musicDb.allArtistsData().count(), 0); 0472 QCOMPARE(musicDb.allTracksData().count(), 0); 0473 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 0474 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 0475 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 0476 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0477 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0478 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0479 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0480 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0481 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0482 0483 auto newTrack = DataTypes::TrackDataType {true, QStringLiteral("$26"), QStringLiteral("0"), QStringLiteral("track11"), 0484 {}, QStringLiteral("album4"), {}, 0485 9, 1, QTime::fromMSecsSinceStartOfDay(26), {QUrl::fromLocalFile(QStringLiteral("/$26"))}, QDateTime::fromMSecsSinceEpoch(26), 0486 QUrl::fromLocalFile(QStringLiteral("file://image$26")), 9, true, 0487 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 0488 auto newTracks = DataTypes::ListTrackDataType(); 0489 newTracks.push_back(newTrack); 0490 0491 auto newCovers = mNewCovers; 0492 newCovers[QStringLiteral("file:///$26")] = QUrl::fromLocalFile(QStringLiteral("album4")); 0493 0494 musicDb.insertTracksList(newTracks, newCovers); 0495 0496 musicDbTrackAddedSpy.wait(300); 0497 0498 QCOMPARE(musicDb.allAlbumsData().count(), 1); 0499 QCOMPARE(musicDb.allArtistsData().count(), 0); 0500 QCOMPARE(musicDb.allTracksData().count(), 1); 0501 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 0502 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 0503 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 0504 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0505 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0506 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0507 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0508 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0509 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0510 0511 auto track = musicDb.trackDataFromDatabaseId(musicDb.trackIdFromFileName(QUrl::fromLocalFile(QStringLiteral("/$26")))); 0512 0513 QCOMPARE(track.isValid(), true); 0514 QCOMPARE(track.title(), QStringLiteral("track11")); 0515 QCOMPARE(track.artist(), QString()); 0516 QCOMPARE(track.album(), QStringLiteral("album4")); 0517 QVERIFY(track.albumArtist().isEmpty()); 0518 QCOMPARE(track.albumCover(), QUrl::fromLocalFile(QStringLiteral("album4"))); 0519 QCOMPARE(track.trackNumber(), 9); 0520 QCOMPARE(track.discNumber(), 1); 0521 QCOMPARE(track.duration(), QTime::fromMSecsSinceStartOfDay(26)); 0522 QCOMPARE(track.resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$26"))); 0523 QCOMPARE(track.rating(), 9); 0524 QCOMPARE(track.genre(), QStringLiteral("genre1")); 0525 QCOMPARE(track.composer(), QStringLiteral("composer1")); 0526 QCOMPARE(track.lyricist(), QStringLiteral("lyricist1")); 0527 0528 musicDb.removeTracksList({track.resourceURI()}); 0529 0530 QCOMPARE(musicDb.allAlbumsData().count(), 0); 0531 QCOMPARE(musicDb.allArtistsData().count(), 0); 0532 QCOMPARE(musicDb.allTracksData().count(), 0); 0533 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 0534 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 0535 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 0536 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0537 QCOMPARE(musicDbAlbumRemovedSpy.count(), 1); 0538 QCOMPARE(musicDbTrackRemovedSpy.count(), 1); 0539 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0540 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0541 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0542 } 0543 0544 void addOneTrackWithoutAlbumArtistAndAnotherTrackWith() 0545 { 0546 DatabaseInterface musicDb; 0547 0548 musicDb.init(QStringLiteral("testDb")); 0549 0550 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 0551 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 0552 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 0553 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 0554 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 0555 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 0556 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 0557 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 0558 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 0559 0560 QCOMPARE(musicDb.allAlbumsData().count(), 0); 0561 QCOMPARE(musicDb.allArtistsData().count(), 0); 0562 QCOMPARE(musicDb.allTracksData().count(), 0); 0563 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 0564 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 0565 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 0566 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0567 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0568 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0569 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0570 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0571 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0572 0573 auto newTrack = DataTypes::TrackDataType {true, QStringLiteral("$26"), QStringLiteral("0"), QStringLiteral("track11"), 0574 {}, QStringLiteral("album4"), {}, 0575 9, 1, QTime::fromMSecsSinceStartOfDay(26), {QUrl::fromLocalFile(QStringLiteral("/$26"))}, QDateTime::fromMSecsSinceEpoch(26), 0576 QUrl::fromLocalFile(QStringLiteral("file://image$26")), 9, true, 0577 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 0578 auto newTracks = DataTypes::ListTrackDataType(); 0579 newTracks.push_back(newTrack); 0580 0581 auto newCovers = mNewCovers; 0582 newCovers[QStringLiteral("file:///$26")] = QUrl::fromLocalFile(QStringLiteral("album4")); 0583 0584 musicDb.insertTracksList(newTracks, newCovers); 0585 0586 musicDbTrackAddedSpy.wait(300); 0587 0588 QCOMPARE(musicDb.allAlbumsData().count(), 1); 0589 QCOMPARE(musicDb.allArtistsData().count(), 0); 0590 QCOMPARE(musicDb.allTracksData().count(), 1); 0591 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 0592 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 0593 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 0594 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0595 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0596 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0597 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0598 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0599 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0600 0601 auto track = musicDb.trackDataFromDatabaseId(musicDb.trackIdFromFileName(QUrl::fromLocalFile(QStringLiteral("/$26")))); 0602 0603 QCOMPARE(track.isValid(), true); 0604 QCOMPARE(track.title(), QStringLiteral("track11")); 0605 QCOMPARE(track.artist(), QString()); 0606 QCOMPARE(track.album(), QStringLiteral("album4")); 0607 QCOMPARE(track.albumArtist(), QString()); 0608 QVERIFY(track.albumArtist().isEmpty()); 0609 QCOMPARE(track.albumCover(), QUrl::fromLocalFile(QStringLiteral("album4"))); 0610 QCOMPARE(track.trackNumber(), 9); 0611 QCOMPARE(track.discNumber(), 1); 0612 QCOMPARE(track.duration(), QTime::fromMSecsSinceStartOfDay(26)); 0613 QCOMPARE(track.resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$26"))); 0614 QCOMPARE(track.rating(), 9); 0615 QCOMPARE(track.genre(), QStringLiteral("genre1")); 0616 QCOMPARE(track.composer(), QStringLiteral("composer1")); 0617 QCOMPARE(track.lyricist(), QStringLiteral("lyricist1")); 0618 0619 newTrack = DataTypes::TrackDataType {true, QStringLiteral("$27"), QStringLiteral("0"), QStringLiteral("track12"), 0620 QStringLiteral("artist1"), QStringLiteral("album4"), QStringLiteral("artist2"), 0621 10, 1, QTime::fromMSecsSinceStartOfDay(27), {QUrl::fromLocalFile(QStringLiteral("/autre/$27"))}, QDateTime::fromMSecsSinceEpoch(27), 0622 QUrl::fromLocalFile(QStringLiteral("file://image$27")), 10, true, 0623 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 0624 newTracks = DataTypes::ListTrackDataType(); 0625 newTracks.push_back(newTrack); 0626 0627 newCovers = mNewCovers; 0628 newCovers[QStringLiteral("file:///autre/$27")] = QUrl::fromLocalFile(QStringLiteral("album4")); 0629 0630 musicDb.insertTracksList(newTracks, newCovers); 0631 0632 musicDbTrackAddedSpy.wait(300); 0633 0634 QCOMPARE(musicDb.allAlbumsData().count(), 2); 0635 QCOMPARE(musicDb.allArtistsData().count(), 2); 0636 QCOMPARE(musicDb.allTracksData().count(), 2); 0637 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 0638 QCOMPARE(musicDbAlbumAddedSpy.count(), 2); 0639 QCOMPARE(musicDbTrackAddedSpy.count(), 2); 0640 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0641 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0642 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0643 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0644 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0645 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0646 } 0647 0648 void addTwoTracksWithoutAlbumArtist() 0649 { 0650 QTemporaryFile databaseFile; 0651 databaseFile.open(); 0652 0653 qDebug() << "addTwoTracksWithoutAlbumArtist" << databaseFile.fileName(); 0654 0655 DatabaseInterface musicDb; 0656 0657 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 0658 0659 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 0660 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 0661 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 0662 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 0663 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 0664 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 0665 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 0666 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 0667 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 0668 0669 QCOMPARE(musicDb.allAlbumsData().count(), 0); 0670 QCOMPARE(musicDb.allArtistsData().count(), 0); 0671 QCOMPARE(musicDb.allTracksData().count(), 0); 0672 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 0673 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 0674 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 0675 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0676 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0677 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0678 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0679 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0680 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0681 0682 auto newTracks = DataTypes::ListTrackDataType(); 0683 0684 newTracks = {{true, QStringLiteral("$19"), QStringLiteral("0"), QStringLiteral("track6"), 0685 QStringLiteral("artist2"), QStringLiteral("album3"), {}, 6, 1, QTime::fromMSecsSinceStartOfDay(19), 0686 {QUrl::fromLocalFile(QStringLiteral("/$19"))}, 0687 QDateTime::fromMSecsSinceEpoch(23), 0688 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, 0689 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}, 0690 {true, QStringLiteral("$20"), QStringLiteral("0"), QStringLiteral("track7"), 0691 QStringLiteral("artist3"), QStringLiteral("album3"), {}, 7, 1, QTime::fromMSecsSinceStartOfDay(20), 0692 {QUrl::fromLocalFile(QStringLiteral("/$20"))}, 0693 QDateTime::fromMSecsSinceEpoch(23), 0694 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, 0695 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}}; 0696 0697 auto newCovers = mNewCovers; 0698 newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 0699 newCovers[QStringLiteral("file:///$20")] = QUrl::fromLocalFile(QStringLiteral("album3")); 0700 0701 musicDb.insertTracksList(newTracks, newCovers); 0702 0703 musicDbTrackAddedSpy.wait(300); 0704 0705 QCOMPARE(musicDb.allAlbumsData().count(), 1); 0706 QCOMPARE(musicDb.allArtistsData().count(), 2); 0707 QCOMPARE(musicDb.allTracksData().count(), 2); 0708 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 0709 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 0710 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 0711 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0712 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0713 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0714 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0715 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0716 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0717 0718 auto firstTrack = musicDb.trackDataFromDatabaseId(musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist2"), 0719 QStringLiteral("album3"), 6, 1)); 0720 0721 QCOMPARE(firstTrack.isValid(), true); 0722 QCOMPARE(firstTrack.title(), QStringLiteral("track6")); 0723 QCOMPARE(firstTrack.artist(), QStringLiteral("artist2")); 0724 QCOMPARE(firstTrack.album(), QStringLiteral("album3")); 0725 QVERIFY(!firstTrack.albumArtist().isEmpty()); 0726 QCOMPARE(firstTrack.albumCover(), QUrl::fromLocalFile(QStringLiteral("album3"))); 0727 QCOMPARE(firstTrack.trackNumber(), 6); 0728 QCOMPARE(firstTrack.discNumber(), 1); 0729 QCOMPARE(firstTrack.duration(), QTime::fromMSecsSinceStartOfDay(19)); 0730 QCOMPARE(firstTrack.resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$19"))); 0731 QCOMPARE(firstTrack.rating(), 5); 0732 QCOMPARE(firstTrack.genre(), QStringLiteral("genre1")); 0733 QCOMPARE(firstTrack.composer(), QStringLiteral("composer1")); 0734 QCOMPARE(firstTrack.lyricist(), QStringLiteral("lyricist1")); 0735 QCOMPARE(firstTrack.hasEmbeddedCover(), true); 0736 0737 auto secondTrack = musicDb.trackDataFromDatabaseId(musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track7"), QStringLiteral("artist3"), 0738 QStringLiteral("album3"), 7, 1)); 0739 0740 QCOMPARE(secondTrack.isValid(), true); 0741 QCOMPARE(secondTrack.title(), QStringLiteral("track7")); 0742 QCOMPARE(secondTrack.artist(), QStringLiteral("artist3")); 0743 QCOMPARE(secondTrack.album(), QStringLiteral("album3")); 0744 QVERIFY(!secondTrack.albumArtist().isEmpty()); 0745 QCOMPARE(secondTrack.albumCover(), QUrl::fromLocalFile(QStringLiteral("album3"))); 0746 QCOMPARE(secondTrack.trackNumber(), 7); 0747 QCOMPARE(secondTrack.discNumber(), 1); 0748 QCOMPARE(secondTrack.duration(), QTime::fromMSecsSinceStartOfDay(20)); 0749 QCOMPARE(secondTrack.resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$20"))); 0750 QCOMPARE(secondTrack.rating(), 5); 0751 QCOMPARE(secondTrack.genre(), QStringLiteral("genre1")); 0752 QCOMPARE(secondTrack.composer(), QStringLiteral("composer1")); 0753 QCOMPARE(secondTrack.lyricist(), QStringLiteral("lyricist1")); 0754 QCOMPARE(secondTrack.hasEmbeddedCover(), false); 0755 0756 auto albumId = musicDb.albumIdFromTitleAndArtist(QStringLiteral("album3"), {}, QStringLiteral("/")); 0757 auto album = musicDb.albumDataFromDatabaseId(albumId); 0758 auto albumData = musicDb.albumData(albumId); 0759 0760 QCOMPARE(album.isValid(), true); 0761 QCOMPARE(albumData.count(), 2); 0762 QCOMPARE(album.title(), QStringLiteral("album3")); 0763 QVERIFY(album.isValidArtist()); 0764 QCOMPARE(album.albumArtURI(), QUrl::fromLocalFile(QStringLiteral("album3"))); 0765 QCOMPARE(album.isSingleDiscAlbum(), true); 0766 } 0767 0768 void addThreeTracksWithoutAlbumArtistButSameArtist() 0769 { 0770 DatabaseInterface musicDb; 0771 0772 musicDb.init(QStringLiteral("testDb")); 0773 0774 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 0775 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 0776 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 0777 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 0778 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 0779 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 0780 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 0781 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 0782 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 0783 0784 QCOMPARE(musicDb.allAlbumsData().count(), 0); 0785 QCOMPARE(musicDb.allArtistsData().count(), 0); 0786 QCOMPARE(musicDb.allTracksData().count(), 0); 0787 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 0788 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 0789 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 0790 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0791 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0792 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0793 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0794 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0795 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0796 0797 auto newTracks = DataTypes::ListTrackDataType(); 0798 0799 newTracks = {{true, QStringLiteral("$19"), QStringLiteral("0"), QStringLiteral("track6"), 0800 QStringLiteral("artist2"), QStringLiteral("album3"), {}, 6, 1, 0801 QTime::fromMSecsSinceStartOfDay(19), {QUrl::fromLocalFile(QStringLiteral("/$19"))}, 0802 QDateTime::fromMSecsSinceEpoch(19), 0803 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, 0804 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, 0805 {true, QStringLiteral("$20"), QStringLiteral("0"), QStringLiteral("track7"), 0806 QStringLiteral("artist2"), QStringLiteral("album3"), {}, 7, 1, 0807 QTime::fromMSecsSinceStartOfDay(20), {QUrl::fromLocalFile(QStringLiteral("/$20"))}, 0808 QDateTime::fromMSecsSinceEpoch(20), 0809 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 4, true, 0810 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, 0811 {true, QStringLiteral("$21"), QStringLiteral("0"), QStringLiteral("track8"), 0812 QStringLiteral("artist2"), QStringLiteral("album3"), {}, 8, 1, 0813 QTime::fromMSecsSinceStartOfDay(21), {QUrl::fromLocalFile(QStringLiteral("/$21"))}, 0814 QDateTime::fromMSecsSinceEpoch(21), 0815 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 3, true, 0816 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}}; 0817 0818 auto newCovers = mNewCovers; 0819 newCovers[QStringLiteral("file:///$19")] = QUrl::fromLocalFile(QStringLiteral("album3")); 0820 newCovers[QStringLiteral("file:///$20")] = QUrl::fromLocalFile(QStringLiteral("album3")); 0821 newCovers[QStringLiteral("file:///$21")] = QUrl::fromLocalFile(QStringLiteral("album3")); 0822 0823 musicDb.insertTracksList(newTracks, newCovers); 0824 0825 musicDbTrackAddedSpy.wait(300); 0826 0827 QCOMPARE(musicDb.allAlbumsData().count(), 1); 0828 QCOMPARE(musicDb.allArtistsData().count(), 1); 0829 QCOMPARE(musicDb.allTracksData().count(), 3); 0830 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 0831 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 0832 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 0833 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0834 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0835 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0836 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0837 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0838 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0839 0840 auto firstTrack = musicDb.trackDataFromDatabaseId(musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist2"), 0841 QStringLiteral("album3"), 6, 1)); 0842 0843 QCOMPARE(firstTrack.isValid(), true); 0844 QCOMPARE(firstTrack.title(), QStringLiteral("track6")); 0845 QCOMPARE(firstTrack.artist(), QStringLiteral("artist2")); 0846 QCOMPARE(firstTrack.album(), QStringLiteral("album3")); 0847 QVERIFY(!firstTrack.albumArtist().isEmpty()); 0848 QCOMPARE(firstTrack.albumCover(), QUrl::fromLocalFile(QStringLiteral("album3"))); 0849 QCOMPARE(firstTrack.trackNumber(), 6); 0850 QCOMPARE(firstTrack.discNumber(), 1); 0851 QCOMPARE(firstTrack.duration(), QTime::fromMSecsSinceStartOfDay(19)); 0852 QCOMPARE(firstTrack.resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$19"))); 0853 QCOMPARE(firstTrack.rating(), 5); 0854 QCOMPARE(firstTrack.genre(), QStringLiteral("genre1")); 0855 QCOMPARE(firstTrack.composer(), QStringLiteral("composer1")); 0856 QCOMPARE(firstTrack.lyricist(), QStringLiteral("lyricist1")); 0857 QCOMPARE(firstTrack.isSingleDiscAlbum(), true); 0858 0859 auto secondTrack = musicDb.trackDataFromDatabaseId(musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track7"), QStringLiteral("artist2"), 0860 QStringLiteral("album3"), 7, 1)); 0861 0862 QCOMPARE(secondTrack.isValid(), true); 0863 QCOMPARE(secondTrack.title(), QStringLiteral("track7")); 0864 QCOMPARE(secondTrack.artist(), QStringLiteral("artist2")); 0865 QCOMPARE(secondTrack.album(), QStringLiteral("album3")); 0866 QVERIFY(!secondTrack.albumArtist().isEmpty()); 0867 QCOMPARE(secondTrack.albumCover(), QUrl::fromLocalFile(QStringLiteral("album3"))); 0868 QCOMPARE(secondTrack.trackNumber(), 7); 0869 QCOMPARE(secondTrack.discNumber(), 1); 0870 QCOMPARE(secondTrack.duration(), QTime::fromMSecsSinceStartOfDay(20)); 0871 QCOMPARE(secondTrack.resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$20"))); 0872 QCOMPARE(secondTrack.rating(), 4); 0873 QCOMPARE(secondTrack.genre(), QStringLiteral("genre1")); 0874 QCOMPARE(secondTrack.composer(), QStringLiteral("composer1")); 0875 QCOMPARE(secondTrack.lyricist(), QStringLiteral("lyricist1")); 0876 QCOMPARE(secondTrack.isSingleDiscAlbum(), true); 0877 QCOMPARE(secondTrack.hasEmbeddedCover(), false); 0878 0879 auto thirdTrack = musicDb.trackDataFromDatabaseId(musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track8"), QStringLiteral("artist2"), 0880 QStringLiteral("album3"), 8, 1)); 0881 0882 QCOMPARE(thirdTrack.isValid(), true); 0883 QCOMPARE(thirdTrack.title(), QStringLiteral("track8")); 0884 QCOMPARE(thirdTrack.artist(), QStringLiteral("artist2")); 0885 QCOMPARE(thirdTrack.album(), QStringLiteral("album3")); 0886 QVERIFY(!thirdTrack.albumArtist().isEmpty()); 0887 QCOMPARE(thirdTrack.albumCover(), QUrl::fromLocalFile(QStringLiteral("album3"))); 0888 QCOMPARE(thirdTrack.trackNumber(), 8); 0889 QCOMPARE(thirdTrack.discNumber(), 1); 0890 QCOMPARE(thirdTrack.duration(), QTime::fromMSecsSinceStartOfDay(21)); 0891 QCOMPARE(thirdTrack.resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$21"))); 0892 QCOMPARE(thirdTrack.rating(), 3); 0893 QCOMPARE(thirdTrack.genre(), QStringLiteral("genre1")); 0894 QCOMPARE(thirdTrack.composer(), QStringLiteral("composer1")); 0895 QCOMPARE(thirdTrack.lyricist(), QStringLiteral("lyricist1")); 0896 QCOMPARE(thirdTrack.isSingleDiscAlbum(), true); 0897 0898 auto albumId = musicDb.albumIdFromTitleAndArtist(QStringLiteral("album3"), {}, QStringLiteral("/")); 0899 auto album = musicDb.albumDataFromDatabaseId(albumId); 0900 auto albumData = musicDb.albumData(albumId); 0901 0902 QCOMPARE(album.isValid(), true); 0903 QCOMPARE(albumData.count(), 3); 0904 QCOMPARE(album.title(), QStringLiteral("album3")); 0905 QVERIFY(album.isValidArtist()); 0906 QCOMPARE(album.albumArtURI(), QUrl::fromLocalFile(QStringLiteral("album3"))); 0907 QCOMPARE(album.isSingleDiscAlbum(), true); 0908 } 0909 0910 void addTwoTracksWithPartialAlbumArtist() 0911 { 0912 QTemporaryFile databaseFile; 0913 databaseFile.open(); 0914 0915 qDebug() << "addTwoTracksWithPartialAlbumArtist" << databaseFile.fileName(); 0916 0917 DatabaseInterface musicDb; 0918 0919 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 0920 0921 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 0922 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 0923 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 0924 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 0925 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 0926 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 0927 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 0928 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 0929 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 0930 0931 QCOMPARE(musicDb.allAlbumsData().count(), 0); 0932 QCOMPARE(musicDb.allArtistsData().count(), 0); 0933 QCOMPARE(musicDb.allTracksData().count(), 0); 0934 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 0935 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 0936 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 0937 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0938 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0939 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0940 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0941 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0942 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0943 0944 auto newTracks = DataTypes::ListTrackDataType(); 0945 0946 newTracks = {{true, QStringLiteral("$19"), QStringLiteral("0"), QStringLiteral("track6"), 0947 QStringLiteral("artist2"), QStringLiteral("album3"), {}, 6, 1, 0948 QTime::fromMSecsSinceStartOfDay(19), {QUrl::fromLocalFile(QStringLiteral("/$19"))}, 0949 QDateTime::fromMSecsSinceEpoch(19), 0950 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, 0951 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}, 0952 {true, QStringLiteral("$20"), QStringLiteral("0"), QStringLiteral("track7"), 0953 QStringLiteral("artist3"), QStringLiteral("album3"), {QStringLiteral("artist4")}, 7, 1, 0954 QTime::fromMSecsSinceStartOfDay(20), {QUrl::fromLocalFile(QStringLiteral("/$20"))}, 0955 QDateTime::fromMSecsSinceEpoch(20), 0956 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, 0957 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}}; 0958 0959 auto newCovers = mNewCovers; 0960 newCovers[QStringLiteral("file:///$19")] = QUrl::fromLocalFile(QStringLiteral("album3")); 0961 newCovers[QStringLiteral("file:///$20")] = QUrl::fromLocalFile(QStringLiteral("album3")); 0962 0963 musicDb.insertTracksList(newTracks, newCovers); 0964 0965 musicDbTrackAddedSpy.wait(300); 0966 0967 QCOMPARE(musicDb.allAlbumsData().count(), 1); 0968 QCOMPARE(musicDb.allArtistsData().count(), 3); 0969 QCOMPARE(musicDb.allTracksData().count(), 2); 0970 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 0971 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 0972 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 0973 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 0974 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 0975 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 0976 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 0977 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 0978 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 0979 0980 auto firstTrack = musicDb.trackDataFromDatabaseId(musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist2"), 0981 QStringLiteral("album3"), 6, 1)); 0982 0983 QCOMPARE(firstTrack.isValid(), true); 0984 QCOMPARE(firstTrack.title(), QStringLiteral("track6")); 0985 QCOMPARE(firstTrack.artist(), QStringLiteral("artist2")); 0986 QCOMPARE(firstTrack.album(), QStringLiteral("album3")); 0987 QCOMPARE(firstTrack.albumArtist(), QStringLiteral("artist4")); 0988 QCOMPARE(firstTrack.albumCover(), QUrl::fromLocalFile(QStringLiteral("album3"))); 0989 QCOMPARE(firstTrack.trackNumber(), 6); 0990 QCOMPARE(firstTrack.discNumber(), 1); 0991 QCOMPARE(firstTrack.duration(), QTime::fromMSecsSinceStartOfDay(19)); 0992 QCOMPARE(firstTrack.resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$19"))); 0993 QCOMPARE(firstTrack.rating(), 5); 0994 QCOMPARE(firstTrack.genre(), QStringLiteral("genre1")); 0995 QCOMPARE(firstTrack.composer(), QStringLiteral("composer1")); 0996 QCOMPARE(firstTrack.lyricist(), QStringLiteral("lyricist1")); 0997 QCOMPARE(firstTrack.isSingleDiscAlbum(), true); 0998 QCOMPARE(firstTrack.hasEmbeddedCover(), true); 0999 1000 auto secondTrack = musicDb.trackDataFromDatabaseId(musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track7"), QStringLiteral("artist3"), 1001 QStringLiteral("album3"), 7, 1)); 1002 1003 QCOMPARE(secondTrack.isValid(), true); 1004 QCOMPARE(secondTrack.title(), QStringLiteral("track7")); 1005 QCOMPARE(secondTrack.artist(), QStringLiteral("artist3")); 1006 QCOMPARE(secondTrack.album(), QStringLiteral("album3")); 1007 QCOMPARE(secondTrack.albumArtist(), QStringLiteral("artist4")); 1008 QCOMPARE(secondTrack.albumCover(), QUrl::fromLocalFile(QStringLiteral("album3"))); 1009 QCOMPARE(secondTrack.trackNumber(), 7); 1010 QCOMPARE(secondTrack.discNumber(), 1); 1011 QCOMPARE(secondTrack.duration(), QTime::fromMSecsSinceStartOfDay(20)); 1012 QCOMPARE(secondTrack.resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$20"))); 1013 QCOMPARE(secondTrack.rating(), 5); 1014 QCOMPARE(secondTrack.genre(), QStringLiteral("genre1")); 1015 QCOMPARE(secondTrack.composer(), QStringLiteral("composer1")); 1016 QCOMPARE(secondTrack.lyricist(), QStringLiteral("lyricist1")); 1017 QCOMPARE(secondTrack.isSingleDiscAlbum(), true); 1018 QCOMPARE(secondTrack.hasEmbeddedCover(), false); 1019 1020 auto albumId = musicDb.albumIdFromTitleAndArtist(QStringLiteral("album3"), QStringLiteral("artist4"), QStringLiteral("/")); 1021 auto album = musicDb.albumDataFromDatabaseId(albumId); 1022 auto albumData = musicDb.albumData(albumId); 1023 1024 QCOMPARE(album.isValid(), true); 1025 QCOMPARE(albumData.count(), 2); 1026 QCOMPARE(album.title(), QStringLiteral("album3")); 1027 QCOMPARE(album.artist(), QStringLiteral("artist4")); 1028 QCOMPARE(album.isValidArtist(), true); 1029 QCOMPARE(album.albumArtURI(), QUrl::fromLocalFile(QStringLiteral("album3"))); 1030 QCOMPARE(album.isSingleDiscAlbum(), true); 1031 } 1032 1033 void addMultipleTimeSameTracks() 1034 { 1035 QTemporaryFile databaseFile; 1036 databaseFile.open(); 1037 1038 qDebug() << "addMultipleTimeSameTracks" << databaseFile.fileName(); 1039 1040 DatabaseInterface musicDb; 1041 1042 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 1043 QSignalSpy musicDbErrorSpy(&musicDb, &DatabaseInterface::databaseError); 1044 1045 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 1046 1047 musicDb.insertTracksList(mNewTracks, mNewCovers); 1048 1049 musicDbTrackAddedSpy.wait(300); 1050 1051 QCOMPARE(musicDb.allAlbumsData().count(), 5); 1052 QCOMPARE(musicDbErrorSpy.count(), 0); 1053 1054 musicDb.insertTracksList(mNewTracks, mNewCovers); 1055 1056 musicDbTrackAddedSpy.wait(300); 1057 1058 QCOMPARE(musicDb.allAlbumsData().count(), 5); 1059 QCOMPARE(musicDbErrorSpy.count(), 0); 1060 1061 musicDb.insertTracksList(mNewTracks, mNewCovers); 1062 1063 musicDbTrackAddedSpy.wait(300); 1064 1065 QCOMPARE(musicDb.allAlbumsData().count(), 5); 1066 QCOMPARE(musicDbErrorSpy.count(), 0); 1067 1068 musicDb.insertTracksList(mNewTracks, mNewCovers); 1069 1070 musicDbTrackAddedSpy.wait(300); 1071 1072 QCOMPARE(musicDb.allAlbumsData().count(), 5); 1073 QCOMPARE(musicDbErrorSpy.count(), 0); 1074 1075 auto firstAlbum = musicDb.albumDataFromDatabaseId(musicDb.albumIdFromTitleAndArtist(QStringLiteral("album1"), QStringLiteral("Various Artists"), QStringLiteral("/"))); 1076 1077 QCOMPARE(firstAlbum.isValid(), true); 1078 QCOMPARE(firstAlbum.title(), QStringLiteral("album1")); 1079 QCOMPARE(musicDbErrorSpy.count(), 0); 1080 1081 auto firstAlbumInvalid = musicDb.albumDataFromDatabaseId(musicDb.albumIdFromTitleAndArtist(QStringLiteral("album1Invalid"), QStringLiteral("Invalid Artist"), QStringLiteral("/"))); 1082 1083 QCOMPARE(firstAlbumInvalid.isValid(), false); 1084 QCOMPARE(musicDbErrorSpy.count(), 0); 1085 } 1086 1087 void addTwiceSameTracksWithDatabaseFile() 1088 { 1089 QTemporaryFile myTempDatabase; 1090 myTempDatabase.open(); 1091 1092 { 1093 DatabaseInterface musicDb; 1094 1095 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 1096 1097 musicDb.init(QStringLiteral("testDb1"), myTempDatabase.fileName()); 1098 1099 musicDb.insertTracksList(mNewTracks, mNewCovers); 1100 1101 musicDbTrackAddedSpy.wait(300); 1102 1103 QCOMPARE(musicDb.allAlbumsData().count(), 5); 1104 1105 auto firstAlbum = musicDb.albumDataFromDatabaseId(musicDb.albumIdFromTitleAndArtist(QStringLiteral("album1"), QStringLiteral("Various Artists"), QStringLiteral("/"))); 1106 1107 QCOMPARE(firstAlbum.isValid(), true); 1108 QCOMPARE(firstAlbum.title(), QStringLiteral("album1")); 1109 1110 auto firstAlbumInvalid = musicDb.albumDataFromDatabaseId(musicDb.albumIdFromTitleAndArtist(QStringLiteral("album1Invalid"), QStringLiteral("Invalid Artist"), QStringLiteral("/"))); 1111 1112 QCOMPARE(firstAlbumInvalid.isValid(), false); 1113 } 1114 1115 { 1116 DatabaseInterface musicDb; 1117 1118 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 1119 1120 musicDb.init(QStringLiteral("testDb2"), myTempDatabase.fileName()); 1121 1122 musicDb.insertTracksList(mNewTracks, mNewCovers); 1123 1124 musicDbTrackAddedSpy.wait(300); 1125 1126 QCOMPARE(musicDb.allAlbumsData().count(), 5); 1127 1128 auto firstAlbum = musicDb.albumDataFromDatabaseId(musicDb.albumIdFromTitleAndArtist(QStringLiteral("album1"), QStringLiteral("Various Artists"), QStringLiteral("/"))); 1129 1130 QCOMPARE(firstAlbum.isValid(), true); 1131 QCOMPARE(firstAlbum.title(), QStringLiteral("album1")); 1132 1133 auto firstAlbumInvalid = musicDb.albumDataFromDatabaseId(musicDb.albumIdFromTitleAndArtist(QStringLiteral("album1Invalid"), QStringLiteral("Invalid Artist"), QStringLiteral("/"))); 1134 1135 QCOMPARE(firstAlbumInvalid.isValid(), false); 1136 } 1137 } 1138 1139 void restoreModifiedTracksWidthDatabaseFile() 1140 { 1141 QTemporaryFile myTempDatabase; 1142 myTempDatabase.open(); 1143 1144 { 1145 DatabaseInterface musicDb; 1146 1147 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 1148 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 1149 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 1150 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 1151 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 1152 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 1153 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 1154 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 1155 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 1156 1157 QCOMPARE(musicDb.allAlbumsData().count(), 0); 1158 QCOMPARE(musicDb.allArtistsData().count(), 0); 1159 QCOMPARE(musicDb.allTracksData().count(), 0); 1160 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 1161 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 1162 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 1163 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 1164 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 1165 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 1166 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 1167 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 1168 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 1169 1170 auto allNewTracks = mNewTracks; 1171 allNewTracks.push_back({true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 1172 QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 1173 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 1174 QDateTime::fromMSecsSinceEpoch(23), 1175 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, 1176 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}); 1177 1178 musicDb.init(QStringLiteral("testDb1"), myTempDatabase.fileName()); 1179 1180 QCOMPARE(musicDb.allAlbumsData().count(), 0); 1181 QCOMPARE(musicDb.allArtistsData().count(), 0); 1182 QCOMPARE(musicDb.allTracksData().count(), 0); 1183 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 1184 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 1185 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 1186 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 1187 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 1188 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 1189 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 1190 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 1191 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 1192 1193 qDebug() << "restoreModifiedTracksWidthDatabaseFile" << myTempDatabase.fileName(); 1194 1195 auto newCovers = mNewCovers; 1196 newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 1197 1198 musicDb.insertTracksList(allNewTracks, newCovers); 1199 1200 musicDbTrackAddedSpy.wait(300); 1201 1202 QCOMPARE(musicDb.allAlbumsData().count(), 5); 1203 QCOMPARE(musicDb.allArtistsData().count(), 7); 1204 QCOMPARE(musicDb.allTracksData().count(), 23); 1205 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 1206 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 1207 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 1208 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 1209 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 1210 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 1211 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 1212 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 1213 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 1214 1215 auto firstAlbum = musicDb.albumDataFromDatabaseId(musicDb.albumIdFromTitleAndArtist(QStringLiteral("album1"), QStringLiteral("Various Artists"), QStringLiteral("/"))); 1216 1217 QCOMPARE(firstAlbum.isValid(), true); 1218 QCOMPARE(firstAlbum.title(), QStringLiteral("album1")); 1219 1220 auto firstAlbumInvalid = musicDb.albumDataFromDatabaseId(musicDb.albumIdFromTitleAndArtist(QStringLiteral("album1Invalid"), QStringLiteral("Invalid Artist"), QStringLiteral("/"))); 1221 1222 QCOMPARE(firstAlbumInvalid.isValid(), false); 1223 1224 auto fourthAlbumId = musicDb.albumIdFromTitleAndArtist(QStringLiteral("album3"), QStringLiteral("artist2"), QStringLiteral("/")); 1225 auto fourthAlbum = musicDb.albumDataFromDatabaseId(fourthAlbumId); 1226 auto fourthAlbumData = musicDb.albumData(fourthAlbumId); 1227 1228 QCOMPARE(fourthAlbum.isValid(), true); 1229 QCOMPARE(fourthAlbum.title(), QStringLiteral("album3")); 1230 1231 QCOMPARE(fourthAlbumData.count(), 4); 1232 1233 const auto &oneTrack = fourthAlbumData.at(3); 1234 1235 QCOMPARE(oneTrack.isValid(), true); 1236 QCOMPARE(oneTrack.rating(), 5); 1237 } 1238 1239 { 1240 DatabaseInterface musicDb; 1241 1242 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 1243 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 1244 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 1245 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 1246 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 1247 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 1248 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 1249 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 1250 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 1251 1252 QCOMPARE(musicDb.allAlbumsData().count(), 0); 1253 QCOMPARE(musicDb.allArtistsData().count(), 0); 1254 QCOMPARE(musicDb.allTracksData().count(), 0); 1255 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 1256 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 1257 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 1258 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 1259 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 1260 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 1261 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 1262 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 1263 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 1264 1265 auto allNewTracks = mNewTracks; 1266 allNewTracks.push_back({true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 1267 QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 1268 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 1269 QDateTime::fromMSecsSinceEpoch(23), 1270 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 3, true, 1271 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}); 1272 1273 musicDb.init(QStringLiteral("testDb2"), myTempDatabase.fileName()); 1274 1275 qDebug() << "restoreModifiedTracksWidthDatabaseFile" << myTempDatabase.fileName(); 1276 1277 QCOMPARE(musicDb.allAlbumsData().count(), 5); 1278 QCOMPARE(musicDb.allArtistsData().count(), 7); 1279 QCOMPARE(musicDb.allTracksData().count(), 23); 1280 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 1281 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 1282 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 1283 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 1284 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 1285 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 1286 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 1287 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 1288 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 1289 1290 auto newCovers = mNewCovers; 1291 newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 1292 1293 musicDb.insertTracksList(allNewTracks, newCovers); 1294 1295 musicDbTrackAddedSpy.wait(300); 1296 1297 QCOMPARE(musicDb.allAlbumsData().count(), 5); 1298 QCOMPARE(musicDb.allArtistsData().count(), 7); 1299 QCOMPARE(musicDb.allTracksData().count(), 23); 1300 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 1301 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 1302 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 1303 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 1304 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 1305 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 1306 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 1307 QCOMPARE(musicDbTrackModifiedSpy.count(), 1); 1308 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 1309 1310 QCOMPARE(musicDb.allAlbumsData().count(), 5); 1311 1312 auto firstAlbum = musicDb.albumDataFromDatabaseId(musicDb.albumIdFromTitleAndArtist(QStringLiteral("album1"), QStringLiteral("Various Artists"), QStringLiteral("/"))); 1313 1314 QCOMPARE(firstAlbum.isValid(), true); 1315 QCOMPARE(firstAlbum.title(), QStringLiteral("album1")); 1316 1317 auto firstAlbumInvalid = musicDb.albumDataFromDatabaseId(musicDb.albumIdFromTitleAndArtist(QStringLiteral("album1Invalid"), QStringLiteral("Invalid Artist"), QStringLiteral("/"))); 1318 1319 QCOMPARE(firstAlbumInvalid.isValid(), false); 1320 1321 auto fourthAlbumId = musicDb.albumIdFromTitleAndArtist(QStringLiteral("album3"), QStringLiteral("artist2"), QStringLiteral("/")); 1322 auto fourthAlbum = musicDb.albumDataFromDatabaseId(fourthAlbumId); 1323 auto fourthAlbumData = musicDb.albumData(fourthAlbumId); 1324 1325 QCOMPARE(fourthAlbum.isValid(), true); 1326 QCOMPARE(fourthAlbum.title(), QStringLiteral("album3")); 1327 1328 QCOMPARE(fourthAlbumData.count(), 4); 1329 1330 const auto &oneTrack = fourthAlbumData.at(3); 1331 1332 QCOMPARE(oneTrack.isValid(), true); 1333 QCOMPARE(oneTrack.title(), QStringLiteral("track6")); 1334 QCOMPARE(oneTrack.rating(), 3); 1335 } 1336 } 1337 1338 1339 void simpleAccessor() 1340 { 1341 DatabaseInterface musicDb; 1342 1343 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 1344 1345 musicDb.init(QStringLiteral("testDb")); 1346 1347 musicDb.insertTracksList(mNewTracks, mNewCovers); 1348 musicDb.insertTracksList(mNewTracks, mNewCovers); 1349 musicDb.insertTracksList(mNewTracks, mNewCovers); 1350 musicDb.insertTracksList(mNewTracks, mNewCovers); 1351 1352 musicDbTrackAddedSpy.wait(300); 1353 1354 QCOMPARE(musicDb.allAlbumsData().count(), 5); 1355 1356 auto allAlbums = musicDb.allAlbumsData(); 1357 1358 auto firstAlbumData = musicDb.albumData(allAlbums[0].databaseId()); 1359 auto firstAlbumTitle = allAlbums[0].title(); 1360 auto firstAlbumArtist = allAlbums[0].artist(); 1361 auto firstAlbumImage = allAlbums[0].albumArtURI(); 1362 auto firstAlbumTracksCount = firstAlbumData.count(); 1363 auto firstAlbumIsSingleDiscAlbum = allAlbums[0].isSingleDiscAlbum(); 1364 1365 QCOMPARE(firstAlbumTitle, QStringLiteral("album1")); 1366 QCOMPARE(firstAlbumArtist, QStringLiteral("Various Artists")); 1367 QCOMPARE(firstAlbumImage.isValid(), true); 1368 QCOMPARE(firstAlbumImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1369 QCOMPARE(firstAlbumTracksCount, 4); 1370 QCOMPARE(firstAlbumIsSingleDiscAlbum, false); 1371 1372 auto invalidTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 2, 1); 1373 QCOMPARE(invalidTrackId, decltype(invalidTrackId)(0)); 1374 1375 auto trackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1); 1376 1377 auto firstTrack = musicDb.trackDataFromDatabaseId(trackId); 1378 1379 auto firstTrackTitle = firstTrack.title(); 1380 auto firstTrackArtist = firstTrack.artist(); 1381 auto firstTrackAlbumArtist = firstTrack.albumArtist(); 1382 auto firstTrackAlbum = firstTrack.album(); 1383 auto firstTrackImage = firstTrack.albumCover(); 1384 auto firstTrackDuration = firstTrack.duration(); 1385 auto firstTrackMilliSecondsDuration = firstTrack.duration().msecsSinceStartOfDay(); 1386 auto firstTrackTrackNumber = firstTrack.trackNumber(); 1387 auto firstTrackDiscNumber = firstTrack.discNumber(); 1388 const auto &firstTrackResource = firstTrack.resourceURI(); 1389 auto firstTrackRating = firstTrack.rating(); 1390 auto firstIsSingleDiscAlbum = firstTrack.isSingleDiscAlbum(); 1391 1392 QCOMPARE(firstTrack.isValid(), true); 1393 QCOMPARE(firstTrackTitle, QStringLiteral("track1")); 1394 QCOMPARE(firstTrackArtist, QStringLiteral("artist1")); 1395 QCOMPARE(firstTrackAlbumArtist, QStringLiteral("Various Artists")); 1396 QCOMPARE(firstTrackAlbum, QStringLiteral("album1")); 1397 QCOMPARE(firstTrackImage.isValid(), true); 1398 QCOMPARE(firstTrackImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1399 QCOMPARE(firstTrackDuration, QTime::fromMSecsSinceStartOfDay(1)); 1400 QCOMPARE(firstTrackMilliSecondsDuration, 1); 1401 QCOMPARE(firstTrackTrackNumber, 1); 1402 QCOMPARE(firstTrackDiscNumber, 1); 1403 QCOMPARE(firstTrackResource.isValid(), true); 1404 QCOMPARE(firstTrackResource, QUrl::fromLocalFile(QStringLiteral("/$1"))); 1405 QCOMPARE(firstTrackRating, 1); 1406 QCOMPARE(firstIsSingleDiscAlbum, false); 1407 1408 auto secondAlbumData = musicDb.albumData(allAlbums[1].databaseId()); 1409 auto secondAlbumTitle = allAlbums[1].title(); 1410 auto secondAlbumArtist = allAlbums[1].artist(); 1411 auto secondAlbumImage = allAlbums[1].albumArtURI(); 1412 auto secondAlbumTracksCount = secondAlbumData.count(); 1413 auto secondAlbumIsSingleDiscAlbum = allAlbums[1].isSingleDiscAlbum(); 1414 1415 QCOMPARE(secondAlbumTitle, QStringLiteral("album2")); 1416 QCOMPARE(secondAlbumArtist, QStringLiteral("artist1")); 1417 QCOMPARE(secondAlbumImage.isValid(), true); 1418 QCOMPARE(secondAlbumImage, QUrl::fromLocalFile(QStringLiteral("album2"))); 1419 QCOMPARE(secondAlbumTracksCount, 6); 1420 QCOMPARE(secondAlbumIsSingleDiscAlbum, true); 1421 } 1422 1423 void simpleAccessorAndVariousArtistAlbum() 1424 { 1425 DatabaseInterface musicDb; 1426 1427 musicDb.init(QStringLiteral("testDbVariousArtistAlbum")); 1428 1429 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 1430 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 1431 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 1432 1433 musicDb.insertTracksList(mNewTracks, mNewCovers); 1434 musicDb.insertTracksList(mNewTracks, mNewCovers); 1435 musicDb.insertTracksList(mNewTracks, mNewCovers); 1436 musicDb.insertTracksList(mNewTracks, mNewCovers); 1437 1438 musicDbTrackAddedSpy.wait(300); 1439 1440 QCOMPARE(musicDb.allAlbumsData().count(), 5); 1441 QCOMPARE(musicDb.allArtistsData().count(), 7); 1442 QCOMPARE(musicDb.allTracksData().count(), 22); 1443 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 1444 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 1445 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 1446 1447 auto allAlbums = musicDb.allAlbumsData(); 1448 1449 auto firstAlbumData = musicDb.albumData(allAlbums[0].databaseId()); 1450 auto firstAlbumTitle = allAlbums[0].title(); 1451 auto firstAlbumArtist = allAlbums[0].artist(); 1452 auto firstAlbumImage = allAlbums[0].albumArtURI(); 1453 auto firstAlbumTracksCount = firstAlbumData.count(); 1454 auto firstAlbumIsSingleDiscAlbum = allAlbums[0].isSingleDiscAlbum(); 1455 1456 QCOMPARE(firstAlbumTitle, QStringLiteral("album1")); 1457 QCOMPARE(firstAlbumArtist, QStringLiteral("Various Artists")); 1458 QCOMPARE(firstAlbumImage.isValid(), true); 1459 QCOMPARE(firstAlbumImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1460 QCOMPARE(firstAlbumTracksCount, 4); 1461 QCOMPARE(firstAlbumIsSingleDiscAlbum, false); 1462 1463 auto invalidTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 2, 1); 1464 QCOMPARE(invalidTrackId, decltype(invalidTrackId)(0)); 1465 1466 auto firstTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1); 1467 auto firstTrack = musicDb.trackDataFromDatabaseId(firstTrackId); 1468 1469 auto firstTrackTitle = firstTrack.title(); 1470 auto firstTrackArtist = firstTrack.artist(); 1471 auto firstTrackAlbumArtist = firstTrack.albumArtist(); 1472 auto firstTrackAlbum = firstTrack.album(); 1473 auto firstTrackImage = firstTrack.albumCover(); 1474 auto firstTrackDuration = firstTrack.duration(); 1475 auto firstTrackMilliSecondsDuration = firstTrack.duration().msecsSinceStartOfDay(); 1476 auto firstTrackTrackNumber = firstTrack.trackNumber(); 1477 auto firstTrackDiscNumber = firstTrack.discNumber(); 1478 const auto &firstTrackResource = firstTrack.resourceURI(); 1479 auto firstTrackRating = firstTrack.rating(); 1480 auto firstIsSingleDiscAlbum = firstTrack.isSingleDiscAlbum(); 1481 1482 QCOMPARE(firstTrack.isValid(), true); 1483 QCOMPARE(firstTrackTitle, QStringLiteral("track1")); 1484 QCOMPARE(firstTrackArtist, QStringLiteral("artist1")); 1485 QCOMPARE(firstTrackAlbumArtist, QStringLiteral("Various Artists")); 1486 QCOMPARE(firstTrackAlbum, QStringLiteral("album1")); 1487 QCOMPARE(firstTrackImage.isValid(), true); 1488 QCOMPARE(firstTrackImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1489 QCOMPARE(firstTrackDuration, QTime::fromMSecsSinceStartOfDay(1)); 1490 QCOMPARE(firstTrackMilliSecondsDuration, 1); 1491 QCOMPARE(firstTrackTrackNumber, 1); 1492 QCOMPARE(firstTrackDiscNumber, 1); 1493 QCOMPARE(firstTrackResource.isValid(), true); 1494 QCOMPARE(firstTrackResource, QUrl::fromLocalFile(QStringLiteral("/$1"))); 1495 QCOMPARE(firstTrackRating, 1); 1496 QCOMPARE(firstIsSingleDiscAlbum, false); 1497 1498 auto secondTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist2"), 1499 QStringLiteral("album1"), 2, 2); 1500 auto secondTrack = musicDb.trackDataFromDatabaseId(secondTrackId); 1501 1502 auto secondTrackTitle = secondTrack.title(); 1503 auto secondTrackArtist = secondTrack.artist(); 1504 auto secondTrackAlbumArtist = secondTrack.albumArtist(); 1505 auto secondTrackAlbum = secondTrack.album(); 1506 auto seconfTrackImage = secondTrack.albumCover(); 1507 auto secondTrackDuration = secondTrack.duration(); 1508 auto secondTrackMilliSecondsDuration = secondTrack.duration().msecsSinceStartOfDay(); 1509 auto secondTrackTrackNumber = secondTrack.trackNumber(); 1510 auto secondTrackDiscNumber = secondTrack.discNumber(); 1511 const auto &secondTrackResource = secondTrack.resourceURI(); 1512 auto secondTrackRating = secondTrack.rating(); 1513 auto secondIsSingleDiscAlbum = secondTrack.isSingleDiscAlbum(); 1514 1515 QCOMPARE(secondTrack.isValid(), true); 1516 QCOMPARE(secondTrackTitle, QStringLiteral("track2")); 1517 QCOMPARE(secondTrackArtist, QStringLiteral("artist2")); 1518 QCOMPARE(secondTrackAlbumArtist, QStringLiteral("Various Artists")); 1519 QCOMPARE(secondTrackAlbum, QStringLiteral("album1")); 1520 QCOMPARE(seconfTrackImage.isValid(), true); 1521 QCOMPARE(seconfTrackImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1522 QCOMPARE(secondTrackDuration, QTime::fromMSecsSinceStartOfDay(2)); 1523 QCOMPARE(secondTrackMilliSecondsDuration, 2); 1524 QCOMPARE(secondTrackTrackNumber, 2); 1525 QCOMPARE(secondTrackDiscNumber, 2); 1526 QCOMPARE(secondTrackResource.isValid(), true); 1527 QCOMPARE(secondTrackResource, QUrl::fromLocalFile(QStringLiteral("/$2"))); 1528 QCOMPARE(secondTrackRating, 2); 1529 QCOMPARE(secondIsSingleDiscAlbum, false); 1530 1531 auto thirdTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), 1532 QStringLiteral("album1"), 3, 3); 1533 auto thirdTrack = musicDb.trackDataFromDatabaseId(thirdTrackId); 1534 1535 auto thirdTrackTitle = thirdTrack.title(); 1536 auto thirdTrackArtist = thirdTrack.artist(); 1537 auto thirdTrackAlbumArtist = thirdTrack.albumArtist(); 1538 auto thirdTrackAlbum = thirdTrack.album(); 1539 auto thirdTrackImage = thirdTrack.albumCover(); 1540 auto thirdTrackDuration = thirdTrack.duration(); 1541 auto thirdTrackMilliSecondsDuration = thirdTrack.duration().msecsSinceStartOfDay(); 1542 auto thirdTrackTrackNumber = thirdTrack.trackNumber(); 1543 auto thirdTrackDiscNumber = thirdTrack.discNumber(); 1544 const auto &thirdTrackResource = thirdTrack.resourceURI(); 1545 auto thirdTrackRating = thirdTrack.rating(); 1546 auto thirdIsSingleDiscAlbum = thirdTrack.isSingleDiscAlbum(); 1547 1548 QCOMPARE(thirdTrack.isValid(), true); 1549 QCOMPARE(thirdTrackTitle, QStringLiteral("track3")); 1550 QCOMPARE(thirdTrackArtist, QStringLiteral("artist3")); 1551 QCOMPARE(thirdTrackAlbumArtist, QStringLiteral("Various Artists")); 1552 QCOMPARE(thirdTrackAlbum, QStringLiteral("album1")); 1553 QCOMPARE(thirdTrackImage.isValid(), true); 1554 QCOMPARE(thirdTrackImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1555 QCOMPARE(thirdTrackDuration, QTime::fromMSecsSinceStartOfDay(3)); 1556 QCOMPARE(thirdTrackMilliSecondsDuration, 3); 1557 QCOMPARE(thirdTrackTrackNumber, 3); 1558 QCOMPARE(thirdTrackDiscNumber, 3); 1559 QCOMPARE(thirdTrackResource.isValid(), true); 1560 QCOMPARE(thirdTrackResource, QUrl::fromLocalFile(QStringLiteral("/$3"))); 1561 QCOMPARE(thirdTrackRating, 3); 1562 QCOMPARE(thirdIsSingleDiscAlbum, false); 1563 1564 auto fourthTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist4"), 1565 QStringLiteral("album1"), 4, 4); 1566 auto fourthTrack = musicDb.trackDataFromDatabaseId(fourthTrackId); 1567 1568 auto fourthTrackTitle = fourthTrack.title(); 1569 auto fourthTrackArtist = fourthTrack.artist(); 1570 auto fourthTrackAlbumArtist = fourthTrack.albumArtist(); 1571 auto fourthTrackAlbum = fourthTrack.album(); 1572 auto fourthTrackImage = fourthTrack.albumCover(); 1573 auto fourthTrackDuration = fourthTrack.duration(); 1574 auto fourthTrackMilliSecondsDuration = fourthTrack.duration().msecsSinceStartOfDay(); 1575 auto fourthTrackTrackNumber = fourthTrack.trackNumber(); 1576 auto fourthTrackDiscNumber = fourthTrack.discNumber(); 1577 const auto &fourthTrackResource = fourthTrack.resourceURI(); 1578 auto fourthTrackRating = thirdTrack.rating(); 1579 auto fourthIsSingleDiscAlbum = fourthTrack.isSingleDiscAlbum(); 1580 1581 QCOMPARE(fourthTrack.isValid(), true); 1582 QCOMPARE(fourthTrackTitle, QStringLiteral("track4")); 1583 QCOMPARE(fourthTrackArtist, QStringLiteral("artist4")); 1584 QCOMPARE(fourthTrackAlbumArtist, QStringLiteral("Various Artists")); 1585 QCOMPARE(fourthTrackAlbum, QStringLiteral("album1")); 1586 QCOMPARE(fourthTrackImage.isValid(), true); 1587 QCOMPARE(fourthTrackImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1588 QCOMPARE(fourthTrackDuration, QTime::fromMSecsSinceStartOfDay(4)); 1589 QCOMPARE(fourthTrackMilliSecondsDuration, 4); 1590 QCOMPARE(fourthTrackTrackNumber, 4); 1591 QCOMPARE(fourthTrackDiscNumber, 4); 1592 QCOMPARE(fourthTrackResource.isValid(), true); 1593 QCOMPARE(fourthTrackResource, QUrl::fromLocalFile(QStringLiteral("/$4"))); 1594 QCOMPARE(fourthTrackRating, 3); 1595 QCOMPARE(fourthIsSingleDiscAlbum, false); 1596 1597 auto secondAlbumData = musicDb.albumData(allAlbums[1].databaseId()); 1598 auto secondAlbumTitle = allAlbums[1].title(); 1599 auto secondAlbumArtist = allAlbums[1].artist(); 1600 auto secondAlbumImage = allAlbums[1].albumArtURI(); 1601 auto secondAlbumTracksCount = secondAlbumData.count(); 1602 auto secondAlbumIsSingleDiscAlbum = allAlbums[1].isSingleDiscAlbum(); 1603 1604 QCOMPARE(secondAlbumTitle, QStringLiteral("album2")); 1605 QCOMPARE(secondAlbumArtist, QStringLiteral("artist1")); 1606 QCOMPARE(secondAlbumImage.isValid(), true); 1607 QCOMPARE(secondAlbumImage, QUrl::fromLocalFile(QStringLiteral("album2"))); 1608 QCOMPARE(secondAlbumTracksCount, 6); 1609 QCOMPARE(secondAlbumIsSingleDiscAlbum, true); 1610 } 1611 1612 void simpleAccessorAndVariousArtistAlbumWithFile() 1613 { 1614 QTemporaryFile myDatabaseFile; 1615 myDatabaseFile.open(); 1616 1617 { 1618 DatabaseInterface musicDb; 1619 1620 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 1621 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 1622 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 1623 1624 QCOMPARE(musicDb.allAlbumsData().count(), 0); 1625 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 1626 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 1627 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 1628 1629 musicDb.init(QStringLiteral("testDbVariousArtistAlbum1"), myDatabaseFile.fileName()); 1630 1631 QCOMPARE(musicDb.allAlbumsData().count(), 0); 1632 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 1633 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 1634 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 1635 1636 musicDb.insertTracksList(mNewTracks, mNewCovers); 1637 1638 musicDbTrackAddedSpy.wait(300); 1639 1640 QCOMPARE(musicDb.allAlbumsData().count(), 5); 1641 QCOMPARE(musicDb.allArtistsData().count(), 7); 1642 QCOMPARE(musicDb.allTracksData().count(), 22); 1643 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 1644 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 1645 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 1646 1647 auto allAlbums = musicDb.allAlbumsData(); 1648 1649 auto firstAlbumData = musicDb.albumData(allAlbums[0].databaseId()); 1650 auto firstAlbumTitle = allAlbums[0].title(); 1651 auto firstAlbumArtist = allAlbums[0].artist(); 1652 auto firstAlbumImage = allAlbums[0].albumArtURI(); 1653 auto firstAlbumTracksCount = firstAlbumData.count(); 1654 auto firstAlbumIsSingleDiscAlbum = allAlbums[0].isSingleDiscAlbum(); 1655 1656 QCOMPARE(firstAlbumTitle, QStringLiteral("album1")); 1657 QCOMPARE(firstAlbumArtist, QStringLiteral("Various Artists")); 1658 QCOMPARE(firstAlbumImage.isValid(), true); 1659 QCOMPARE(firstAlbumImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1660 QCOMPARE(firstAlbumTracksCount, 4); 1661 QCOMPARE(firstAlbumIsSingleDiscAlbum, false); 1662 1663 auto invalidTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 2, 1); 1664 QCOMPARE(invalidTrackId, decltype(invalidTrackId)(0)); 1665 1666 auto firstTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1); 1667 auto firstTrack = musicDb.trackDataFromDatabaseId(firstTrackId); 1668 1669 auto firstTrackTitle = firstTrack.title(); 1670 auto firstTrackArtist = firstTrack.artist(); 1671 auto firstTrackAlbumArtist = firstTrack.albumArtist(); 1672 auto firstTrackAlbum = firstTrack.album(); 1673 auto firstTrackImage = firstTrack.albumCover(); 1674 auto firstTrackDuration = firstTrack.duration(); 1675 auto firstTrackMilliSecondsDuration = firstTrack.duration().msecsSinceStartOfDay(); 1676 auto firstTrackTrackNumber = firstTrack.trackNumber(); 1677 auto firstTrackDiscNumber = firstTrack.discNumber(); 1678 const auto &firstTrackResource = firstTrack.resourceURI(); 1679 auto firstTrackRating = firstTrack.rating(); 1680 auto firstIsSingleDiscAlbum = firstTrack.isSingleDiscAlbum(); 1681 1682 QCOMPARE(firstTrack.isValid(), true); 1683 QCOMPARE(firstTrackTitle, QStringLiteral("track1")); 1684 QCOMPARE(firstTrackArtist, QStringLiteral("artist1")); 1685 QCOMPARE(firstTrackAlbumArtist, QStringLiteral("Various Artists")); 1686 QCOMPARE(firstTrackAlbum, QStringLiteral("album1")); 1687 QCOMPARE(firstTrackImage.isValid(), true); 1688 QCOMPARE(firstTrackImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1689 QCOMPARE(firstTrackDuration, QTime::fromMSecsSinceStartOfDay(1)); 1690 QCOMPARE(firstTrackMilliSecondsDuration, 1); 1691 QCOMPARE(firstTrackTrackNumber, 1); 1692 QCOMPARE(firstTrackDiscNumber, 1); 1693 QCOMPARE(firstTrackResource.isValid(), true); 1694 QCOMPARE(firstTrackResource, QUrl::fromLocalFile(QStringLiteral("/$1"))); 1695 QCOMPARE(firstTrackRating, 1); 1696 QCOMPARE(firstIsSingleDiscAlbum, false); 1697 1698 auto secondTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist2"), 1699 QStringLiteral("album1"), 2, 2); 1700 auto secondTrack = musicDb.trackDataFromDatabaseId(secondTrackId); 1701 1702 auto secondTrackTitle = secondTrack.title(); 1703 auto secondTrackArtist = secondTrack.artist(); 1704 auto secondTrackAlbumArtist = secondTrack.albumArtist(); 1705 auto secondTrackAlbum = secondTrack.album(); 1706 auto seconfTrackImage = secondTrack.albumCover(); 1707 auto secondTrackDuration = secondTrack.duration(); 1708 auto secondTrackMilliSecondsDuration = secondTrack.duration().msecsSinceStartOfDay(); 1709 auto secondTrackTrackNumber = secondTrack.trackNumber(); 1710 auto secondTrackDiscNumber = secondTrack.discNumber(); 1711 const auto &secondTrackResource = secondTrack.resourceURI(); 1712 auto secondTrackRating = secondTrack.rating(); 1713 auto secondIsSingleDiscAlbum = secondTrack.isSingleDiscAlbum(); 1714 1715 QCOMPARE(secondTrack.isValid(), true); 1716 QCOMPARE(secondTrackTitle, QStringLiteral("track2")); 1717 QCOMPARE(secondTrackArtist, QStringLiteral("artist2")); 1718 QCOMPARE(secondTrackAlbumArtist, QStringLiteral("Various Artists")); 1719 QCOMPARE(secondTrackAlbum, QStringLiteral("album1")); 1720 QCOMPARE(seconfTrackImage.isValid(), true); 1721 QCOMPARE(seconfTrackImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1722 QCOMPARE(secondTrackDuration, QTime::fromMSecsSinceStartOfDay(2)); 1723 QCOMPARE(secondTrackMilliSecondsDuration, 2); 1724 QCOMPARE(secondTrackTrackNumber, 2); 1725 QCOMPARE(secondTrackDiscNumber, 2); 1726 QCOMPARE(secondTrackResource.isValid(), true); 1727 QCOMPARE(secondTrackResource, QUrl::fromLocalFile(QStringLiteral("/$2"))); 1728 QCOMPARE(secondTrackRating, 2); 1729 QCOMPARE(secondIsSingleDiscAlbum, false); 1730 1731 auto thirdTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), 1732 QStringLiteral("album1"), 3, 3); 1733 auto thirdTrack = musicDb.trackDataFromDatabaseId(thirdTrackId); 1734 1735 auto thirdTrackTitle = thirdTrack.title(); 1736 auto thirdTrackArtist = thirdTrack.artist(); 1737 auto thirdTrackAlbumArtist = thirdTrack.albumArtist(); 1738 auto thirdTrackAlbum = thirdTrack.album(); 1739 auto thirdTrackImage = thirdTrack.albumCover(); 1740 auto thirdTrackDuration = thirdTrack.duration(); 1741 auto thirdTrackMilliSecondsDuration = thirdTrack.duration().msecsSinceStartOfDay(); 1742 auto thirdTrackTrackNumber = thirdTrack.trackNumber(); 1743 auto thirdTrackDiscNumber = thirdTrack.discNumber(); 1744 const auto &thirdTrackResource = thirdTrack.resourceURI(); 1745 auto thirdTrackRating = thirdTrack.rating(); 1746 auto thirdIsSingleDiscAlbum = thirdTrack.isSingleDiscAlbum(); 1747 1748 QCOMPARE(thirdTrack.isValid(), true); 1749 QCOMPARE(thirdTrackTitle, QStringLiteral("track3")); 1750 QCOMPARE(thirdTrackArtist, QStringLiteral("artist3")); 1751 QCOMPARE(thirdTrackAlbumArtist, QStringLiteral("Various Artists")); 1752 QCOMPARE(thirdTrackAlbum, QStringLiteral("album1")); 1753 QCOMPARE(thirdTrackImage.isValid(), true); 1754 QCOMPARE(thirdTrackImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1755 QCOMPARE(thirdTrackDuration, QTime::fromMSecsSinceStartOfDay(3)); 1756 QCOMPARE(thirdTrackMilliSecondsDuration, 3); 1757 QCOMPARE(thirdTrackTrackNumber, 3); 1758 QCOMPARE(thirdTrackDiscNumber, 3); 1759 QCOMPARE(thirdTrackResource.isValid(), true); 1760 QCOMPARE(thirdTrackResource, QUrl::fromLocalFile(QStringLiteral("/$3"))); 1761 QCOMPARE(thirdTrackRating, 3); 1762 QCOMPARE(thirdIsSingleDiscAlbum, false); 1763 1764 auto fourthTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist4"), 1765 QStringLiteral("album1"), 4, 4); 1766 auto fourthTrack = musicDb.trackDataFromDatabaseId(fourthTrackId); 1767 1768 auto fourthTrackTitle = fourthTrack.title(); 1769 auto fourthTrackArtist = fourthTrack.artist(); 1770 auto fourthTrackAlbumArtist = fourthTrack.albumArtist(); 1771 auto fourthTrackAlbum = fourthTrack.album(); 1772 auto fourthTrackImage = fourthTrack.albumCover(); 1773 auto fourthTrackDuration = fourthTrack.duration(); 1774 auto fourthTrackMilliSecondsDuration = fourthTrack.duration().msecsSinceStartOfDay(); 1775 auto fourthTrackTrackNumber = fourthTrack.trackNumber(); 1776 auto fourthTrackDiscNumber = fourthTrack.discNumber(); 1777 const auto &fourthTrackResource = fourthTrack.resourceURI(); 1778 auto fourthTrackRating = thirdTrack.rating(); 1779 auto fourthIsSingleDiscAlbum = fourthTrack.isSingleDiscAlbum(); 1780 1781 QCOMPARE(fourthTrack.isValid(), true); 1782 QCOMPARE(fourthTrackTitle, QStringLiteral("track4")); 1783 QCOMPARE(fourthTrackArtist, QStringLiteral("artist4")); 1784 QCOMPARE(fourthTrackAlbumArtist, QStringLiteral("Various Artists")); 1785 QCOMPARE(fourthTrackAlbum, QStringLiteral("album1")); 1786 QCOMPARE(fourthTrackImage.isValid(), true); 1787 QCOMPARE(fourthTrackImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1788 QCOMPARE(fourthTrackDuration, QTime::fromMSecsSinceStartOfDay(4)); 1789 QCOMPARE(fourthTrackMilliSecondsDuration, 4); 1790 QCOMPARE(fourthTrackTrackNumber, 4); 1791 QCOMPARE(fourthTrackDiscNumber, 4); 1792 QCOMPARE(fourthTrackResource.isValid(), true); 1793 QCOMPARE(fourthTrackResource, QUrl::fromLocalFile(QStringLiteral("/$4"))); 1794 QCOMPARE(fourthTrackRating, 3); 1795 QCOMPARE(fourthIsSingleDiscAlbum, false); 1796 1797 auto secondAlbumData = musicDb.albumData(allAlbums[1].databaseId()); 1798 auto secondAlbumTitle = allAlbums[1].title(); 1799 auto secondAlbumArtist = allAlbums[1].artist(); 1800 auto secondAlbumImage = allAlbums[1].albumArtURI(); 1801 auto secondAlbumTracksCount = secondAlbumData.count(); 1802 auto secondAlbumIsSingleDiscAlbum = allAlbums[1].isSingleDiscAlbum(); 1803 1804 QCOMPARE(secondAlbumTitle, QStringLiteral("album2")); 1805 QCOMPARE(secondAlbumArtist, QStringLiteral("artist1")); 1806 QCOMPARE(secondAlbumImage.isValid(), true); 1807 QCOMPARE(secondAlbumImage, QUrl::fromLocalFile(QStringLiteral("album2"))); 1808 QCOMPARE(secondAlbumTracksCount, 6); 1809 QCOMPARE(secondAlbumIsSingleDiscAlbum, true); 1810 } 1811 1812 { 1813 DatabaseInterface musicDb; 1814 1815 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 1816 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 1817 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 1818 1819 QCOMPARE(musicDb.allAlbumsData().count(), 0); 1820 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 1821 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 1822 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 1823 1824 musicDb.init(QStringLiteral("testDbVariousArtistAlbum2"), myDatabaseFile.fileName()); 1825 1826 QCOMPARE(musicDb.allAlbumsData().count(), 5); 1827 QCOMPARE(musicDb.allArtistsData().count(), 7); 1828 QCOMPARE(musicDb.allTracksData().count(), 22); 1829 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 1830 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 1831 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 1832 1833 musicDb.insertTracksList(mNewTracks, mNewCovers); 1834 1835 musicDbTrackAddedSpy.wait(300); 1836 1837 QCOMPARE(musicDb.allAlbumsData().count(), 5); 1838 QCOMPARE(musicDb.allArtistsData().count(), 7); 1839 QCOMPARE(musicDb.allTracksData().count(), 22); 1840 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 1841 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 1842 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 1843 1844 auto allAlbums = musicDb.allAlbumsData(); 1845 1846 auto firstAlbumData = musicDb.albumData(allAlbums[0].databaseId()); 1847 auto firstAlbumTitle = allAlbums[0].title(); 1848 auto firstAlbumArtist = allAlbums[0].artist(); 1849 auto firstAlbumImage = allAlbums[0].albumArtURI(); 1850 auto firstAlbumTracksCount = firstAlbumData.count(); 1851 auto firstAlbumIsSingleDiscAlbum = allAlbums[0].isSingleDiscAlbum(); 1852 1853 QCOMPARE(firstAlbumTitle, QStringLiteral("album1")); 1854 QCOMPARE(firstAlbumArtist, QStringLiteral("Various Artists")); 1855 QCOMPARE(firstAlbumImage.isValid(), true); 1856 QCOMPARE(firstAlbumImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1857 QCOMPARE(firstAlbumTracksCount, 4); 1858 QCOMPARE(firstAlbumIsSingleDiscAlbum, false); 1859 1860 auto invalidTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), 1861 QStringLiteral("album1"), 2, 1); 1862 QCOMPARE(invalidTrackId, decltype(invalidTrackId)(0)); 1863 1864 auto firstTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), 1865 QStringLiteral("album1"), 1, 1); 1866 auto firstTrack = musicDb.trackDataFromDatabaseId(firstTrackId); 1867 1868 auto firstTrackTitle = firstTrack.title(); 1869 auto firstTrackArtist = firstTrack.artist(); 1870 auto firstTrackAlbumArtist = firstTrack.albumArtist(); 1871 auto firstTrackAlbum = firstTrack.album(); 1872 auto firstTrackImage = firstTrack.albumCover(); 1873 auto firstTrackDuration = firstTrack.duration(); 1874 auto firstTrackMilliSecondsDuration = firstTrack.duration().msecsSinceStartOfDay(); 1875 auto firstTrackTrackNumber = firstTrack.trackNumber(); 1876 auto firstTrackDiscNumber = firstTrack.discNumber(); 1877 const auto &firstTrackResource = firstTrack.resourceURI(); 1878 auto firstTrackRating = firstTrack.rating(); 1879 auto firstIsSingleDiscAlbum = firstTrack.isSingleDiscAlbum(); 1880 1881 QCOMPARE(firstTrack.isValid(), true); 1882 QCOMPARE(firstTrackTitle, QStringLiteral("track1")); 1883 QCOMPARE(firstTrackArtist, QStringLiteral("artist1")); 1884 QCOMPARE(firstTrackAlbumArtist, QStringLiteral("Various Artists")); 1885 QCOMPARE(firstTrackAlbum, QStringLiteral("album1")); 1886 QCOMPARE(firstTrackImage.isValid(), true); 1887 QCOMPARE(firstTrackImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1888 QCOMPARE(firstTrackDuration, QTime::fromMSecsSinceStartOfDay(1)); 1889 QCOMPARE(firstTrackMilliSecondsDuration, 1); 1890 QCOMPARE(firstTrackTrackNumber, 1); 1891 QCOMPARE(firstTrackDiscNumber, 1); 1892 QCOMPARE(firstTrackResource.isValid(), true); 1893 QCOMPARE(firstTrackResource, QUrl::fromLocalFile(QStringLiteral("/$1"))); 1894 QCOMPARE(firstTrackRating, 1); 1895 QCOMPARE(firstIsSingleDiscAlbum, false); 1896 1897 auto secondTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist2"), 1898 QStringLiteral("album1"), 2, 2); 1899 auto secondTrack = musicDb.trackDataFromDatabaseId(secondTrackId); 1900 1901 auto secondTrackTitle = secondTrack.title(); 1902 auto secondTrackArtist = secondTrack.artist(); 1903 auto secondTrackAlbumArtist = secondTrack.albumArtist(); 1904 auto secondTrackAlbum = secondTrack.album(); 1905 auto seconfTrackImage = secondTrack.albumCover(); 1906 auto secondTrackDuration = secondTrack.duration(); 1907 auto secondTrackMilliSecondsDuration = secondTrack.duration().msecsSinceStartOfDay(); 1908 auto secondTrackTrackNumber = secondTrack.trackNumber(); 1909 auto secondTrackDiscNumber = secondTrack.discNumber(); 1910 const auto &secondTrackResource = secondTrack.resourceURI(); 1911 auto secondTrackRating = secondTrack.rating(); 1912 auto secondIsSingleDiscAlbum = secondTrack.isSingleDiscAlbum(); 1913 1914 QCOMPARE(secondTrack.isValid(), true); 1915 QCOMPARE(secondTrackTitle, QStringLiteral("track2")); 1916 QCOMPARE(secondTrackArtist, QStringLiteral("artist2")); 1917 QCOMPARE(secondTrackAlbumArtist, QStringLiteral("Various Artists")); 1918 QCOMPARE(secondTrackAlbum, QStringLiteral("album1")); 1919 QCOMPARE(seconfTrackImage.isValid(), true); 1920 QCOMPARE(seconfTrackImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1921 QCOMPARE(secondTrackDuration, QTime::fromMSecsSinceStartOfDay(2)); 1922 QCOMPARE(secondTrackMilliSecondsDuration, 2); 1923 QCOMPARE(secondTrackTrackNumber, 2); 1924 QCOMPARE(secondTrackDiscNumber, 2); 1925 QCOMPARE(secondTrackResource.isValid(), true); 1926 QCOMPARE(secondTrackResource, QUrl::fromLocalFile(QStringLiteral("/$2"))); 1927 QCOMPARE(secondTrackRating, 2); 1928 QCOMPARE(secondIsSingleDiscAlbum, false); 1929 1930 auto thirdTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), 1931 QStringLiteral("album1"), 3, 3); 1932 auto thirdTrack = musicDb.trackDataFromDatabaseId(thirdTrackId); 1933 1934 auto thirdTrackTitle = thirdTrack.title(); 1935 auto thirdTrackArtist = thirdTrack.artist(); 1936 auto thirdTrackAlbumArtist = thirdTrack.albumArtist(); 1937 auto thirdTrackAlbum = thirdTrack.album(); 1938 auto thirdTrackImage = thirdTrack.albumCover(); 1939 auto thirdTrackDuration = thirdTrack.duration(); 1940 auto thirdTrackMilliSecondsDuration = thirdTrack.duration().msecsSinceStartOfDay(); 1941 auto thirdTrackTrackNumber = thirdTrack.trackNumber(); 1942 auto thirdTrackDiscNumber = thirdTrack.discNumber(); 1943 const auto &thirdTrackResource = thirdTrack.resourceURI(); 1944 auto thirdTrackRating = thirdTrack.rating(); 1945 auto thirdIsSingleDiscAlbum = thirdTrack.isSingleDiscAlbum(); 1946 1947 QCOMPARE(thirdTrack.isValid(), true); 1948 QCOMPARE(thirdTrackTitle, QStringLiteral("track3")); 1949 QCOMPARE(thirdTrackArtist, QStringLiteral("artist3")); 1950 QCOMPARE(thirdTrackAlbumArtist, QStringLiteral("Various Artists")); 1951 QCOMPARE(thirdTrackAlbum, QStringLiteral("album1")); 1952 QCOMPARE(thirdTrackImage.isValid(), true); 1953 QCOMPARE(thirdTrackImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1954 QCOMPARE(thirdTrackDuration, QTime::fromMSecsSinceStartOfDay(3)); 1955 QCOMPARE(thirdTrackMilliSecondsDuration, 3); 1956 QCOMPARE(thirdTrackTrackNumber, 3); 1957 QCOMPARE(thirdTrackDiscNumber, 3); 1958 QCOMPARE(thirdTrackResource.isValid(), true); 1959 QCOMPARE(thirdTrackResource, QUrl::fromLocalFile(QStringLiteral("/$3"))); 1960 QCOMPARE(thirdTrackRating, 3); 1961 QCOMPARE(thirdIsSingleDiscAlbum, false); 1962 1963 auto fourthTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist4"), 1964 QStringLiteral("album1"), 4, 4); 1965 auto fourthTrack = musicDb.trackDataFromDatabaseId(fourthTrackId); 1966 1967 auto fourthTrackTitle = fourthTrack.title(); 1968 auto fourthTrackArtist = fourthTrack.artist(); 1969 auto fourthTrackAlbumArtist = fourthTrack.albumArtist(); 1970 auto fourthTrackAlbum = fourthTrack.album(); 1971 auto fourthTrackImage = fourthTrack.albumCover(); 1972 auto fourthTrackDuration = fourthTrack.duration(); 1973 auto fourthTrackMilliSecondsDuration = fourthTrack.duration().msecsSinceStartOfDay(); 1974 auto fourthTrackTrackNumber = fourthTrack.trackNumber(); 1975 auto fourthTrackDiscNumber = fourthTrack.discNumber(); 1976 const auto &fourthTrackResource = fourthTrack.resourceURI(); 1977 auto fourthTrackRating = thirdTrack.rating(); 1978 auto fourthIsSingleDiscAlbum = fourthTrack.isSingleDiscAlbum(); 1979 1980 QCOMPARE(fourthTrack.isValid(), true); 1981 QCOMPARE(fourthTrackTitle, QStringLiteral("track4")); 1982 QCOMPARE(fourthTrackArtist, QStringLiteral("artist4")); 1983 QCOMPARE(fourthTrackAlbumArtist, QStringLiteral("Various Artists")); 1984 QCOMPARE(fourthTrackAlbum, QStringLiteral("album1")); 1985 QCOMPARE(fourthTrackImage.isValid(), true); 1986 QCOMPARE(fourthTrackImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 1987 QCOMPARE(fourthTrackDuration, QTime::fromMSecsSinceStartOfDay(4)); 1988 QCOMPARE(fourthTrackMilliSecondsDuration, 4); 1989 QCOMPARE(fourthTrackTrackNumber, 4); 1990 QCOMPARE(fourthTrackDiscNumber, 4); 1991 QCOMPARE(fourthTrackResource.isValid(), true); 1992 QCOMPARE(fourthTrackResource, QUrl::fromLocalFile(QStringLiteral("/$4"))); 1993 QCOMPARE(fourthTrackRating, 3); 1994 QCOMPARE(fourthIsSingleDiscAlbum, false); 1995 1996 auto secondAlbumData = musicDb.albumData(allAlbums[1].databaseId()); 1997 auto secondAlbumTitle = allAlbums[1].title(); 1998 auto secondAlbumArtist = allAlbums[1].artist(); 1999 auto secondAlbumImage = allAlbums[1].albumArtURI(); 2000 auto secondAlbumTracksCount = secondAlbumData.count(); 2001 auto secondAlbumIsSingleDiscAlbum = allAlbums[1].isSingleDiscAlbum(); 2002 2003 QCOMPARE(secondAlbumTitle, QStringLiteral("album2")); 2004 QCOMPARE(secondAlbumArtist, QStringLiteral("artist1")); 2005 QCOMPARE(secondAlbumImage.isValid(), true); 2006 QCOMPARE(secondAlbumImage, QUrl::fromLocalFile(QStringLiteral("album2"))); 2007 QCOMPARE(secondAlbumTracksCount, 6); 2008 QCOMPARE(secondAlbumIsSingleDiscAlbum, true); 2009 2010 auto newTrack = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 2011 QStringLiteral("artist8"), QStringLiteral("album3"), QStringLiteral("artist2"), 2012 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 2013 QDateTime::fromMSecsSinceEpoch(23), 2014 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, 2015 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 2016 auto newTracks = DataTypes::ListTrackDataType(); 2017 newTracks.push_back(newTrack); 2018 2019 auto newFiles2 = QList<QUrl>(); 2020 for (const auto &oneTrack : newTracks) { 2021 newFiles2.push_back(oneTrack.resourceURI()); 2022 } 2023 2024 auto newCovers = mNewCovers; 2025 newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("image$19")); 2026 2027 musicDb.insertTracksList(newTracks, newCovers); 2028 2029 musicDbTrackAddedSpy.wait(300); 2030 2031 QCOMPARE(musicDb.allAlbumsData().count(), 5); 2032 QCOMPARE(musicDb.allArtistsData().count(), 8); 2033 QCOMPARE(musicDb.allTracksData().count(), 23); 2034 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 2035 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 2036 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 2037 } 2038 } 2039 2040 void testTracksFromAuthor() { 2041 DatabaseInterface musicDb; 2042 2043 musicDb.init(QStringLiteral("testDbVariousArtistAlbum")); 2044 2045 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 2046 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 2047 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 2048 2049 musicDb.insertTracksList(mNewTracks, mNewCovers); 2050 2051 musicDbTrackAddedSpy.wait(300); 2052 2053 QCOMPARE(musicDb.allAlbumsData().count(), 5); 2054 QCOMPARE(musicDb.allArtistsData().count(), 7); 2055 QCOMPARE(musicDb.allTracksData().count(), 22); 2056 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 2057 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 2058 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 2059 2060 auto allTracks = musicDb.tracksDataFromAuthor(QStringLiteral("artist1")); 2061 2062 QCOMPARE(allTracks.size(), 6); 2063 QCOMPARE(allTracks[0].albumArtist(), QStringLiteral("Various Artists")); 2064 QCOMPARE(allTracks[1].albumArtist(), QStringLiteral("artist1")); 2065 QCOMPARE(allTracks[2].albumArtist(), QStringLiteral("artist1")); 2066 QCOMPARE(allTracks[3].albumArtist(), QStringLiteral("artist1")); 2067 QCOMPARE(allTracks[4].albumArtist(), QStringLiteral("artist1")); 2068 QCOMPARE(allTracks[5].albumArtist(), QStringLiteral("artist1")); 2069 } 2070 2071 void removeOneTrack() 2072 { 2073 QTemporaryFile databaseFile; 2074 databaseFile.open(); 2075 2076 qDebug() << "removeOneTrack" << databaseFile.fileName(); 2077 2078 DatabaseInterface musicDb; 2079 2080 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 2081 2082 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 2083 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 2084 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 2085 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 2086 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 2087 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 2088 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 2089 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 2090 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 2091 2092 QCOMPARE(musicDb.allAlbumsData().count(), 0); 2093 QCOMPARE(musicDb.allArtistsData().count(), 0); 2094 QCOMPARE(musicDb.allTracksData().count(), 0); 2095 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 2096 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 2097 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 2098 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2099 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2100 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2101 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 2102 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2103 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2104 2105 musicDb.insertTracksList(mNewTracks, mNewCovers); 2106 2107 musicDbTrackAddedSpy.wait(300); 2108 2109 QCOMPARE(musicDb.allAlbumsData().count(), 5); 2110 QCOMPARE(musicDb.allArtistsData().count(), 7); 2111 QCOMPARE(musicDb.allTracksData().count(), 22); 2112 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 2113 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 2114 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 2115 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2116 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2117 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2118 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 2119 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2120 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2121 2122 auto allAlbums = musicDb.allAlbumsData(); 2123 2124 auto firstAlbumData = musicDb.albumData(allAlbums[0].databaseId()); 2125 auto firstAlbumTitle = allAlbums[0].title(); 2126 auto firstAlbumArtist = allAlbums[0].artist(); 2127 auto firstAlbumImage = allAlbums[0].albumArtURI(); 2128 auto firstAlbumTracksCount = firstAlbumData.count(); 2129 auto firstAlbumIsSingleDiscAlbum = allAlbums[0].isSingleDiscAlbum(); 2130 2131 QCOMPARE(firstAlbumTitle, QStringLiteral("album1")); 2132 QCOMPARE(firstAlbumArtist, QStringLiteral("Various Artists")); 2133 QCOMPARE(firstAlbumImage.isValid(), true); 2134 QCOMPARE(firstAlbumImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 2135 QCOMPARE(firstAlbumTracksCount, 4); 2136 QCOMPARE(firstAlbumIsSingleDiscAlbum, false); 2137 2138 auto trackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), 2139 QStringLiteral("album1"), 1, 1); 2140 2141 QVERIFY2(trackId != 0, "trackId should be different from 0"); 2142 2143 auto firstTrack = musicDb.trackDataFromDatabaseId(trackId); 2144 2145 QCOMPARE(firstTrack.isValid(), true); 2146 2147 musicDb.removeTracksList({firstTrack.resourceURI()}); 2148 2149 QCOMPARE(musicDb.allAlbumsData().count(), 5); 2150 QCOMPARE(musicDb.allArtistsData().count(), 7); 2151 QCOMPARE(musicDb.allTracksData().count(), 21); 2152 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 2153 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 2154 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 2155 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2156 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2157 QCOMPARE(musicDbTrackRemovedSpy.count(), 1); 2158 QCOMPARE(musicDbAlbumModifiedSpy.count(), 1); 2159 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2160 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2161 2162 auto allAlbumsV2 = musicDb.allAlbumsData(); 2163 const auto &firstAlbum = allAlbumsV2[0]; 2164 2165 QCOMPARE(musicDb.allAlbumsData().isEmpty(), false); 2166 QCOMPARE(firstAlbum.isValid(), true); 2167 2168 auto firstAlbumDataV2 = musicDb.albumData(firstAlbum.databaseId()); 2169 auto firstAlbumTitleV2 = firstAlbum.title(); 2170 auto firstAlbumArtistV2 = firstAlbum.artist(); 2171 auto firstAlbumImageV2 = firstAlbum.albumArtURI(); 2172 auto firstAlbumTracksCountV2 = firstAlbumDataV2.count(); 2173 auto firstAlbumIsSingleDiscAlbumV2 = firstAlbum.isSingleDiscAlbum(); 2174 2175 QCOMPARE(firstAlbumTitleV2, QStringLiteral("album1")); 2176 QCOMPARE(firstAlbumArtistV2, QStringLiteral("Various Artists")); 2177 QCOMPARE(firstAlbumImageV2.isValid(), true); 2178 QCOMPARE(firstAlbumImageV2, QUrl::fromLocalFile(QStringLiteral("album1"))); 2179 QCOMPARE(firstAlbumTracksCountV2, 3); 2180 QCOMPARE(firstAlbumIsSingleDiscAlbumV2, false); 2181 2182 auto removedTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), 2183 QStringLiteral("album1"), 1, 1); 2184 QCOMPARE(removedTrackId, qulonglong(0)); 2185 } 2186 2187 void removeOneTrackAndModifyIt() 2188 { 2189 QTemporaryFile databaseFile; 2190 databaseFile.open(); 2191 2192 qDebug() << "removeOneTrackAndModifyIt" << databaseFile.fileName(); 2193 2194 DatabaseInterface musicDb; 2195 2196 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 2197 2198 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 2199 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 2200 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 2201 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 2202 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 2203 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 2204 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 2205 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 2206 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 2207 2208 QCOMPARE(musicDb.allAlbumsData().count(), 0); 2209 QCOMPARE(musicDb.allArtistsData().count(), 0); 2210 QCOMPARE(musicDb.allTracksData().count(), 0); 2211 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 2212 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 2213 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 2214 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2215 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2216 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2217 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 2218 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2219 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2220 2221 musicDb.insertTracksList(mNewTracks, mNewCovers); 2222 2223 musicDbTrackAddedSpy.wait(300); 2224 2225 QCOMPARE(musicDb.allAlbumsData().count(), 5); 2226 QCOMPARE(musicDb.allArtistsData().count(), 7); 2227 QCOMPARE(musicDb.allTracksData().count(), 22); 2228 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 2229 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 2230 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 2231 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2232 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2233 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2234 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 2235 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2236 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2237 2238 auto allAlbums = musicDb.allAlbumsData(); 2239 2240 auto firstAlbumData = musicDb.albumData(allAlbums[0].databaseId()); 2241 auto firstAlbumTitle = allAlbums[0].title(); 2242 auto firstAlbumArtist = allAlbums[0].artist(); 2243 auto firstAlbumImage = allAlbums[0].albumArtURI(); 2244 auto firstAlbumTracksCount = firstAlbumData.count(); 2245 auto firstAlbumIsSingleDiscAlbum = allAlbums[0].isSingleDiscAlbum(); 2246 2247 QCOMPARE(firstAlbumTitle, QStringLiteral("album1")); 2248 QCOMPARE(firstAlbumArtist, QStringLiteral("Various Artists")); 2249 QCOMPARE(firstAlbumImage.isValid(), true); 2250 QCOMPARE(firstAlbumImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 2251 QCOMPARE(firstAlbumTracksCount, 4); 2252 QCOMPARE(firstAlbumIsSingleDiscAlbum, false); 2253 2254 auto trackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), 2255 QStringLiteral("album1"), 1, 1); 2256 2257 QCOMPARE(trackId != 0, true); 2258 2259 auto firstTrack = musicDb.trackDataFromDatabaseId(trackId); 2260 2261 QCOMPARE(firstTrack.isValid(), true); 2262 2263 musicDb.removeTracksList({firstTrack.resourceURI()}); 2264 2265 QCOMPARE(musicDb.allAlbumsData().count(), 5); 2266 QCOMPARE(musicDb.allArtistsData().count(), 7); 2267 QCOMPARE(musicDb.allTracksData().count(), 21); 2268 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 2269 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 2270 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 2271 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2272 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2273 QCOMPARE(musicDbTrackRemovedSpy.count(), 1); 2274 QCOMPARE(musicDbAlbumModifiedSpy.count(), 1); 2275 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2276 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2277 2278 auto allAlbumsV2 = musicDb.allAlbumsData(); 2279 const auto &firstAlbum = allAlbumsV2[0]; 2280 2281 QCOMPARE(musicDb.allAlbumsData().isEmpty(), false); 2282 QCOMPARE(firstAlbum.isValid(), true); 2283 2284 auto firstAlbumDataV2 = musicDb.albumData(firstAlbum.databaseId()); 2285 auto firstAlbumTitleV2 = firstAlbum.title(); 2286 auto firstAlbumArtistV2 = firstAlbum.artist(); 2287 auto firstAlbumImageV2 = firstAlbum.albumArtURI(); 2288 auto firstAlbumTracksCountV2 = firstAlbumDataV2.count(); 2289 auto firstAlbumIsSingleDiscAlbumV2 = firstAlbum.isSingleDiscAlbum(); 2290 2291 QCOMPARE(firstAlbumTitleV2, QStringLiteral("album1")); 2292 QCOMPARE(firstAlbumArtistV2, QStringLiteral("Various Artists")); 2293 QCOMPARE(firstAlbumImageV2.isValid(), true); 2294 QCOMPARE(firstAlbumImageV2, QUrl::fromLocalFile(QStringLiteral("album1"))); 2295 QCOMPARE(firstAlbumTracksCountV2, 3); 2296 QCOMPARE(firstAlbumIsSingleDiscAlbumV2, false); 2297 2298 auto removedTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), 2299 QStringLiteral("album1"), 1, 1); 2300 QCOMPARE(removedTrackId, qulonglong(0)); 2301 2302 firstTrack[DataTypes::DatabaseIdRole] = 0; 2303 2304 musicDb.insertTracksList({firstTrack}, mNewCovers); 2305 2306 musicDbTrackAddedSpy.wait(300); 2307 2308 QCOMPARE(musicDb.allAlbumsData().count(), 5); 2309 QCOMPARE(musicDb.allArtistsData().count(), 7); 2310 QCOMPARE(musicDb.allTracksData().count(), 22); 2311 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 2312 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 2313 QCOMPARE(musicDbTrackAddedSpy.count(), 2); 2314 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2315 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2316 QCOMPARE(musicDbTrackRemovedSpy.count(), 1); 2317 QCOMPARE(musicDbAlbumModifiedSpy.count(), 2); 2318 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2319 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2320 2321 auto allAlbums3 = musicDb.allAlbumsData(); 2322 2323 auto firstAlbumData3 = musicDb.albumData(allAlbums3[0].databaseId()); 2324 auto firstAlbumTitle3 = allAlbums3[0].title(); 2325 auto firstAlbumArtist3 = allAlbums3[0].artist(); 2326 auto firstAlbumImage3 = allAlbums3[0].albumArtURI(); 2327 auto firstAlbumTracksCount3 = firstAlbumData3.count(); 2328 auto firstAlbumIsSingleDiscAlbum3 = allAlbums3[0].isSingleDiscAlbum(); 2329 2330 QCOMPARE(firstAlbumTitle3, QStringLiteral("album1")); 2331 QCOMPARE(firstAlbumArtist3, QStringLiteral("Various Artists")); 2332 QCOMPARE(firstAlbumImage3.isValid(), true); 2333 QCOMPARE(firstAlbumImage3, QUrl::fromLocalFile(QStringLiteral("album1"))); 2334 QCOMPARE(firstAlbumTracksCount3, 4); 2335 QCOMPARE(firstAlbumIsSingleDiscAlbum3, false); 2336 2337 auto trackId3 = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), 2338 QStringLiteral("album1"), 1, 1); 2339 2340 QCOMPARE(trackId3 != 0, true); 2341 } 2342 2343 void removeOneAlbum() 2344 { 2345 QTemporaryFile databaseFile; 2346 databaseFile.open(); 2347 2348 qDebug() << "removeOneAlbum" << databaseFile.fileName(); 2349 2350 DatabaseInterface musicDb; 2351 2352 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 2353 2354 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 2355 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 2356 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 2357 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 2358 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 2359 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 2360 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 2361 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 2362 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 2363 2364 QCOMPARE(musicDb.allAlbumsData().count(), 0); 2365 QCOMPARE(musicDb.allArtistsData().count(), 0); 2366 QCOMPARE(musicDb.allTracksData().count(), 0); 2367 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 2368 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 2369 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 2370 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2371 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2372 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2373 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 2374 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2375 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2376 2377 musicDb.insertTracksList(mNewTracks, mNewCovers); 2378 2379 musicDbTrackAddedSpy.wait(300); 2380 2381 QCOMPARE(musicDb.allAlbumsData().count(), 5); 2382 QCOMPARE(musicDb.allArtistsData().count(), 7); 2383 QCOMPARE(musicDb.allTracksData().count(), 22); 2384 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 2385 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 2386 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 2387 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2388 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2389 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2390 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 2391 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2392 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2393 2394 auto allAlbums = musicDb.allAlbumsData(); 2395 2396 auto firstAlbumData = musicDb.albumData(allAlbums[0].databaseId()); 2397 auto firstAlbumTitle = allAlbums[0].title(); 2398 auto firstAlbumArtist = allAlbums[0].artist(); 2399 auto firstAlbumImage = allAlbums[0].albumArtURI(); 2400 auto firstAlbumTracksCount = firstAlbumData.count(); 2401 auto firstAlbumIsSingleDiscAlbum = allAlbums[0].isSingleDiscAlbum(); 2402 2403 QCOMPARE(firstAlbumTitle, QStringLiteral("album1")); 2404 QCOMPARE(firstAlbumArtist, QStringLiteral("Various Artists")); 2405 QCOMPARE(firstAlbumImage.isValid(), true); 2406 QCOMPARE(firstAlbumImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 2407 QCOMPARE(firstAlbumTracksCount, 4); 2408 QCOMPARE(firstAlbumIsSingleDiscAlbum, false); 2409 2410 auto firstTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), 2411 QStringLiteral("album2"), 1, 1); 2412 auto firstTrack = musicDb.trackDataFromDatabaseId(firstTrackId); 2413 auto secondTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), 2414 QStringLiteral("album2"), 2, 1); 2415 auto secondTrack = musicDb.trackDataFromDatabaseId(secondTrackId); 2416 auto thirdTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), 2417 QStringLiteral("album2"), 3, 1); 2418 auto thirdTrack = musicDb.trackDataFromDatabaseId(thirdTrackId); 2419 auto fourthTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), 2420 QStringLiteral("album2"), 4, 1); 2421 auto fourthTrack = musicDb.trackDataFromDatabaseId(fourthTrackId); 2422 auto fithTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track5"), QStringLiteral("artist1"), 2423 QStringLiteral("album2"), 5, 1); 2424 auto fithTrack = musicDb.trackDataFromDatabaseId(fithTrackId); 2425 auto sixthTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist1 and artist2"), 2426 QStringLiteral("album2"), 6, 1); 2427 auto sixthTrack = musicDb.trackDataFromDatabaseId(sixthTrackId); 2428 2429 musicDb.removeTracksList({firstTrack.resourceURI(), secondTrack.resourceURI(), thirdTrack.resourceURI(), 2430 fourthTrack.resourceURI(), fithTrack.resourceURI(), sixthTrack.resourceURI()}); 2431 2432 QCOMPARE(musicDb.allAlbumsData().count(), 4); 2433 QCOMPARE(musicDb.allArtistsData().count(), 6); 2434 QCOMPARE(musicDb.allTracksData().count(), 16); 2435 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 2436 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 2437 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 2438 QCOMPARE(musicDbArtistRemovedSpy.count(), 1); 2439 QCOMPARE(musicDbAlbumRemovedSpy.count(), 1); 2440 QCOMPARE(musicDbTrackRemovedSpy.count(), 6); 2441 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 2442 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2443 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2444 2445 auto removedAlbum = musicDb.albumDataFromDatabaseId(musicDb.albumIdFromTitleAndArtist(QStringLiteral("album2"), QStringLiteral("artist1"), QStringLiteral("/"))); 2446 2447 QCOMPARE(removedAlbum.isValid(), false); 2448 } 2449 2450 void removeOneArtist() 2451 { 2452 DatabaseInterface musicDb; 2453 2454 musicDb.init(QStringLiteral("testDb")); 2455 2456 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 2457 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 2458 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 2459 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 2460 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 2461 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 2462 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 2463 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 2464 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 2465 2466 QCOMPARE(musicDb.allAlbumsData().count(), 0); 2467 QCOMPARE(musicDb.allArtistsData().count(), 0); 2468 QCOMPARE(musicDb.allTracksData().count(), 0); 2469 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 2470 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 2471 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 2472 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2473 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2474 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2475 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 2476 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2477 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2478 2479 musicDb.insertTracksList(mNewTracks, mNewCovers); 2480 2481 musicDbTrackAddedSpy.wait(300); 2482 2483 QCOMPARE(musicDb.allAlbumsData().count(), 5); 2484 QCOMPARE(musicDb.allArtistsData().count(), 7); 2485 QCOMPARE(musicDb.allTracksData().count(), 22); 2486 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 2487 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 2488 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 2489 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2490 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2491 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2492 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 2493 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2494 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2495 2496 auto allAlbums = musicDb.allAlbumsData(); 2497 2498 auto firstAlbumData = musicDb.albumData(allAlbums[0].databaseId()); 2499 auto firstAlbumTitle = allAlbums[0].title(); 2500 auto firstAlbumArtist = allAlbums[0].artist(); 2501 auto firstAlbumImage = allAlbums[0].albumArtURI(); 2502 auto firstAlbumTracksCount = firstAlbumData.count(); 2503 auto firstAlbumIsSingleDiscAlbum = allAlbums[0].isSingleDiscAlbum(); 2504 2505 QCOMPARE(firstAlbumTitle, QStringLiteral("album1")); 2506 QCOMPARE(firstAlbumArtist, QStringLiteral("Various Artists")); 2507 QCOMPARE(firstAlbumImage.isValid(), true); 2508 QCOMPARE(firstAlbumImage, QUrl::fromLocalFile(QStringLiteral("album1"))); 2509 QCOMPARE(firstAlbumTracksCount, 4); 2510 QCOMPARE(firstAlbumIsSingleDiscAlbum, false); 2511 2512 auto trackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), 2513 QStringLiteral("album1"), 3, 3); 2514 auto track = musicDb.trackDataFromDatabaseId(trackId); 2515 2516 musicDb.removeTracksList({track.resourceURI()}); 2517 2518 QCOMPARE(musicDb.allAlbumsData().count(), 5); 2519 QCOMPARE(musicDb.allArtistsData().count(), 6); 2520 QCOMPARE(musicDb.allTracksData().count(), 21); 2521 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 2522 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 2523 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 2524 QCOMPARE(musicDbArtistRemovedSpy.count(), 1); 2525 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2526 QCOMPARE(musicDbTrackRemovedSpy.count(), 1); 2527 QCOMPARE(musicDbAlbumModifiedSpy.count(), 1); 2528 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2529 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2530 } 2531 2532 void addOneTrack() 2533 { 2534 DatabaseInterface musicDb; 2535 2536 musicDb.init(QStringLiteral("testDb")); 2537 2538 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 2539 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 2540 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 2541 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 2542 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 2543 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 2544 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 2545 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 2546 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 2547 2548 QCOMPARE(musicDb.allAlbumsData().count(), 0); 2549 QCOMPARE(musicDb.allArtistsData().count(), 0); 2550 QCOMPARE(musicDb.allTracksData().count(), 0); 2551 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 2552 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 2553 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 2554 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2555 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2556 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2557 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 2558 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2559 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2560 2561 musicDb.insertTracksList(mNewTracks, mNewCovers); 2562 2563 musicDbTrackAddedSpy.wait(300); 2564 2565 QCOMPARE(musicDb.allAlbumsData().count(), 5); 2566 QCOMPARE(musicDb.allArtistsData().count(), 7); 2567 QCOMPARE(musicDb.allTracksData().count(), 22); 2568 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 2569 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 2570 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 2571 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2572 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2573 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2574 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 2575 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2576 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2577 2578 auto newTrack = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 2579 QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 2580 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 2581 QDateTime::fromMSecsSinceEpoch(23), 2582 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, 2583 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 2584 auto newTracks = DataTypes::ListTrackDataType(); 2585 newTracks.push_back(newTrack); 2586 2587 auto newCovers = mNewCovers; 2588 newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 2589 2590 musicDb.insertTracksList(newTracks, newCovers); 2591 2592 musicDbTrackAddedSpy.wait(300); 2593 2594 QCOMPARE(musicDb.allAlbumsData().count(), 5); 2595 QCOMPARE(musicDb.allArtistsData().count(), 7); 2596 QCOMPARE(musicDb.allTracksData().count(), 23); 2597 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 2598 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 2599 QCOMPARE(musicDbTrackAddedSpy.count(), 2); 2600 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2601 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2602 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2603 QCOMPARE(musicDbAlbumModifiedSpy.count(), 1); 2604 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2605 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2606 } 2607 2608 void addTwoTracksSameAlbumSameTitle() 2609 { 2610 QTemporaryFile databaseFile; 2611 databaseFile.open(); 2612 2613 qDebug() << "addTwoTracksSameAlbumSameTitle" << databaseFile.fileName(); 2614 2615 DatabaseInterface musicDb; 2616 2617 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 2618 2619 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 2620 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 2621 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 2622 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 2623 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 2624 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 2625 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 2626 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 2627 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 2628 2629 QCOMPARE(musicDb.allAlbumsData().count(), 0); 2630 QCOMPARE(musicDb.allArtistsData().count(), 0); 2631 QCOMPARE(musicDb.allTracksData().count(), 0); 2632 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 2633 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 2634 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 2635 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2636 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2637 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2638 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 2639 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2640 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2641 2642 auto newTrack = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 2643 QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 2644 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 2645 QDateTime::fromMSecsSinceEpoch(23), 2646 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, 2647 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 2648 auto newTracks = DataTypes::ListTrackDataType(); 2649 newTracks.push_back(newTrack); 2650 2651 auto newCovers = mNewCovers; 2652 newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 2653 2654 musicDb.insertTracksList(newTracks, newCovers); 2655 2656 musicDbTrackAddedSpy.wait(300); 2657 2658 QCOMPARE(musicDb.allAlbumsData().count(), 1); 2659 QCOMPARE(musicDb.allArtistsData().count(), 1); 2660 QCOMPARE(musicDb.allTracksData().count(), 1); 2661 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 2662 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 2663 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 2664 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2665 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2666 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2667 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 2668 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2669 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2670 2671 auto firstTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist2"), 2672 QStringLiteral("album3"), 6, 1); 2673 auto firstTrack = musicDb.trackDataFromDatabaseId(firstTrackId); 2674 2675 auto firstTrackTitle = firstTrack.title(); 2676 auto firstTrackArtist = firstTrack.artist(); 2677 auto firstTrackAlbumArtist = firstTrack.albumArtist(); 2678 auto firstTrackAlbum = firstTrack.album(); 2679 auto firstTrackImage = firstTrack.albumCover(); 2680 auto firstTrackDuration = firstTrack.duration(); 2681 auto firstTrackMilliSecondsDuration = firstTrack.duration().msecsSinceStartOfDay(); 2682 auto firstTrackTrackNumber = firstTrack.trackNumber(); 2683 auto firstTrackDiscNumber = firstTrack.discNumber(); 2684 const auto &firstTrackResource = firstTrack.resourceURI(); 2685 auto firstTrackRating = firstTrack.rating(); 2686 auto firstIsSingleDiscAlbum = firstTrack.isSingleDiscAlbum(); 2687 2688 QCOMPARE(firstTrack.isValid(), true); 2689 QCOMPARE(firstTrackTitle, QStringLiteral("track6")); 2690 QCOMPARE(firstTrackArtist, QStringLiteral("artist2")); 2691 QCOMPARE(firstTrackAlbumArtist, QStringLiteral("artist2")); 2692 QCOMPARE(firstTrackAlbum, QStringLiteral("album3")); 2693 QCOMPARE(firstTrackImage.isValid(), true); 2694 QCOMPARE(firstTrackImage, QUrl::fromLocalFile(QStringLiteral("album3"))); 2695 QCOMPARE(firstTrackDuration, QTime::fromMSecsSinceStartOfDay(23)); 2696 QCOMPARE(firstTrackMilliSecondsDuration, 23); 2697 QCOMPARE(firstTrackTrackNumber, 6); 2698 QCOMPARE(firstTrackDiscNumber, 1); 2699 QCOMPARE(firstTrackResource.isValid(), true); 2700 QCOMPARE(firstTrackResource, QUrl::fromLocalFile(QStringLiteral("/$23"))); 2701 QCOMPARE(firstTrackRating, 5); 2702 QCOMPARE(firstIsSingleDiscAlbum, true); 2703 2704 auto allAlbums = musicDb.allAlbumsData(); 2705 2706 auto firstAlbumData = musicDb.albumData(allAlbums[0].databaseId()); 2707 auto firstAlbumTitle = allAlbums[0].title(); 2708 auto firstAlbumArtist = allAlbums[0].artist(); 2709 auto firstAlbumImage = allAlbums[0].albumArtURI(); 2710 auto firstAlbumTracksCount = firstAlbumData.count(); 2711 auto firstAlbumIsSingleDiscAlbum = allAlbums[0].isSingleDiscAlbum(); 2712 2713 QCOMPARE(firstAlbumTitle, QStringLiteral("album3")); 2714 QCOMPARE(firstAlbumArtist, QStringLiteral("artist2")); 2715 QCOMPARE(firstAlbumImage.isValid(), true); 2716 QCOMPARE(firstAlbumImage, QUrl::fromLocalFile(QStringLiteral("album3"))); 2717 QCOMPARE(firstAlbumTracksCount, 1); 2718 QCOMPARE(firstAlbumIsSingleDiscAlbum, true); 2719 2720 auto newTrack2 = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 2721 QStringLiteral("artist9"), QStringLiteral("album3"), QStringLiteral("artist2"), 6, 1, 2722 QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 2723 QDateTime::fromMSecsSinceEpoch(23), 2724 QUrl::fromLocalFile(QStringLiteral("image$19")), 5, true, 2725 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 2726 auto newTracks2 = DataTypes::ListTrackDataType(); 2727 newTracks2.push_back(newTrack2); 2728 2729 auto newCovers2 = mNewCovers; 2730 newCovers2[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("image$19")); 2731 2732 musicDb.insertTracksList(newTracks2, newCovers2); 2733 2734 musicDbTrackAddedSpy.wait(50); 2735 2736 QCOMPARE(musicDb.allAlbumsData().count(), 1); 2737 QCOMPARE(musicDb.allArtistsData().count(), 2); 2738 QCOMPARE(musicDb.allTracksData().count(), 1); 2739 QCOMPARE(musicDbArtistAddedSpy.count(), 2); 2740 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 2741 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 2742 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2743 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2744 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2745 QCOMPARE(musicDbAlbumModifiedSpy.count(), 1); 2746 QCOMPARE(musicDbTrackModifiedSpy.count(), 1); 2747 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2748 2749 auto secondTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist9"), 2750 QStringLiteral("album3"), 6, 1); 2751 auto secondTrack = musicDb.trackDataFromDatabaseId(secondTrackId); 2752 2753 auto secondTrackTitle = secondTrack.title(); 2754 auto secondTrackArtist = secondTrack.artist(); 2755 auto secondTrackAlbumArtist = secondTrack.albumArtist(); 2756 auto secondTrackAlbum = secondTrack.album(); 2757 auto secondTrackImage = secondTrack.albumCover(); 2758 auto secondTrackDuration = secondTrack.duration(); 2759 auto secondTrackMilliSecondsDuration = secondTrack.duration().msecsSinceStartOfDay(); 2760 auto secondTrackTrackNumber = secondTrack.trackNumber(); 2761 auto secondTrackDiscNumber = secondTrack.discNumber(); 2762 const auto &secondTrackResource = secondTrack.resourceURI(); 2763 auto secondTrackRating = secondTrack.rating(); 2764 auto secondIsSingleDiscAlbum = secondTrack.isSingleDiscAlbum(); 2765 2766 QCOMPARE(secondTrack.isValid(), true); 2767 QCOMPARE(secondTrackTitle, QStringLiteral("track6")); 2768 QCOMPARE(secondTrackArtist, QStringLiteral("artist9")); 2769 QCOMPARE(secondTrackAlbumArtist, QStringLiteral("artist2")); 2770 QCOMPARE(secondTrackAlbum, QStringLiteral("album3")); 2771 QCOMPARE(secondTrackImage.isValid(), true); 2772 QCOMPARE(secondTrackImage, QUrl::fromLocalFile(QStringLiteral("image$19"))); 2773 QCOMPARE(secondTrackDuration, QTime::fromMSecsSinceStartOfDay(23)); 2774 QCOMPARE(secondTrackMilliSecondsDuration, 23); 2775 QCOMPARE(secondTrackTrackNumber, 6); 2776 QCOMPARE(secondTrackDiscNumber, 1); 2777 QCOMPARE(secondTrackResource.isValid(), true); 2778 QCOMPARE(secondTrackResource, QUrl::fromLocalFile(QStringLiteral("/$23"))); 2779 QCOMPARE(secondTrackRating, 5); 2780 QCOMPARE(secondIsSingleDiscAlbum, true); 2781 2782 auto allAlbums2 = musicDb.allAlbumsData(); 2783 2784 auto firstAlbumData2 = musicDb.albumData(allAlbums2[0].databaseId()); 2785 auto firstAlbumTitle2 = allAlbums2[0].title(); 2786 auto firstAlbumArtist2 = allAlbums2[0].artist(); 2787 auto firstAlbumImage2 = allAlbums2[0].albumArtURI(); 2788 auto firstAlbumTracksCount2 = firstAlbumData2.count(); 2789 auto firstAlbumIsSingleDiscAlbum2 = allAlbums2[0].isSingleDiscAlbum(); 2790 2791 QCOMPARE(firstAlbumTitle2, QStringLiteral("album3")); 2792 QCOMPARE(firstAlbumArtist2, QStringLiteral("artist2")); 2793 QCOMPARE(firstAlbumImage2.isValid(), true); 2794 QCOMPARE(firstAlbumImage2, QUrl::fromLocalFile(QStringLiteral("image$19"))); 2795 QCOMPARE(firstAlbumTracksCount2, 1); 2796 QCOMPARE(firstAlbumIsSingleDiscAlbum2, true); 2797 } 2798 2799 void addTwoTracksSameFileWithAlbumSameName() 2800 { 2801 QTemporaryFile databaseFile; 2802 databaseFile.open(); 2803 2804 qDebug() << "addTwoTracksSameFileWithAlbumSameName" << databaseFile.fileName(); 2805 2806 DatabaseInterface musicDb; 2807 2808 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 2809 2810 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 2811 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 2812 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 2813 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 2814 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 2815 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 2816 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 2817 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 2818 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 2819 2820 QCOMPARE(musicDb.allAlbumsData().count(), 0); 2821 QCOMPARE(musicDb.allArtistsData().count(), 0); 2822 QCOMPARE(musicDb.allTracksData().count(), 0); 2823 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 2824 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 2825 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 2826 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2827 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2828 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2829 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 2830 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2831 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2832 2833 auto newTrack = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 2834 QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 2835 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 2836 QDateTime::fromMSecsSinceEpoch(23), 2837 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, 2838 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 2839 auto newTracks = DataTypes::ListTrackDataType(); 2840 newTracks.push_back(newTrack); 2841 2842 auto newCovers = mNewCovers; 2843 newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 2844 2845 musicDb.insertTracksList(newTracks, newCovers); 2846 2847 musicDbTrackAddedSpy.wait(300); 2848 2849 QCOMPARE(musicDb.allAlbumsData().count(), 1); 2850 QCOMPARE(musicDb.allArtistsData().count(), 1); 2851 QCOMPARE(musicDb.allTracksData().count(), 1); 2852 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 2853 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 2854 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 2855 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2856 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 2857 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2858 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 2859 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 2860 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2861 2862 auto firstTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist2"), 2863 QStringLiteral("album3"), 6, 1); 2864 auto firstTrack = musicDb.trackDataFromDatabaseId(firstTrackId); 2865 2866 auto firstTrackTitle = firstTrack.title(); 2867 auto firstTrackArtist = firstTrack.artist(); 2868 auto firstTrackAlbumArtist = firstTrack.albumArtist(); 2869 auto firstTrackAlbum = firstTrack.album(); 2870 auto firstTrackImage = firstTrack.albumCover(); 2871 auto firstTrackDuration = firstTrack.duration(); 2872 auto firstTrackMilliSecondsDuration = firstTrack.duration().msecsSinceStartOfDay(); 2873 auto firstTrackTrackNumber = firstTrack.trackNumber(); 2874 auto firstTrackDiscNumber = firstTrack.discNumber(); 2875 const auto &firstTrackResource = firstTrack.resourceURI(); 2876 auto firstTrackRating = firstTrack.rating(); 2877 auto firstIsSingleDiscAlbum = firstTrack.isSingleDiscAlbum(); 2878 2879 QCOMPARE(firstTrack.isValid(), true); 2880 QCOMPARE(firstTrackTitle, QStringLiteral("track6")); 2881 QCOMPARE(firstTrackArtist, QStringLiteral("artist2")); 2882 QCOMPARE(firstTrackAlbumArtist, QStringLiteral("artist2")); 2883 QCOMPARE(firstTrackAlbum, QStringLiteral("album3")); 2884 QCOMPARE(firstTrackImage.isValid(), true); 2885 QCOMPARE(firstTrackImage, QUrl::fromLocalFile(QStringLiteral("album3"))); 2886 QCOMPARE(firstTrackDuration, QTime::fromMSecsSinceStartOfDay(23)); 2887 QCOMPARE(firstTrackMilliSecondsDuration, 23); 2888 QCOMPARE(firstTrackTrackNumber, 6); 2889 QCOMPARE(firstTrackDiscNumber, 1); 2890 QCOMPARE(firstTrackResource.isValid(), true); 2891 QCOMPARE(firstTrackResource, QUrl::fromLocalFile(QStringLiteral("/$23"))); 2892 QCOMPARE(firstTrackRating, 5); 2893 QCOMPARE(firstIsSingleDiscAlbum, true); 2894 2895 auto allAlbums = musicDb.allAlbumsData(); 2896 2897 QCOMPARE(allAlbums.size(), 1); 2898 2899 auto firstAlbumTitle = allAlbums[0].title(); 2900 auto firstAlbumArtist = allAlbums[0].artist(); 2901 auto firstAlbumImage = allAlbums[0].albumArtURI(); 2902 auto firstAlbumTracksCount = musicDb.albumData(allAlbums[0].databaseId()).count(); 2903 auto firstAlbumIsSingleDiscAlbum = allAlbums[0].isSingleDiscAlbum(); 2904 2905 QCOMPARE(firstAlbumTitle, QStringLiteral("album3")); 2906 QCOMPARE(firstAlbumArtist, QStringLiteral("artist2")); 2907 QCOMPARE(firstAlbumImage.isValid(), true); 2908 QCOMPARE(firstAlbumImage, QUrl::fromLocalFile(QStringLiteral("album3"))); 2909 QCOMPARE(firstAlbumTracksCount, 1); 2910 QCOMPARE(firstAlbumIsSingleDiscAlbum, true); 2911 2912 auto newTrack2 = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 2913 QStringLiteral("artist9"), QStringLiteral("album3"), QStringLiteral("artist9"), 6, 1, 2914 QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 2915 QDateTime::fromMSecsSinceEpoch(23), 2916 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, 2917 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 2918 auto newTracks2 = DataTypes::ListTrackDataType(); 2919 newTracks2.push_back(newTrack2); 2920 2921 auto newCovers2 = mNewCovers; 2922 newCovers2[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 2923 2924 musicDb.insertTracksList(newTracks2, newCovers2); 2925 2926 musicDbTrackAddedSpy.wait(300); 2927 2928 QCOMPARE(musicDb.allAlbumsData().count(), 1); 2929 QCOMPARE(musicDb.allArtistsData().count(), 2); 2930 QCOMPARE(musicDb.allTracksData().count(), 1); 2931 QCOMPARE(musicDbArtistAddedSpy.count(), 2); 2932 QCOMPARE(musicDbAlbumAddedSpy.count(), 2); 2933 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 2934 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 2935 QCOMPARE(musicDbAlbumRemovedSpy.count(), 1); 2936 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 2937 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 2938 QCOMPARE(musicDbTrackModifiedSpy.count(), 1); 2939 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 2940 2941 auto secondTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist9"), 2942 QStringLiteral("album3"), 6, 1); 2943 auto secondTrack = musicDb.trackDataFromDatabaseId(secondTrackId); 2944 2945 auto secondTrackTitle = secondTrack.title(); 2946 auto secondTrackArtist = secondTrack.artist(); 2947 auto secondTrackAlbumArtist = secondTrack.albumArtist(); 2948 auto secondTrackAlbum = secondTrack.album(); 2949 auto secondTrackImage = secondTrack.albumCover(); 2950 auto secondTrackDuration = secondTrack.duration(); 2951 auto secondTrackMilliSecondsDuration = secondTrack.duration().msecsSinceStartOfDay(); 2952 auto secondTrackTrackNumber = secondTrack.trackNumber(); 2953 auto secondTrackDiscNumber = secondTrack.discNumber(); 2954 const auto &secondTrackResource = secondTrack.resourceURI(); 2955 auto secondTrackRating = secondTrack.rating(); 2956 auto secondIsSingleDiscAlbum = secondTrack.isSingleDiscAlbum(); 2957 2958 QCOMPARE(secondTrack.isValid(), true); 2959 QCOMPARE(secondTrackTitle, QStringLiteral("track6")); 2960 QCOMPARE(secondTrackArtist, QStringLiteral("artist9")); 2961 QCOMPARE(secondTrackAlbumArtist, QStringLiteral("artist9")); 2962 QCOMPARE(secondTrackAlbum, QStringLiteral("album3")); 2963 QCOMPARE(secondTrackImage.isValid(), true); 2964 QCOMPARE(secondTrackImage, QUrl::fromLocalFile(QStringLiteral("album3"))); 2965 QCOMPARE(secondTrackDuration, QTime::fromMSecsSinceStartOfDay(23)); 2966 QCOMPARE(secondTrackMilliSecondsDuration, 23); 2967 QCOMPARE(secondTrackTrackNumber, 6); 2968 QCOMPARE(secondTrackDiscNumber, 1); 2969 QCOMPARE(secondTrackResource.isValid(), true); 2970 QCOMPARE(secondTrackResource, QUrl::fromLocalFile(QStringLiteral("/$23"))); 2971 QCOMPARE(secondTrackRating, 5); 2972 QCOMPARE(secondIsSingleDiscAlbum, true); 2973 2974 auto allAlbums2 = musicDb.allAlbumsData(); 2975 2976 auto secondAlbumTitle = allAlbums2[0].title(); 2977 auto secondAlbumArtist = allAlbums2[0].artist(); 2978 auto secondAlbumImage = allAlbums2[0].albumArtURI(); 2979 auto secondAlbumTracksCount = musicDb.albumData(allAlbums2[0].databaseId()).count(); 2980 auto secondAlbumIsSingleDiscAlbum = allAlbums2[0].isSingleDiscAlbum(); 2981 2982 QCOMPARE(secondAlbumTitle, QStringLiteral("album3")); 2983 QCOMPARE(secondAlbumArtist, QStringLiteral("artist9")); 2984 QCOMPARE(secondAlbumImage.isValid(), true); 2985 QCOMPARE(secondAlbumImage, QUrl::fromLocalFile(QStringLiteral("album3"))); 2986 QCOMPARE(secondAlbumTracksCount, 1); 2987 QCOMPARE(secondAlbumIsSingleDiscAlbum, true); 2988 } 2989 2990 void addTwoTracksWithAlbumSameName() 2991 { 2992 QTemporaryFile databaseFile; 2993 databaseFile.open(); 2994 2995 qDebug() << "addTwoTracksWithAlbumSameName" << databaseFile.fileName(); 2996 2997 DatabaseInterface musicDb; 2998 2999 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 3000 3001 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 3002 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 3003 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 3004 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 3005 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 3006 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 3007 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 3008 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 3009 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 3010 3011 QCOMPARE(musicDb.allAlbumsData().count(), 0); 3012 QCOMPARE(musicDb.allArtistsData().count(), 0); 3013 QCOMPARE(musicDb.allTracksData().count(), 0); 3014 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 3015 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 3016 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 3017 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3018 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3019 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3020 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3021 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3022 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3023 3024 auto newTrack = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 3025 QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 3026 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 3027 QDateTime::fromMSecsSinceEpoch(23), 3028 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, 3029 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 3030 auto newTracks = DataTypes::ListTrackDataType(); 3031 newTracks.push_back(newTrack); 3032 3033 auto newCovers = mNewCovers; 3034 newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 3035 3036 musicDb.insertTracksList(newTracks, newCovers); 3037 3038 musicDbTrackAddedSpy.wait(300); 3039 3040 QCOMPARE(musicDb.allAlbumsData().count(), 1); 3041 QCOMPARE(musicDb.allArtistsData().count(), 1); 3042 QCOMPARE(musicDb.allTracksData().count(), 1); 3043 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 3044 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 3045 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 3046 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3047 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3048 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3049 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3050 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3051 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3052 3053 auto firstTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist2"), 3054 QStringLiteral("album3"), 6, 1); 3055 auto firstTrack = musicDb.trackDataFromDatabaseId(firstTrackId); 3056 3057 auto firstTrackTitle = firstTrack.title(); 3058 auto firstTrackArtist = firstTrack.artist(); 3059 auto firstTrackAlbumArtist = firstTrack.albumArtist(); 3060 auto firstTrackAlbum = firstTrack.album(); 3061 auto firstTrackImage = firstTrack.albumCover(); 3062 auto firstTrackDuration = firstTrack.duration(); 3063 auto firstTrackMilliSecondsDuration = firstTrack.duration().msecsSinceStartOfDay(); 3064 auto firstTrackTrackNumber = firstTrack.trackNumber(); 3065 auto firstTrackDiscNumber = firstTrack.discNumber(); 3066 const auto &firstTrackResource = firstTrack.resourceURI(); 3067 auto firstTrackRating = firstTrack.rating(); 3068 auto firstIsSingleDiscAlbum = firstTrack.isSingleDiscAlbum(); 3069 3070 QCOMPARE(firstTrack.isValid(), true); 3071 QCOMPARE(firstTrackTitle, QStringLiteral("track6")); 3072 QCOMPARE(firstTrackArtist, QStringLiteral("artist2")); 3073 QCOMPARE(firstTrackAlbumArtist, QStringLiteral("artist2")); 3074 QCOMPARE(firstTrackAlbum, QStringLiteral("album3")); 3075 QCOMPARE(firstTrackImage.isValid(), true); 3076 QCOMPARE(firstTrackImage, QUrl::fromLocalFile(QStringLiteral("album3"))); 3077 QCOMPARE(firstTrackDuration, QTime::fromMSecsSinceStartOfDay(23)); 3078 QCOMPARE(firstTrackMilliSecondsDuration, 23); 3079 QCOMPARE(firstTrackTrackNumber, 6); 3080 QCOMPARE(firstTrackDiscNumber, 1); 3081 QCOMPARE(firstTrackResource.isValid(), true); 3082 QCOMPARE(firstTrackResource, QUrl::fromLocalFile(QStringLiteral("/$23"))); 3083 QCOMPARE(firstTrackRating, 5); 3084 QCOMPARE(firstIsSingleDiscAlbum, true); 3085 3086 auto allAlbums = musicDb.allAlbumsData(); 3087 3088 QCOMPARE(allAlbums.size(), 1); 3089 3090 auto firstAlbumData = musicDb.albumData(allAlbums[0].databaseId()); 3091 auto firstAlbumTitle = allAlbums[0].title(); 3092 auto firstAlbumArtist = allAlbums[0].artist(); 3093 auto firstAlbumImage = allAlbums[0].albumArtURI(); 3094 auto firstAlbumTracksCount = firstAlbumData.count(); 3095 auto firstAlbumIsSingleDiscAlbum = allAlbums[0].isSingleDiscAlbum(); 3096 3097 QCOMPARE(firstAlbumTitle, QStringLiteral("album3")); 3098 QCOMPARE(firstAlbumArtist, QStringLiteral("artist2")); 3099 QCOMPARE(firstAlbumImage.isValid(), true); 3100 QCOMPARE(firstAlbumImage, QUrl::fromLocalFile(QStringLiteral("album3"))); 3101 QCOMPARE(firstAlbumTracksCount, 1); 3102 QCOMPARE(firstAlbumIsSingleDiscAlbum, true); 3103 3104 auto newTrack2 = DataTypes::TrackDataType{true, QStringLiteral("$20"), QStringLiteral("0"), QStringLiteral("track6"), 3105 QStringLiteral("artist9"), QStringLiteral("album3"), QStringLiteral("artist9"), 6, 1, QTime::fromMSecsSinceStartOfDay(20), 3106 {QUrl::fromLocalFile(QStringLiteral("/$20"))}, 3107 QDateTime::fromMSecsSinceEpoch(20), 3108 {QUrl::fromLocalFile(QStringLiteral("file://image$20"))}, 5, true, 3109 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 3110 auto newTracks2 = DataTypes::ListTrackDataType(); 3111 newTracks2.push_back(newTrack2); 3112 3113 auto newCovers2 = mNewCovers; 3114 newCovers2[QStringLiteral("file:///$20")] = QUrl::fromLocalFile(QStringLiteral("album3")); 3115 3116 musicDb.insertTracksList(newTracks2, newCovers2); 3117 3118 musicDbTrackAddedSpy.wait(50); 3119 3120 QCOMPARE(musicDb.allAlbumsData().count(), 2); 3121 QCOMPARE(musicDb.allArtistsData().count(), 2); 3122 QCOMPARE(musicDb.allTracksData().count(), 2); 3123 QCOMPARE(musicDbArtistAddedSpy.count(), 2); 3124 QCOMPARE(musicDbAlbumAddedSpy.count(), 2); 3125 QCOMPARE(musicDbTrackAddedSpy.count(), 2); 3126 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3127 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3128 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3129 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3130 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3131 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3132 3133 auto secondTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist9"), 3134 QStringLiteral("album3"), 6, 1); 3135 auto secondTrack = musicDb.trackDataFromDatabaseId(secondTrackId); 3136 3137 auto secondTrackTitle = secondTrack.title(); 3138 auto secondTrackArtist = secondTrack.artist(); 3139 auto secondTrackAlbumArtist = secondTrack.albumArtist(); 3140 auto secondTrackAlbum = secondTrack.album(); 3141 auto secondTrackImage = secondTrack.albumCover(); 3142 auto secondTrackDuration = secondTrack.duration(); 3143 auto secondTrackMilliSecondsDuration = secondTrack.duration().msecsSinceStartOfDay(); 3144 auto secondTrackTrackNumber = secondTrack.trackNumber(); 3145 auto secondTrackDiscNumber = secondTrack.discNumber(); 3146 const auto &secondTrackResource = secondTrack.resourceURI(); 3147 auto secondTrackRating = secondTrack.rating(); 3148 auto secondIsSingleDiscAlbum = secondTrack.isSingleDiscAlbum(); 3149 3150 QCOMPARE(secondTrack.isValid(), true); 3151 QCOMPARE(secondTrackTitle, QStringLiteral("track6")); 3152 QCOMPARE(secondTrackArtist, QStringLiteral("artist9")); 3153 QCOMPARE(secondTrackAlbumArtist, QStringLiteral("artist9")); 3154 QCOMPARE(secondTrackAlbum, QStringLiteral("album3")); 3155 QCOMPARE(secondTrackImage.isValid(), true); 3156 QCOMPARE(secondTrackImage, QUrl::fromLocalFile(QStringLiteral("album3"))); 3157 QCOMPARE(secondTrackDuration, QTime::fromMSecsSinceStartOfDay(20)); 3158 QCOMPARE(secondTrackMilliSecondsDuration, 20); 3159 QCOMPARE(secondTrackTrackNumber, 6); 3160 QCOMPARE(secondTrackDiscNumber, 1); 3161 QCOMPARE(secondTrackResource.isValid(), true); 3162 QCOMPARE(secondTrackResource, QUrl::fromLocalFile(QStringLiteral("/$20"))); 3163 QCOMPARE(secondTrackRating, 5); 3164 QCOMPARE(secondIsSingleDiscAlbum, true); 3165 3166 auto allAlbums2 = musicDb.allAlbumsData(); 3167 3168 auto firstAlbumData2 = musicDb.albumData(allAlbums2[0].databaseId()); 3169 auto firstAlbumTitle2 = allAlbums2[0].title(); 3170 auto firstAlbumArtist2 = allAlbums2[0].artist(); 3171 auto firstAlbumImage2 = allAlbums2[0].albumArtURI(); 3172 auto firstAlbumTracksCount2 = firstAlbumData2.count(); 3173 auto firstAlbumIsSingleDiscAlbum2 = allAlbums2[0].isSingleDiscAlbum(); 3174 3175 QCOMPARE(firstAlbumTitle2, QStringLiteral("album3")); 3176 QCOMPARE(firstAlbumArtist2, QStringLiteral("artist2")); 3177 QCOMPARE(firstAlbumImage2.isValid(), true); 3178 QCOMPARE(firstAlbumImage2, QUrl::fromLocalFile(QStringLiteral("album3"))); 3179 QCOMPARE(firstAlbumTracksCount2, 1); 3180 QCOMPARE(firstAlbumIsSingleDiscAlbum2, true); 3181 3182 auto secondAlbumData = musicDb.albumData(allAlbums2[1].databaseId()); 3183 auto secondAlbumTitle = allAlbums2[1].title(); 3184 auto secondAlbumArtist = allAlbums2[1].artist(); 3185 auto secondAlbumImage = allAlbums2[1].albumArtURI(); 3186 auto secondAlbumTracksCount = secondAlbumData.count(); 3187 auto secondAlbumIsSingleDiscAlbum = allAlbums2[1].isSingleDiscAlbum(); 3188 3189 QCOMPARE(secondAlbumTitle, QStringLiteral("album3")); 3190 QCOMPARE(secondAlbumArtist, QStringLiteral("artist9")); 3191 QCOMPARE(secondAlbumImage.isValid(), true); 3192 QCOMPARE(secondAlbumImage, QUrl::fromLocalFile(QStringLiteral("album3"))); 3193 QCOMPARE(secondAlbumTracksCount, 1); 3194 QCOMPARE(secondAlbumIsSingleDiscAlbum, true); 3195 } 3196 3197 void addTwoTracksInAlbumWithoutCover() 3198 { 3199 DatabaseInterface musicDb; 3200 3201 musicDb.init(QStringLiteral("testDb")); 3202 3203 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 3204 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 3205 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 3206 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 3207 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 3208 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 3209 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 3210 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 3211 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 3212 3213 QCOMPARE(musicDb.allAlbumsData().count(), 0); 3214 QCOMPARE(musicDb.allArtistsData().count(), 0); 3215 QCOMPARE(musicDb.allTracksData().count(), 0); 3216 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 3217 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 3218 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 3219 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3220 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3221 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3222 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3223 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3224 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3225 3226 musicDb.insertTracksList(mNewTracks, mNewCovers); 3227 3228 musicDbTrackAddedSpy.wait(300); 3229 3230 QCOMPARE(musicDb.allAlbumsData().count(), 5); 3231 QCOMPARE(musicDb.allArtistsData().count(), 7); 3232 QCOMPARE(musicDb.allTracksData().count(), 22); 3233 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 3234 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 3235 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 3236 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3237 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3238 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3239 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3240 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3241 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3242 3243 auto newTrack = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 3244 QStringLiteral("artist2"), QStringLiteral("album7"), QStringLiteral("artist2"), 3245 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 3246 QDateTime::fromMSecsSinceEpoch(23), 3247 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, 3248 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 3249 auto newTracks = DataTypes::ListTrackDataType(); 3250 newTracks.push_back(newTrack); 3251 3252 auto newCovers = mNewCovers; 3253 newCovers[QStringLiteral("file:///$23")] = QUrl(); 3254 3255 musicDb.insertTracksList(newTracks, newCovers); 3256 3257 musicDbTrackAddedSpy.wait(300); 3258 3259 QCOMPARE(musicDb.allAlbumsData().count(), 6); 3260 QCOMPARE(musicDb.allArtistsData().count(), 7); 3261 QCOMPARE(musicDb.allTracksData().count(), 23); 3262 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 3263 QCOMPARE(musicDbAlbumAddedSpy.count(), 2); 3264 QCOMPARE(musicDbTrackAddedSpy.count(), 2); 3265 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3266 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3267 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3268 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3269 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3270 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3271 3272 auto trackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist2"), 3273 QStringLiteral("album7"), 6, 1); 3274 const auto &firstTrack = musicDb.trackDataFromDatabaseId(trackId); 3275 3276 QCOMPARE(firstTrack.isValid(), true); 3277 QCOMPARE(firstTrack.albumCover(), QUrl()); 3278 3279 auto newTrack2 = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track7"), 3280 QStringLiteral("artist2"), QStringLiteral("album7"), QStringLiteral("artist2"), 7, 1, 3281 QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 3282 QDateTime::fromMSecsSinceEpoch(23), 3283 {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, 3284 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 3285 auto newTracks2 = DataTypes::ListTrackDataType(); 3286 newTracks2.push_back(newTrack2); 3287 3288 auto newCovers2 = mNewCovers; 3289 newCovers2[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album7")); 3290 3291 musicDb.insertTracksList(newTracks2, newCovers2); 3292 3293 musicDbTrackAddedSpy.wait(300); 3294 3295 QCOMPARE(musicDb.allAlbumsData().count(), 6); 3296 QCOMPARE(musicDb.allArtistsData().count(), 7); 3297 QCOMPARE(musicDb.allTracksData().count(), 23); 3298 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 3299 QCOMPARE(musicDbAlbumAddedSpy.count(), 2); 3300 QCOMPARE(musicDbTrackAddedSpy.count(), 2); 3301 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3302 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3303 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3304 QCOMPARE(musicDbAlbumModifiedSpy.count(), 1); 3305 QCOMPARE(musicDbTrackModifiedSpy.count(), 1); 3306 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3307 3308 auto secondTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track7"), QStringLiteral("artist2"), 3309 QStringLiteral("album7"), 7, 1); 3310 const auto &secondTrack = musicDb.trackDataFromDatabaseId(secondTrackId); 3311 3312 QCOMPARE(secondTrack.isValid(), true); 3313 QCOMPARE(secondTrack.albumCover(), QUrl::fromLocalFile(QStringLiteral("album7"))); 3314 } 3315 3316 void modifyOneTrack() 3317 { 3318 QTemporaryFile databaseFile; 3319 databaseFile.open(); 3320 3321 qDebug() << "modifyOneTrack" << databaseFile.fileName(); 3322 3323 DatabaseInterface musicDb; 3324 3325 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 3326 3327 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 3328 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 3329 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 3330 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 3331 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 3332 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 3333 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 3334 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 3335 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 3336 3337 QCOMPARE(musicDb.allAlbumsData().count(), 0); 3338 QCOMPARE(musicDb.allArtistsData().count(), 0); 3339 QCOMPARE(musicDb.allTracksData().count(), 0); 3340 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 3341 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 3342 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 3343 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3344 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3345 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3346 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3347 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3348 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3349 3350 musicDb.insertTracksList(mNewTracks, mNewCovers); 3351 3352 musicDbTrackAddedSpy.wait(300); 3353 3354 QCOMPARE(musicDb.allAlbumsData().count(), 5); 3355 QCOMPARE(musicDb.allArtistsData().count(), 7); 3356 QCOMPARE(musicDb.allTracksData().count(), 22); 3357 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 3358 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 3359 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 3360 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3361 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3362 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3363 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3364 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3365 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3366 3367 auto modifiedTrack = DataTypes::TrackDataType{true, QStringLiteral("$3"), QStringLiteral("0"), QStringLiteral("track3"), 3368 QStringLiteral("artist3"), QStringLiteral("album1"), QStringLiteral("Various Artists"), 5, 3, 3369 QTime::fromMSecsSinceStartOfDay(3), {QUrl::fromLocalFile(QStringLiteral("/$3"))}, 3370 QDateTime::fromMSecsSinceEpoch(23), 3371 {QUrl::fromLocalFile(QStringLiteral("file://image$3"))}, 5, true, 3372 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 3373 3374 musicDb.insertTracksList({modifiedTrack}, mNewCovers); 3375 3376 musicDbTrackAddedSpy.wait(300); 3377 3378 QCOMPARE(musicDb.allAlbumsData().count(), 5); 3379 QCOMPARE(musicDb.allArtistsData().count(), 7); 3380 QCOMPARE(musicDb.allTracksData().count(), 22); 3381 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 3382 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 3383 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 3384 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3385 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3386 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3387 QCOMPARE(musicDbAlbumModifiedSpy.count(), 1); 3388 QCOMPARE(musicDbTrackModifiedSpy.count(), 1); 3389 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3390 3391 auto trackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), 3392 QStringLiteral("album1"), 5, 3); 3393 QCOMPARE(trackId != 0, true); 3394 auto track = musicDb.trackDataFromDatabaseId(trackId); 3395 3396 QCOMPARE(track.isValid(), true); 3397 QCOMPARE(track.trackNumber(), 5); 3398 } 3399 3400 void addOneAlbum() 3401 { 3402 DatabaseInterface musicDb; 3403 3404 musicDb.init(QStringLiteral("testDb")); 3405 3406 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 3407 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 3408 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 3409 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 3410 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 3411 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 3412 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 3413 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 3414 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 3415 3416 QCOMPARE(musicDb.allAlbumsData().count(), 0); 3417 QCOMPARE(musicDb.allArtistsData().count(), 0); 3418 QCOMPARE(musicDb.allTracksData().count(), 0); 3419 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 3420 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 3421 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 3422 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3423 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3424 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3425 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3426 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3427 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3428 3429 musicDb.insertTracksList(mNewTracks, mNewCovers); 3430 3431 musicDbTrackAddedSpy.wait(300); 3432 3433 QCOMPARE(musicDb.allAlbumsData().count(), 5); 3434 QCOMPARE(musicDb.allArtistsData().count(), 7); 3435 QCOMPARE(musicDb.allTracksData().count(), 22); 3436 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 3437 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 3438 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 3439 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3440 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3441 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3442 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3443 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3444 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3445 3446 auto newTrack = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 3447 QStringLiteral("artist2"), QStringLiteral("album7"), QStringLiteral("artist2"), 3448 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 3449 QDateTime::fromMSecsSinceEpoch(23), 3450 {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, 3451 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 3452 auto newTracks = DataTypes::ListTrackDataType(); 3453 newTracks.push_back(newTrack); 3454 3455 auto newCover = QUrl::fromLocalFile(QStringLiteral("file://image$19")); 3456 auto newCovers = mNewCovers; 3457 newCovers[QStringLiteral("file:///$23")] = newCover; 3458 3459 musicDb.insertTracksList(newTracks, newCovers); 3460 3461 musicDbTrackAddedSpy.wait(300); 3462 3463 QCOMPARE(musicDb.allAlbumsData().count(), 6); 3464 QCOMPARE(musicDb.allArtistsData().count(), 7); 3465 QCOMPARE(musicDb.allTracksData().count(), 23); 3466 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 3467 QCOMPARE(musicDbAlbumAddedSpy.count(), 2); 3468 QCOMPARE(musicDbTrackAddedSpy.count(), 2); 3469 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3470 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3471 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3472 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3473 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3474 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3475 3476 const auto &newAlbum = musicDb.albumDataFromDatabaseId(musicDb.albumIdFromTitleAndArtist(QStringLiteral("album7"), QStringLiteral("artist2"), QStringLiteral("/"))); 3477 QCOMPARE(newAlbum.albumArtURI(), QUrl::fromLocalFile(QStringLiteral("file://image$19"))); 3478 } 3479 3480 void addOneArtist() 3481 { 3482 DatabaseInterface musicDb; 3483 3484 musicDb.init(QStringLiteral("testDb")); 3485 3486 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 3487 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 3488 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 3489 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 3490 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 3491 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 3492 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 3493 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 3494 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 3495 3496 QCOMPARE(musicDb.allAlbumsData().count(), 0); 3497 QCOMPARE(musicDb.allArtistsData().count(), 0); 3498 QCOMPARE(musicDb.allTracksData().count(), 0); 3499 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 3500 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 3501 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 3502 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3503 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3504 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3505 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3506 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3507 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3508 3509 musicDb.insertTracksList(mNewTracks, mNewCovers); 3510 3511 musicDbTrackAddedSpy.wait(300); 3512 3513 QCOMPARE(musicDb.allAlbumsData().count(), 5); 3514 QCOMPARE(musicDb.allArtistsData().count(), 7); 3515 QCOMPARE(musicDb.allTracksData().count(), 22); 3516 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 3517 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 3518 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 3519 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3520 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3521 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3522 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3523 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3524 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3525 3526 auto newTrack = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 3527 QStringLiteral("artist6"), QStringLiteral("album1"), QStringLiteral("Various Artists"), 3528 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 3529 QDateTime::fromMSecsSinceEpoch(23), 3530 QUrl::fromLocalFile(QStringLiteral("album1")), 5, true, 3531 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 3532 auto newTracks = DataTypes::ListTrackDataType(); 3533 newTracks.push_back(newTrack); 3534 3535 auto newFiles2 = QList<QUrl>(); 3536 for (const auto &oneTrack : newTracks) { 3537 newFiles2.push_back(oneTrack.resourceURI()); 3538 } 3539 3540 auto newCovers = mNewCovers; 3541 newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album1")); 3542 3543 musicDb.insertTracksList(newTracks, newCovers); 3544 3545 musicDbTrackAddedSpy.wait(300); 3546 3547 QCOMPARE(musicDb.allAlbumsData().count(), 5); 3548 QCOMPARE(musicDb.allArtistsData().count(), 8); 3549 QCOMPARE(musicDb.allTracksData().count(), 23); 3550 QCOMPARE(musicDbArtistAddedSpy.count(), 2); 3551 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 3552 QCOMPARE(musicDbTrackAddedSpy.count(), 2); 3553 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3554 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3555 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3556 QCOMPARE(musicDbAlbumModifiedSpy.count(), 1); 3557 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3558 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3559 } 3560 3561 void reloadDatabaseWithAllTracks() 3562 { 3563 QTemporaryFile databaseFile; 3564 databaseFile.open(); 3565 3566 qDebug() << "reloadDatabaseWithAllTracks" << databaseFile.fileName(); 3567 3568 { 3569 DatabaseInterface musicDb; 3570 3571 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 3572 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 3573 3574 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 3575 3576 musicDb.insertTracksList(mNewTracks, mNewCovers); 3577 3578 musicDbTrackAddedSpy.wait(300); 3579 3580 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3581 } 3582 3583 DatabaseInterface musicDb2; 3584 3585 QSignalSpy musicDbArtistAddedSpy2(&musicDb2, &DatabaseInterface::artistsAdded); 3586 QSignalSpy musicDbAlbumAddedSpy2(&musicDb2, &DatabaseInterface::albumsAdded); 3587 QSignalSpy musicDbTrackAddedSpy2(&musicDb2, &DatabaseInterface::tracksAdded); 3588 QSignalSpy musicDbArtistRemovedSpy2(&musicDb2, &DatabaseInterface::artistRemoved); 3589 QSignalSpy musicDbAlbumRemovedSpy2(&musicDb2, &DatabaseInterface::albumRemoved); 3590 QSignalSpy musicDbTrackRemovedSpy2(&musicDb2, &DatabaseInterface::trackRemoved); 3591 QSignalSpy musicDbAlbumModifiedSpy2(&musicDb2, &DatabaseInterface::albumModified); 3592 QSignalSpy musicDbTrackModifiedSpy2(&musicDb2, &DatabaseInterface::trackModified); 3593 QSignalSpy musicDbDatabaseErrorSpy2(&musicDb2, &DatabaseInterface::databaseError); 3594 3595 QCOMPARE(musicDb2.allAlbumsData().count(), 0); 3596 QCOMPARE(musicDb2.allArtistsData().count(), 0); 3597 QCOMPARE(musicDb2.allTracksData().count(), 0); 3598 QCOMPARE(musicDbArtistAddedSpy2.count(), 0); 3599 QCOMPARE(musicDbAlbumAddedSpy2.count(), 0); 3600 QCOMPARE(musicDbTrackAddedSpy2.count(), 0); 3601 QCOMPARE(musicDbArtistRemovedSpy2.count(), 0); 3602 QCOMPARE(musicDbAlbumRemovedSpy2.count(), 0); 3603 QCOMPARE(musicDbTrackRemovedSpy2.count(), 0); 3604 QCOMPARE(musicDbAlbumModifiedSpy2.count(), 0); 3605 QCOMPARE(musicDbTrackModifiedSpy2.count(), 0); 3606 QCOMPARE(musicDbDatabaseErrorSpy2.count(), 0); 3607 3608 musicDb2.init(QStringLiteral("testDb2"), databaseFile.fileName()); 3609 3610 musicDbTrackAddedSpy2.wait(300); 3611 3612 QCOMPARE(musicDb2.allAlbumsData().count(), 5); 3613 QCOMPARE(musicDb2.allArtistsData().count(), 7); 3614 QCOMPARE(musicDb2.allTracksData().count(), 22); 3615 QCOMPARE(musicDbArtistAddedSpy2.count(), 0); 3616 QCOMPARE(musicDbAlbumAddedSpy2.count(), 0); 3617 QCOMPARE(musicDbTrackAddedSpy2.count(), 0); 3618 QCOMPARE(musicDbArtistRemovedSpy2.count(), 0); 3619 QCOMPARE(musicDbAlbumRemovedSpy2.count(), 0); 3620 QCOMPARE(musicDbTrackRemovedSpy2.count(), 0); 3621 QCOMPARE(musicDbAlbumModifiedSpy2.count(), 0); 3622 QCOMPARE(musicDbTrackModifiedSpy2.count(), 0); 3623 QCOMPARE(musicDbDatabaseErrorSpy2.count(), 0); 3624 3625 musicDb2.insertTracksList(mNewTracks, mNewCovers); 3626 3627 musicDbTrackAddedSpy2.wait(300); 3628 3629 QCOMPARE(musicDb2.allAlbumsData().count(), 5); 3630 QCOMPARE(musicDb2.allArtistsData().count(), 7); 3631 QCOMPARE(musicDb2.allTracksData().count(), 22); 3632 QCOMPARE(musicDbArtistAddedSpy2.count(), 0); 3633 QCOMPARE(musicDbAlbumAddedSpy2.count(), 0); 3634 QCOMPARE(musicDbTrackAddedSpy2.count(), 0); 3635 QCOMPARE(musicDbArtistRemovedSpy2.count(), 0); 3636 QCOMPARE(musicDbAlbumRemovedSpy2.count(), 0); 3637 QCOMPARE(musicDbTrackRemovedSpy2.count(), 0); 3638 QCOMPARE(musicDbAlbumModifiedSpy2.count(), 0); 3639 QCOMPARE(musicDbTrackModifiedSpy2.count(), 0); 3640 QCOMPARE(musicDbDatabaseErrorSpy2.count(), 0); 3641 } 3642 3643 3644 void testAddAlbumsSameName() 3645 { 3646 QTemporaryFile databaseFile; 3647 databaseFile.open(); 3648 3649 qDebug() << "testAddAlbumsSameName" << databaseFile.fileName(); 3650 3651 DatabaseInterface musicDb; 3652 3653 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 3654 3655 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 3656 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 3657 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 3658 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 3659 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 3660 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 3661 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 3662 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 3663 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 3664 3665 QCOMPARE(musicDb.allAlbumsData().count(), 0); 3666 QCOMPARE(musicDb.allArtistsData().count(), 0); 3667 QCOMPARE(musicDb.allTracksData().count(), 0); 3668 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 3669 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 3670 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 3671 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3672 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3673 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3674 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3675 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3676 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3677 3678 DataTypes::ListTrackDataType newTracks = { 3679 {true, QStringLiteral("$20"), QStringLiteral("0"), QStringLiteral("track1"), 3680 QStringLiteral("artist6"), QStringLiteral("album1"), QStringLiteral("artist6"), 3681 1, 1, QTime::fromMSecsSinceStartOfDay(1), {QUrl::fromLocalFile(QStringLiteral("/$20"))}, 3682 QDateTime::fromMSecsSinceEpoch(20), 3683 {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 1, false, 3684 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, 3685 {true, QStringLiteral("$21"), QStringLiteral("0"), QStringLiteral("track2"), 3686 QStringLiteral("artist6"), QStringLiteral("album1"), QStringLiteral("artist6"), 3687 2, 1, QTime::fromMSecsSinceStartOfDay(2), {QUrl::fromLocalFile(QStringLiteral("/$21"))}, 3688 QDateTime::fromMSecsSinceEpoch(21), 3689 {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 2, false, 3690 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, 3691 {true, QStringLiteral("$22"), QStringLiteral("0"), QStringLiteral("track3"), 3692 QStringLiteral("artist6"), QStringLiteral("album1"), QStringLiteral("artist6"), 3693 3, 1, QTime::fromMSecsSinceStartOfDay(3), {QUrl::fromLocalFile(QStringLiteral("/$22"))}, 3694 QDateTime::fromMSecsSinceEpoch(22), 3695 {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 3, false, 3696 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, 3697 {true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track4"), 3698 QStringLiteral("artist6"), QStringLiteral("album1"), QStringLiteral("artist6"), 3699 4, 1, QTime::fromMSecsSinceStartOfDay(4), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 3700 QDateTime::fromMSecsSinceEpoch(23), 3701 {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 4, false, 3702 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, 3703 {true, QStringLiteral("$24"), QStringLiteral("0"), QStringLiteral("track5"), 3704 QStringLiteral("artist6"), QStringLiteral("album1"), QStringLiteral("artist6"), 3705 5, 1, QTime::fromMSecsSinceStartOfDay(4), {QUrl::fromLocalFile(QStringLiteral("/$24"))}, 3706 QDateTime::fromMSecsSinceEpoch(24), 3707 {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 5, false, 3708 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, 3709 {true, QStringLiteral("$25"), QStringLiteral("0"), QStringLiteral("track6"), 3710 QStringLiteral("artist6"), QStringLiteral("album1"), QStringLiteral("artist6"), 3711 6, 1, QTime::fromMSecsSinceStartOfDay(5), {QUrl::fromLocalFile(QStringLiteral("/$25"))}, 3712 QDateTime::fromMSecsSinceEpoch(25), 3713 {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 6, true, 3714 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, 3715 {true, QStringLiteral("$2"), QStringLiteral("0"), QStringLiteral("track2"), 3716 QStringLiteral("artist2"), QStringLiteral("album1"), QStringLiteral("Various Artists"), 3717 2, 2, QTime::fromMSecsSinceStartOfDay(2), {QUrl::fromLocalFile(QStringLiteral("/$26"))}, 3718 QDateTime::fromMSecsSinceEpoch(26), 3719 {QUrl::fromLocalFile(QStringLiteral("file://image$2"))}, 2, false, 3720 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, 3721 }; 3722 3723 musicDb.insertTracksList(newTracks, mNewCovers); 3724 3725 musicDbTrackAddedSpy.wait(100); 3726 3727 QCOMPARE(musicDb.allAlbumsData().count(), 2); 3728 QCOMPARE(musicDb.allArtistsData().count(), 3); 3729 QCOMPARE(musicDb.allTracksData().count(), 7); 3730 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 3731 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 3732 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 3733 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3734 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3735 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3736 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3737 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3738 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3739 3740 auto firstAlbum = musicDb.albumDataFromDatabaseId(musicDb.albumIdFromTitleAndArtist(QStringLiteral("album1"), QStringLiteral("Invalid Artist"), QStringLiteral("/"))); 3741 } 3742 3743 void addTwoIdenticalTracksWithPartialAlbumArtist() 3744 { 3745 QTemporaryFile databaseFile; 3746 databaseFile.open(); 3747 3748 qDebug() << "addTwoTracksWithoutAlbumArtist" << databaseFile.fileName(); 3749 3750 DatabaseInterface musicDb; 3751 3752 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 3753 3754 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 3755 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 3756 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 3757 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 3758 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 3759 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 3760 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 3761 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 3762 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 3763 3764 QCOMPARE(musicDb.allAlbumsData().count(), 0); 3765 QCOMPARE(musicDb.allArtistsData().count(), 0); 3766 QCOMPARE(musicDb.allTracksData().count(), 0); 3767 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 3768 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 3769 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 3770 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3771 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3772 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3773 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3774 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3775 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3776 3777 auto newTracks = DataTypes::ListTrackDataType(); 3778 3779 newTracks = {{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 3780 QStringLiteral("artist2"), QStringLiteral("album3"), {}, 3781 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 3782 QDateTime::fromMSecsSinceEpoch(23), 3783 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, 3784 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true},}; 3785 3786 auto newCovers = mNewCovers; 3787 newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 3788 3789 musicDb.insertTracksList(newTracks, newCovers); 3790 3791 musicDbTrackAddedSpy.wait(300); 3792 3793 QCOMPARE(musicDb.allAlbumsData().count(), 1); 3794 QCOMPARE(musicDb.allArtistsData().count(), 1); 3795 QCOMPARE(musicDb.allTracksData().count(), 1); 3796 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 3797 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 3798 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 3799 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3800 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3801 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3802 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3803 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3804 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3805 3806 auto firstTrack = musicDb.trackDataFromDatabaseId(musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist2"), 3807 QStringLiteral("album3"), 6, 1)); 3808 3809 QCOMPARE(firstTrack.isValid(), true); 3810 QCOMPARE(firstTrack.title(), QStringLiteral("track6")); 3811 QCOMPARE(firstTrack.artist(), QStringLiteral("artist2")); 3812 QCOMPARE(firstTrack.album(), QStringLiteral("album3")); 3813 QVERIFY(!firstTrack.albumArtist().isEmpty()); 3814 QCOMPARE(firstTrack.albumCover(), QUrl::fromLocalFile(QStringLiteral("album3"))); 3815 QCOMPARE(firstTrack.trackNumber(), 6); 3816 QCOMPARE(firstTrack.discNumber(), 1); 3817 QCOMPARE(firstTrack.duration(), QTime::fromMSecsSinceStartOfDay(23)); 3818 QCOMPARE(firstTrack.resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$23"))); 3819 QCOMPARE(firstTrack.rating(), 5); 3820 QCOMPARE(firstTrack.genre(), QStringLiteral("genre1")); 3821 QCOMPARE(firstTrack.composer(), QStringLiteral("composer1")); 3822 QCOMPARE(firstTrack.lyricist(), QStringLiteral("lyricist1")); 3823 QCOMPARE(firstTrack.hasEmbeddedCover(), true); 3824 3825 auto newTracks2 = DataTypes::ListTrackDataType(); 3826 3827 newTracks2 = {{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 3828 QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 3829 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 3830 QDateTime::fromMSecsSinceEpoch(23), 3831 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, 3832 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false},}; 3833 3834 auto newCovers2 = mNewCovers; 3835 newCovers2[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 3836 3837 musicDb.insertTracksList(newTracks2, newCovers2); 3838 3839 musicDbTrackAddedSpy.wait(300); 3840 3841 QCOMPARE(musicDb.allAlbumsData().count(), 1); 3842 QCOMPARE(musicDb.allArtistsData().count(), 1); 3843 QCOMPARE(musicDb.allTracksData().count(), 1); 3844 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 3845 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 3846 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 3847 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3848 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3849 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3850 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3851 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3852 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3853 } 3854 3855 void addTwoTracksWithPartialAlbumArtist2() 3856 { 3857 QTemporaryFile databaseFile; 3858 databaseFile.open(); 3859 3860 qDebug() << "addTwoTracksWithPartialAlbumArtist" << databaseFile.fileName(); 3861 3862 DatabaseInterface musicDb; 3863 3864 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 3865 3866 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 3867 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 3868 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 3869 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 3870 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 3871 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 3872 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 3873 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 3874 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 3875 3876 QCOMPARE(musicDb.allAlbumsData().count(), 0); 3877 QCOMPARE(musicDb.allArtistsData().count(), 0); 3878 QCOMPARE(musicDb.allTracksData().count(), 0); 3879 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 3880 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 3881 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 3882 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3883 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3884 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3885 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3886 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3887 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3888 3889 auto newTracks = DataTypes::ListTrackDataType(); 3890 3891 newTracks = {{true, QStringLiteral("$20"), QStringLiteral("0"), QStringLiteral("track7"), 3892 QStringLiteral("artist3"), QStringLiteral("album3"), {QStringLiteral("artist4")}, 7, 1, 3893 QTime::fromMSecsSinceStartOfDay(20), {QUrl::fromLocalFile(QStringLiteral("/$20"))}, 3894 QDateTime::fromMSecsSinceEpoch(20), 3895 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, 3896 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}}; 3897 3898 auto newCovers = mNewCovers; 3899 newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 3900 newCovers[QStringLiteral("file:///$20")] = QUrl::fromLocalFile(QStringLiteral("album3")); 3901 3902 musicDb.insertTracksList(newTracks, newCovers); 3903 3904 musicDbTrackAddedSpy.wait(300); 3905 3906 QCOMPARE(musicDb.allAlbumsData().count(), 1); 3907 QCOMPARE(musicDb.allArtistsData().count(), 2); 3908 QCOMPARE(musicDb.allTracksData().count(), 1); 3909 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 3910 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 3911 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 3912 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3913 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3914 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3915 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 3916 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3917 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3918 3919 auto newTracks2 = DataTypes::ListTrackDataType(); 3920 3921 newTracks2 = {{true, QStringLiteral("$19"), QStringLiteral("0"), QStringLiteral("track6"), 3922 QStringLiteral("artist4"), QStringLiteral("album3"), {}, 6, 1, 3923 QTime::fromMSecsSinceStartOfDay(19), {QUrl::fromLocalFile(QStringLiteral("/$19"))}, 3924 QDateTime::fromMSecsSinceEpoch(19), 3925 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, 3926 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}}; 3927 3928 musicDb.insertTracksList(newTracks2, newCovers); 3929 3930 musicDbTrackAddedSpy.wait(300); 3931 3932 QCOMPARE(musicDb.allAlbumsData().count(), 1); 3933 QCOMPARE(musicDb.allArtistsData().count(), 2); 3934 QCOMPARE(musicDb.allTracksData().count(), 2); 3935 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 3936 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 3937 QCOMPARE(musicDbTrackAddedSpy.count(), 2); 3938 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 3939 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 3940 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 3941 QCOMPARE(musicDbAlbumModifiedSpy.count(), 1); 3942 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 3943 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 3944 3945 auto firstTrack = musicDb.trackDataFromDatabaseId(musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist4"), 3946 QStringLiteral("album3"), 6, 1)); 3947 3948 QCOMPARE(firstTrack.isValid(), true); 3949 QCOMPARE(firstTrack.title(), QStringLiteral("track6")); 3950 QCOMPARE(firstTrack.artist(), QStringLiteral("artist4")); 3951 QCOMPARE(firstTrack.album(), QStringLiteral("album3")); 3952 QVERIFY(!firstTrack.albumArtist().isEmpty()); 3953 QCOMPARE(firstTrack.albumCover(), QUrl::fromLocalFile(QStringLiteral("album3"))); 3954 QCOMPARE(firstTrack.trackNumber(), 6); 3955 QCOMPARE(firstTrack.discNumber(), 1); 3956 QCOMPARE(firstTrack.duration(), QTime::fromMSecsSinceStartOfDay(19)); 3957 QCOMPARE(firstTrack.resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$19"))); 3958 QCOMPARE(firstTrack.rating(), 5); 3959 QCOMPARE(firstTrack.genre(), QStringLiteral("genre1")); 3960 QCOMPARE(firstTrack.composer(), QStringLiteral("composer1")); 3961 QCOMPARE(firstTrack.lyricist(), QStringLiteral("lyricist1")); 3962 QCOMPARE(firstTrack.hasEmbeddedCover(), true); 3963 3964 auto secondTrack = musicDb.trackDataFromDatabaseId(musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track7"), QStringLiteral("artist3"), 3965 QStringLiteral("album3"), 7, 1)); 3966 3967 QCOMPARE(secondTrack.isValid(), true); 3968 QCOMPARE(secondTrack.title(), QStringLiteral("track7")); 3969 QCOMPARE(secondTrack.artist(), QStringLiteral("artist3")); 3970 QCOMPARE(secondTrack.album(), QStringLiteral("album3")); 3971 QCOMPARE(secondTrack.albumArtist(), QStringLiteral("artist4")); 3972 QCOMPARE(secondTrack.albumCover(), QUrl::fromLocalFile(QStringLiteral("album3"))); 3973 QCOMPARE(secondTrack.trackNumber(), 7); 3974 QCOMPARE(secondTrack.discNumber(), 1); 3975 QCOMPARE(secondTrack.duration(), QTime::fromMSecsSinceStartOfDay(20)); 3976 QCOMPARE(secondTrack.resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$20"))); 3977 QCOMPARE(secondTrack.rating(), 5); 3978 QCOMPARE(secondTrack.genre(), QStringLiteral("genre1")); 3979 QCOMPARE(secondTrack.composer(), QStringLiteral("composer1")); 3980 QCOMPARE(secondTrack.lyricist(), QStringLiteral("lyricist1")); 3981 QCOMPARE(secondTrack.hasEmbeddedCover(), false); 3982 3983 auto albumId = musicDb.albumIdFromTitleAndArtist(QStringLiteral("album3"), QStringLiteral("artist4"), QStringLiteral("/")); 3984 auto album = musicDb.albumDataFromDatabaseId(albumId); 3985 auto albumData = musicDb.albumData(albumId); 3986 3987 QCOMPARE(album.isValid(), true); 3988 QCOMPARE(albumData.count(), 2); 3989 QCOMPARE(album.title(), QStringLiteral("album3")); 3990 QCOMPARE(album.artist(), QStringLiteral("artist4")); 3991 QCOMPARE(album.isValidArtist(), true); 3992 QCOMPARE(album.albumArtURI(), QUrl::fromLocalFile(QStringLiteral("album3"))); 3993 QCOMPARE(album.isSingleDiscAlbum(), true); 3994 } 3995 3996 void addTowAlbumsWithDifferentPathsAndSameName() 3997 { 3998 QTemporaryFile databaseFile; 3999 databaseFile.open(); 4000 4001 qDebug() << "addTowAlbumsWithDifferentPathsAndSameName" << databaseFile.fileName(); 4002 4003 DatabaseInterface musicDb; 4004 4005 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 4006 4007 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 4008 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 4009 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 4010 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 4011 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 4012 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 4013 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 4014 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 4015 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 4016 4017 QCOMPARE(musicDb.allAlbumsData().count(), 0); 4018 QCOMPARE(musicDb.allArtistsData().count(), 0); 4019 QCOMPARE(musicDb.allTracksData().count(), 0); 4020 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 4021 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 4022 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 4023 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4024 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4025 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4026 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4027 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4028 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4029 4030 auto newTracks = DataTypes::ListTrackDataType(); 4031 4032 newTracks = {{true, QStringLiteral("$20"), QStringLiteral("0"), QStringLiteral("track7"), 4033 QStringLiteral("artist1"), QStringLiteral("album7"), {}, 7, 1, 4034 QTime::fromMSecsSinceStartOfDay(20), {QUrl::fromLocalFile(QStringLiteral("/album7/$20"))}, 4035 QDateTime::fromMSecsSinceEpoch(20), 4036 {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, 4037 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, 4038 {true, QStringLiteral("$21"), QStringLiteral("0"), QStringLiteral("track8"), 4039 QStringLiteral("artist2"), QStringLiteral("album7"), {}, 8, 1, 4040 QTime::fromMSecsSinceStartOfDay(21), {QUrl::fromLocalFile(QStringLiteral("/album7/$21"))}, 4041 QDateTime::fromMSecsSinceEpoch(21), 4042 {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, 4043 QStringLiteral("genre2"), QStringLiteral("composer2"), QStringLiteral("lyricist2"), false}, 4044 {true, QStringLiteral("$22"), QStringLiteral("0"), QStringLiteral("track9"), 4045 QStringLiteral("artist3"), QStringLiteral("album7"), {}, 9, 1, 4046 QTime::fromMSecsSinceStartOfDay(22), {QUrl::fromLocalFile(QStringLiteral("/album8/$22"))}, 4047 QDateTime::fromMSecsSinceEpoch(22), 4048 {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, 4049 QStringLiteral("genre3"), QStringLiteral("composer3"), QStringLiteral("lyricist3"), false}, 4050 {true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track10"), 4051 QStringLiteral("artist4"), QStringLiteral("album7"), {}, 10, 1, 4052 QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/album8/$23"))}, 4053 QDateTime::fromMSecsSinceEpoch(23), 4054 {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, 4055 QStringLiteral("genre4"), QStringLiteral("composer4"), QStringLiteral("lyricist4"), false},}; 4056 4057 auto newCovers = mNewCovers; 4058 newCovers[QStringLiteral("file:///album7/$20")] = QUrl::fromLocalFile(QStringLiteral("album7")); 4059 newCovers[QStringLiteral("file:///album7/$21")] = QUrl::fromLocalFile(QStringLiteral("album7")); 4060 newCovers[QStringLiteral("file:///album8/$22")] = QUrl::fromLocalFile(QStringLiteral("album8")); 4061 newCovers[QStringLiteral("file:///album8/$23")] = QUrl::fromLocalFile(QStringLiteral("album8")); 4062 4063 musicDb.insertTracksList(newTracks, newCovers); 4064 4065 musicDbTrackAddedSpy.wait(300); 4066 4067 QCOMPARE(musicDb.allAlbumsData().count(), 2); 4068 QCOMPARE(musicDb.allArtistsData().count(), 4); 4069 QCOMPARE(musicDb.allTracksData().count(), 4); 4070 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 4071 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 4072 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 4073 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4074 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4075 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4076 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4077 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4078 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4079 4080 QCOMPARE(musicDb.allAlbumsData().size(), 2); 4081 QCOMPARE(musicDb.allArtistsData().size(), 4); 4082 QCOMPARE(musicDb.allTracksData().size(), 4); 4083 4084 auto allAlbums = musicDb.allAlbumsData(); 4085 auto firstAlbum = allAlbums[0]; 4086 auto firstAlbumData = musicDb.albumData(firstAlbum.databaseId()); 4087 QCOMPARE(firstAlbumData.count(), 2); 4088 auto secondAlbum = allAlbums[1]; 4089 auto secondAlbumData = musicDb.albumData(secondAlbum.databaseId()); 4090 QCOMPARE(secondAlbumData.count(), 2); 4091 } 4092 4093 void addTwoAlbumsWithDifferentPathsAndSameTracks() 4094 { 4095 QTemporaryFile databaseFile; 4096 databaseFile.open(); 4097 4098 qDebug() << "addTowAlbumsWithDifferentPathsAndSameName" << databaseFile.fileName(); 4099 4100 DatabaseInterface musicDb; 4101 4102 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 4103 4104 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 4105 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 4106 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 4107 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 4108 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 4109 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 4110 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 4111 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 4112 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 4113 4114 QCOMPARE(musicDb.allAlbumsData().count(), 0); 4115 QCOMPARE(musicDb.allArtistsData().count(), 0); 4116 QCOMPARE(musicDb.allTracksData().count(), 0); 4117 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 4118 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 4119 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 4120 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4121 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4122 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4123 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4124 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4125 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4126 4127 auto newTracks = DataTypes::ListTrackDataType(); 4128 4129 newTracks = {{true, QStringLiteral("$20"), QStringLiteral("0"), QStringLiteral("track7"), 4130 QStringLiteral("artist1"), QStringLiteral("album7"), {}, 7, 1, 4131 QTime::fromMSecsSinceStartOfDay(20), {QUrl::fromLocalFile(QStringLiteral("/album7/$20"))}, 4132 QDateTime::fromMSecsSinceEpoch(20), 4133 {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, 4134 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, 4135 {true, QStringLiteral("$21"), QStringLiteral("0"), QStringLiteral("track8"), 4136 QStringLiteral("artist2"), QStringLiteral("album7"), {}, 8, 1, 4137 QTime::fromMSecsSinceStartOfDay(21), {QUrl::fromLocalFile(QStringLiteral("/album7/$21"))}, 4138 QDateTime::fromMSecsSinceEpoch(21), 4139 {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, 4140 QStringLiteral("genre2"), QStringLiteral("composer2"), QStringLiteral("lyricist2"), false}, 4141 {true, QStringLiteral("$22"), QStringLiteral("0"), QStringLiteral("track9"), 4142 QStringLiteral("artist3"), QStringLiteral("album7"), {}, 9, 1, 4143 QTime::fromMSecsSinceStartOfDay(22), {QUrl::fromLocalFile(QStringLiteral("/album7/$22"))}, 4144 QDateTime::fromMSecsSinceEpoch(22), 4145 {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, 4146 QStringLiteral("genre3"), QStringLiteral("composer3"), QStringLiteral("lyricist3"), false}, 4147 {true, QStringLiteral("$20"), QStringLiteral("0"), QStringLiteral("track7"), 4148 QStringLiteral("artist1"), QStringLiteral("album7"), {}, 7, 1, 4149 QTime::fromMSecsSinceStartOfDay(20), {QUrl::fromLocalFile(QStringLiteral("/album8/$20"))}, 4150 QDateTime::fromMSecsSinceEpoch(20), 4151 {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, 4152 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, 4153 {true, QStringLiteral("$21"), QStringLiteral("0"), QStringLiteral("track8"), 4154 QStringLiteral("artist2"), QStringLiteral("album7"), {}, 8, 1, 4155 QTime::fromMSecsSinceStartOfDay(21), {QUrl::fromLocalFile(QStringLiteral("/album8/$21"))}, 4156 QDateTime::fromMSecsSinceEpoch(21), 4157 {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, 4158 QStringLiteral("genre2"), QStringLiteral("composer2"), QStringLiteral("lyricist2"), false}, 4159 {true, QStringLiteral("$22"), QStringLiteral("0"), QStringLiteral("track9"), 4160 QStringLiteral("artist3"), QStringLiteral("album7"), {}, 9, 1, 4161 QTime::fromMSecsSinceStartOfDay(22), {QUrl::fromLocalFile(QStringLiteral("/album8/$22"))}, 4162 QDateTime::fromMSecsSinceEpoch(22), 4163 {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, 4164 QStringLiteral("genre3"), QStringLiteral("composer3"), QStringLiteral("lyricist3"), false},}; 4165 4166 auto newCovers = mNewCovers; 4167 newCovers[QStringLiteral("file:///album7/$20")] = QUrl::fromLocalFile(QStringLiteral("album7")); 4168 newCovers[QStringLiteral("file:///album7/$21")] = QUrl::fromLocalFile(QStringLiteral("album7")); 4169 newCovers[QStringLiteral("file:///album7/$22")] = QUrl::fromLocalFile(QStringLiteral("album7")); 4170 newCovers[QStringLiteral("file:///album8/$20")] = QUrl::fromLocalFile(QStringLiteral("album8")); 4171 newCovers[QStringLiteral("file:///album8/$21")] = QUrl::fromLocalFile(QStringLiteral("album8")); 4172 newCovers[QStringLiteral("file:///album8/$22")] = QUrl::fromLocalFile(QStringLiteral("album8")); 4173 4174 musicDb.insertTracksList(newTracks, newCovers); 4175 4176 musicDbTrackAddedSpy.wait(300); 4177 4178 QCOMPARE(musicDb.allAlbumsData().count(), 2); 4179 QCOMPARE(musicDb.allArtistsData().count(), 3); 4180 QCOMPARE(musicDb.allTracksData().count(), 6); 4181 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 4182 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 4183 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 4184 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4185 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4186 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4187 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4188 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4189 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4190 4191 auto allAlbums = musicDb.allAlbumsData(); 4192 auto firstAlbum = allAlbums[0]; 4193 auto firstAlbumData = musicDb.albumData(firstAlbum.databaseId()); 4194 QCOMPARE(firstAlbumData.count(), 3); 4195 auto secondAlbum = allAlbums[1]; 4196 auto secondAlbumData = musicDb.albumData(secondAlbum.databaseId()); 4197 QCOMPARE(secondAlbumData.count(), 3); 4198 } 4199 4200 void addTwoTracksFromSameAlbumButDifferentDiscs() 4201 { 4202 QTemporaryFile databaseFile; 4203 databaseFile.open(); 4204 4205 qDebug() << "addTwoTracksFromSameAlbumButDifferentDiscs" << databaseFile.fileName(); 4206 4207 DatabaseInterface musicDb; 4208 4209 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 4210 4211 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 4212 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 4213 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 4214 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 4215 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 4216 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 4217 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 4218 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 4219 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 4220 4221 QCOMPARE(musicDb.allAlbumsData().count(), 0); 4222 QCOMPARE(musicDb.allArtistsData().count(), 0); 4223 QCOMPARE(musicDb.allTracksData().count(), 0); 4224 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 4225 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 4226 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 4227 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4228 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4229 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4230 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4231 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4232 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4233 4234 auto newTrack = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 4235 QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 4236 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, 4237 QDateTime::fromMSecsSinceEpoch(23), 4238 {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, 4239 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 4240 auto newTracks = DataTypes::ListTrackDataType(); 4241 newTracks.push_back(newTrack); 4242 4243 auto newCovers = mNewCovers; 4244 newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 4245 4246 musicDb.insertTracksList(newTracks, newCovers); 4247 4248 musicDbTrackAddedSpy.wait(300); 4249 4250 QCOMPARE(musicDb.allAlbumsData().count(), 1); 4251 QCOMPARE(musicDb.allArtistsData().count(), 1); 4252 QCOMPARE(musicDb.allTracksData().count(), 1); 4253 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 4254 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 4255 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 4256 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4257 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4258 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4259 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4260 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4261 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4262 4263 auto firstTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist2"), 4264 QStringLiteral("album3"), 6, 1); 4265 auto firstTrack = musicDb.trackDataFromDatabaseId(firstTrackId); 4266 4267 auto firstTrackTitle = firstTrack.title(); 4268 auto firstTrackArtist = firstTrack.artist(); 4269 auto firstTrackAlbumArtist = firstTrack.albumArtist(); 4270 auto firstTrackAlbum = firstTrack.album(); 4271 auto firstTrackImage = firstTrack.albumCover(); 4272 auto firstTrackDuration = firstTrack.duration(); 4273 auto firstTrackMilliSecondsDuration = firstTrack.duration().msecsSinceStartOfDay(); 4274 auto firstTrackTrackNumber = firstTrack.trackNumber(); 4275 auto firstTrackDiscNumber = firstTrack.discNumber(); 4276 const auto &firstTrackResource = firstTrack.resourceURI(); 4277 auto firstTrackRating = firstTrack.rating(); 4278 auto firstIsSingleDiscAlbum = firstTrack.isSingleDiscAlbum(); 4279 4280 QCOMPARE(firstTrack.isValid(), true); 4281 QCOMPARE(firstTrackTitle, QStringLiteral("track6")); 4282 QCOMPARE(firstTrackArtist, QStringLiteral("artist2")); 4283 QCOMPARE(firstTrackAlbumArtist, QStringLiteral("artist2")); 4284 QCOMPARE(firstTrackAlbum, QStringLiteral("album3")); 4285 QCOMPARE(firstTrackImage.isValid(), true); 4286 QCOMPARE(firstTrackImage, QUrl::fromLocalFile(QStringLiteral("album3"))); 4287 QCOMPARE(firstTrackDuration, QTime::fromMSecsSinceStartOfDay(23)); 4288 QCOMPARE(firstTrackMilliSecondsDuration, 23); 4289 QCOMPARE(firstTrackTrackNumber, 6); 4290 QCOMPARE(firstTrackDiscNumber, 1); 4291 QCOMPARE(firstTrackResource.isValid(), true); 4292 QCOMPARE(firstTrackResource, QUrl::fromLocalFile(QStringLiteral("/$23"))); 4293 QCOMPARE(firstTrackRating, 5); 4294 QCOMPARE(firstIsSingleDiscAlbum, true); 4295 4296 auto allAlbums = musicDb.allAlbumsData(); 4297 4298 QCOMPARE(allAlbums.size(), 1); 4299 4300 auto firstAlbumData = musicDb.albumData(allAlbums[0].databaseId()); 4301 auto firstAlbumTitle = allAlbums[0].title(); 4302 auto firstAlbumArtist = allAlbums[0].artist(); 4303 auto firstAlbumImage = allAlbums[0].albumArtURI(); 4304 auto firstAlbumTracksCount = firstAlbumData.count(); 4305 auto firstAlbumIsSingleDiscAlbum = allAlbums[0].isSingleDiscAlbum(); 4306 4307 QCOMPARE(firstAlbumTitle, QStringLiteral("album3")); 4308 QCOMPARE(firstAlbumArtist, QStringLiteral("artist2")); 4309 QCOMPARE(firstAlbumImage.isValid(), true); 4310 QCOMPARE(firstAlbumImage, QUrl::fromLocalFile(QStringLiteral("album3"))); 4311 QCOMPARE(firstAlbumTracksCount, 1); 4312 QCOMPARE(firstAlbumIsSingleDiscAlbum, true); 4313 4314 auto newTrack2 = DataTypes::TrackDataType{true, QStringLiteral("$25"), QStringLiteral("0"), QStringLiteral("track8"), 4315 QStringLiteral("artist9"), QStringLiteral("album3"), QStringLiteral("artist2"), 8, 2, QTime::fromMSecsSinceStartOfDay(25), 4316 {QUrl::fromLocalFile(QStringLiteral("/$25"))}, 4317 QDateTime::fromMSecsSinceEpoch(25), 4318 {QUrl::fromLocalFile(QStringLiteral("file://image$25"))}, 5, true, 4319 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 4320 auto newTracks2 = DataTypes::ListTrackDataType(); 4321 newTracks2.push_back(newTrack2); 4322 4323 auto newCovers2 = mNewCovers; 4324 newCovers2[QStringLiteral("file:///$25")] = QUrl::fromLocalFile(QStringLiteral("album3")); 4325 4326 musicDb.insertTracksList(newTracks2, newCovers2); 4327 4328 musicDbTrackAddedSpy.wait(50); 4329 4330 QCOMPARE(musicDb.allAlbumsData().count(), 1); 4331 QCOMPARE(musicDb.allArtistsData().count(), 2); 4332 QCOMPARE(musicDb.allTracksData().count(), 2); 4333 QCOMPARE(musicDbArtistAddedSpy.count(), 2); 4334 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 4335 QCOMPARE(musicDbTrackAddedSpy.count(), 2); 4336 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4337 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4338 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4339 QCOMPARE(musicDbAlbumModifiedSpy.count(), 1); 4340 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4341 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4342 4343 auto secondTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track8"), QStringLiteral("artist9"), 4344 QStringLiteral("album3"), 8, 2); 4345 auto secondTrack = musicDb.trackDataFromDatabaseId(secondTrackId); 4346 4347 auto secondTrackTitle = secondTrack.title(); 4348 auto secondTrackArtist = secondTrack.artist(); 4349 auto secondTrackAlbumArtist = secondTrack.albumArtist(); 4350 auto secondTrackAlbum = secondTrack.album(); 4351 auto secondTrackImage = secondTrack.albumCover(); 4352 auto secondTrackDuration = secondTrack.duration(); 4353 auto secondTrackMilliSecondsDuration = secondTrack.duration().msecsSinceStartOfDay(); 4354 auto secondTrackTrackNumber = secondTrack.trackNumber(); 4355 auto secondTrackDiscNumber = secondTrack.discNumber(); 4356 const auto &secondTrackResource = secondTrack.resourceURI(); 4357 auto secondTrackRating = secondTrack.rating(); 4358 auto secondIsSingleDiscAlbum = secondTrack.isSingleDiscAlbum(); 4359 4360 QCOMPARE(secondTrack.isValid(), true); 4361 QCOMPARE(secondTrackTitle, QStringLiteral("track8")); 4362 QCOMPARE(secondTrackArtist, QStringLiteral("artist9")); 4363 QCOMPARE(secondTrackAlbumArtist, QStringLiteral("artist2")); 4364 QCOMPARE(secondTrackAlbum, QStringLiteral("album3")); 4365 QCOMPARE(secondTrackImage.isValid(), true); 4366 QCOMPARE(secondTrackImage, QUrl::fromLocalFile(QStringLiteral("album3"))); 4367 QCOMPARE(secondTrackDuration, QTime::fromMSecsSinceStartOfDay(25)); 4368 QCOMPARE(secondTrackMilliSecondsDuration, 25); 4369 QCOMPARE(secondTrackTrackNumber, 8); 4370 QCOMPARE(secondTrackDiscNumber, 2); 4371 QCOMPARE(secondTrackResource.isValid(), true); 4372 QCOMPARE(secondTrackResource, QUrl::fromLocalFile(QStringLiteral("/$25"))); 4373 QCOMPARE(secondTrackRating, 5); 4374 QCOMPARE(secondIsSingleDiscAlbum, false); 4375 4376 auto allAlbums2 = musicDb.allAlbumsData(); 4377 4378 auto firstAlbumData2 = musicDb.albumData(allAlbums2[0].databaseId()); 4379 auto firstAlbumTitle2 = allAlbums2[0].title(); 4380 auto firstAlbumArtist2 = allAlbums2[0].artist(); 4381 auto firstAlbumImage2 = allAlbums2[0].albumArtURI(); 4382 auto firstAlbumTracksCount2 = firstAlbumData2.count(); 4383 auto firstAlbumIsSingleDiscAlbum2 = allAlbums2[0].isSingleDiscAlbum(); 4384 4385 QCOMPARE(firstAlbumTitle2, QStringLiteral("album3")); 4386 QCOMPARE(firstAlbumArtist2, QStringLiteral("artist2")); 4387 QCOMPARE(firstAlbumImage2.isValid(), true); 4388 QCOMPARE(firstAlbumImage2, QUrl::fromLocalFile(QStringLiteral("album3"))); 4389 QCOMPARE(firstAlbumTracksCount2, 2); 4390 QCOMPARE(firstAlbumIsSingleDiscAlbum2, false); 4391 } 4392 4393 void addTwoIdenticalInvalidTracks() 4394 { 4395 DatabaseInterface musicDb; 4396 4397 musicDb.init(QStringLiteral("testDb")); 4398 4399 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 4400 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 4401 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 4402 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 4403 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 4404 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 4405 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 4406 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 4407 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 4408 4409 QCOMPARE(musicDb.allAlbumsData().count(), 0); 4410 QCOMPARE(musicDb.allArtistsData().count(), 0); 4411 QCOMPARE(musicDb.allTracksData().count(), 0); 4412 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 4413 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 4414 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 4415 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4416 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4417 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4418 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4419 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4420 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4421 4422 musicDb.insertTracksList(mNewTracks, mNewCovers); 4423 4424 musicDbTrackAddedSpy.wait(300); 4425 4426 QCOMPARE(musicDb.allAlbumsData().count(), 5); 4427 QCOMPARE(musicDb.allArtistsData().count(), 7); 4428 QCOMPARE(musicDb.allTracksData().count(), 22); 4429 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 4430 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 4431 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 4432 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4433 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4434 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4435 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4436 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4437 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4438 4439 auto newTrack = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), {}, 4440 {}, {}, {}, {}, {}, {}, {QUrl::fromLocalFile(QStringLiteral("file:///$23"))}, 4441 QDateTime::fromMSecsSinceEpoch(23), {}, {}, {}, {}, {}, {}, false}; 4442 auto newTracks = DataTypes::ListTrackDataType(); 4443 newTracks.push_back(newTrack); 4444 newTracks.push_back(newTrack); 4445 4446 auto newCovers = mNewCovers; 4447 newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 4448 4449 musicDb.insertTracksList(newTracks, newCovers); 4450 4451 musicDbTrackAddedSpy.wait(300); 4452 4453 QCOMPARE(musicDb.allAlbumsData().count(), 5); 4454 QCOMPARE(musicDb.allArtistsData().count(), 7); 4455 QCOMPARE(musicDb.allTracksData().count(), 23); 4456 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 4457 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 4458 QCOMPARE(musicDbTrackAddedSpy.count(), 2); 4459 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4460 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4461 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4462 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4463 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4464 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4465 } 4466 4467 4468 void checkRestoredTracks() 4469 { 4470 DatabaseInterface musicDb; 4471 4472 musicDb.init(QStringLiteral("testDb")); 4473 4474 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 4475 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 4476 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 4477 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 4478 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 4479 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 4480 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 4481 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 4482 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 4483 QSignalSpy musicDbRestoredTracksSpy(&musicDb, &DatabaseInterface::restoredTracks); 4484 4485 QCOMPARE(musicDb.allAlbumsData().count(), 0); 4486 QCOMPARE(musicDb.allArtistsData().count(), 0); 4487 QCOMPARE(musicDb.allTracksData().count(), 0); 4488 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 4489 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 4490 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 4491 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4492 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4493 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4494 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4495 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4496 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4497 QCOMPARE(musicDbRestoredTracksSpy.count(), 0); 4498 4499 musicDb.insertTracksList(mNewTracks, mNewCovers); 4500 4501 musicDbTrackAddedSpy.wait(300); 4502 4503 QCOMPARE(musicDb.allAlbumsData().count(), 5); 4504 QCOMPARE(musicDb.allArtistsData().count(), 7); 4505 QCOMPARE(musicDb.allTracksData().count(), 22); 4506 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 4507 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 4508 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 4509 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4510 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4511 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4512 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4513 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4514 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4515 QCOMPARE(musicDbRestoredTracksSpy.count(), 0); 4516 4517 musicDb.askRestoredTracks(); 4518 4519 QCOMPARE(musicDb.allAlbumsData().count(), 5); 4520 QCOMPARE(musicDb.allArtistsData().count(), 7); 4521 QCOMPARE(musicDb.allTracksData().count(), 22); 4522 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 4523 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 4524 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 4525 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4526 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4527 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4528 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4529 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4530 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4531 QCOMPARE(musicDbRestoredTracksSpy.count(), 1); 4532 4533 const auto &firstSignal = musicDbRestoredTracksSpy.at(0); 4534 QCOMPARE(firstSignal.count(), 1); 4535 4536 const auto &restoredTracks = firstSignal.at(0).value<QHash<QUrl,QDateTime>>(); 4537 QCOMPARE(restoredTracks.count(), 23); 4538 } 4539 4540 void addOneTrackWithParticularPath() 4541 { 4542 DatabaseInterface musicDb; 4543 4544 musicDb.init(QStringLiteral("testDb")); 4545 4546 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 4547 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 4548 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 4549 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 4550 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 4551 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 4552 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 4553 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 4554 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 4555 4556 QCOMPARE(musicDb.allAlbumsData().count(), 0); 4557 QCOMPARE(musicDb.allArtistsData().count(), 0); 4558 QCOMPARE(musicDb.allTracksData().count(), 0); 4559 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 4560 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 4561 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 4562 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4563 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4564 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4565 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4566 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4567 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4568 4569 auto newTrack = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 4570 QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 4571 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/test{{test}}/$23"))}, 4572 QDateTime::fromMSecsSinceEpoch(23), 4573 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, 4574 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 4575 auto newTracks = DataTypes::ListTrackDataType(); 4576 newTracks.push_back(newTrack); 4577 4578 auto newCovers = mNewCovers; 4579 newCovers[QStringLiteral("/test{{test}}/$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 4580 4581 musicDb.insertTracksList(newTracks, newCovers); 4582 4583 musicDbTrackAddedSpy.wait(300); 4584 4585 QCOMPARE(musicDb.allAlbumsData().count(), 1); 4586 QCOMPARE(musicDb.allArtistsData().count(), 1); 4587 QCOMPARE(musicDb.allTracksData().count(), 1); 4588 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 4589 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 4590 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 4591 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4592 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4593 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4594 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4595 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4596 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4597 } 4598 4599 void readRecentlyPlayedTracksData() 4600 { 4601 DatabaseInterface musicDb; 4602 4603 musicDb.init(QStringLiteral("testDb")); 4604 4605 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 4606 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 4607 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 4608 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 4609 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 4610 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 4611 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 4612 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 4613 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 4614 4615 QCOMPARE(musicDb.allAlbumsData().count(), 0); 4616 QCOMPARE(musicDb.allArtistsData().count(), 0); 4617 QCOMPARE(musicDb.allTracksData().count(), 0); 4618 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 4619 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 4620 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 4621 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4622 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4623 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4624 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4625 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4626 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4627 4628 musicDb.insertTracksList(mNewTracks, mNewCovers); 4629 4630 musicDbTrackAddedSpy.wait(300); 4631 4632 QCOMPARE(musicDb.allAlbumsData().count(), 5); 4633 QCOMPARE(musicDb.allArtistsData().count(), 7); 4634 QCOMPARE(musicDb.allTracksData().count(), 22); 4635 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 4636 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 4637 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 4638 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4639 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4640 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4641 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4642 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4643 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4644 4645 musicDb.trackHasStartedPlaying(QUrl::fromLocalFile(QStringLiteral("/$9")), QDateTime::fromSecsSinceEpoch(1534689)); 4646 musicDb.trackHasStartedPlaying(QUrl::fromLocalFile(QStringLiteral("/$17")), QDateTime::fromSecsSinceEpoch(1534692)); 4647 musicDb.trackHasStartedPlaying(QUrl::fromLocalFile(QStringLiteral("/$16")), QDateTime::fromSecsSinceEpoch(1534759)); 4648 musicDb.trackHasStartedPlaying(QUrl::fromLocalFile(QStringLiteral("/$8")), QDateTime::fromSecsSinceEpoch(1534869)); 4649 musicDb.trackHasStartedPlaying(QUrl::fromLocalFile(QStringLiteral("/$2")), QDateTime::fromSecsSinceEpoch(1535189)); 4650 musicDb.trackHasStartedPlaying(QUrl::fromLocalFile(QStringLiteral("/$11")), QDateTime::fromSecsSinceEpoch(1535389)); 4651 musicDb.trackHasStartedPlaying(QUrl::fromLocalFile(QStringLiteral("/$18")), QDateTime::fromSecsSinceEpoch(1535689)); 4652 musicDb.trackHasStartedPlaying(QUrl::fromLocalFile(QStringLiteral("/$7")), QDateTime::fromSecsSinceEpoch(1536189)); 4653 musicDb.trackHasStartedPlaying(QUrl::fromLocalFile(QStringLiteral("/$5")), QDateTime::fromSecsSinceEpoch(1536689)); 4654 musicDb.trackHasStartedPlaying(QUrl::fromLocalFile(QStringLiteral("/$13")), QDateTime::fromSecsSinceEpoch(1537689)); 4655 4656 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$9")), QDateTime::fromSecsSinceEpoch(1534689)); 4657 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$17")), QDateTime::fromSecsSinceEpoch(1534692)); 4658 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$16")), QDateTime::fromSecsSinceEpoch(1534759)); 4659 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$8")), QDateTime::fromSecsSinceEpoch(1534869)); 4660 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$2")), QDateTime::fromSecsSinceEpoch(1535189)); 4661 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$11")), QDateTime::fromSecsSinceEpoch(1535389)); 4662 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$18")), QDateTime::fromSecsSinceEpoch(1535689)); 4663 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$7")), QDateTime::fromSecsSinceEpoch(1536189)); 4664 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$5")), QDateTime::fromSecsSinceEpoch(1536689)); 4665 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$13")), QDateTime::fromSecsSinceEpoch(1537689)); 4666 4667 QCOMPARE(musicDb.allAlbumsData().count(), 5); 4668 QCOMPARE(musicDb.allArtistsData().count(), 7); 4669 QCOMPARE(musicDb.allTracksData().count(), 22); 4670 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 4671 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 4672 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 4673 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4674 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4675 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4676 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4677 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4678 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4679 4680 auto recentlyPlayedTracksData = musicDb.recentlyPlayedTracksData(10); 4681 4682 QCOMPARE(recentlyPlayedTracksData.count(), 10); 4683 QCOMPARE(recentlyPlayedTracksData[0].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$13"))); 4684 QCOMPARE(recentlyPlayedTracksData[1].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$5"))); 4685 QCOMPARE(recentlyPlayedTracksData[2].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$7"))); 4686 QCOMPARE(recentlyPlayedTracksData[3].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$18"))); 4687 QCOMPARE(recentlyPlayedTracksData[4].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$11"))); 4688 QCOMPARE(recentlyPlayedTracksData[5].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$2"))); 4689 QCOMPARE(recentlyPlayedTracksData[6].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$8"))); 4690 QCOMPARE(recentlyPlayedTracksData[7].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$16"))); 4691 QCOMPARE(recentlyPlayedTracksData[8].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$17"))); 4692 QCOMPARE(recentlyPlayedTracksData[9].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$9"))); 4693 } 4694 4695 void readFrequentlyPlayedTracksData() 4696 { 4697 DatabaseInterface musicDb; 4698 4699 musicDb.init(QStringLiteral("testDb")); 4700 4701 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 4702 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 4703 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 4704 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 4705 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 4706 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 4707 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 4708 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 4709 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 4710 4711 QCOMPARE(musicDb.allAlbumsData().count(), 0); 4712 QCOMPARE(musicDb.allArtistsData().count(), 0); 4713 QCOMPARE(musicDb.allTracksData().count(), 0); 4714 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 4715 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 4716 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 4717 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4718 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4719 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4720 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4721 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4722 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4723 4724 musicDb.insertTracksList(mNewTracks, mNewCovers); 4725 4726 musicDbTrackAddedSpy.wait(300); 4727 4728 QCOMPARE(musicDb.allAlbumsData().count(), 5); 4729 QCOMPARE(musicDb.allArtistsData().count(), 7); 4730 QCOMPARE(musicDb.allTracksData().count(), 22); 4731 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 4732 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 4733 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 4734 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4735 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4736 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4737 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4738 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4739 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4740 4741 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$9")), QDateTime::fromSecsSinceEpoch(1553279650)); 4742 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$17")), QDateTime::fromSecsSinceEpoch(1553288650)); 4743 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$16")), QDateTime::fromSecsSinceEpoch(1553287650)); 4744 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$8")), QDateTime::fromSecsSinceEpoch(1553286650)); 4745 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$2")), QDateTime::fromSecsSinceEpoch(1553285650)); 4746 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$11")), QDateTime::fromSecsSinceEpoch(1553284650)); 4747 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$18")), QDateTime::fromSecsSinceEpoch(1553283650)); 4748 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$7")), QDateTime::fromSecsSinceEpoch(1553282650)); 4749 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$5")), QDateTime::fromSecsSinceEpoch(1553281650)); 4750 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$13")), QDateTime::fromSecsSinceEpoch(1553280650)); 4751 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$9")), QDateTime::fromSecsSinceEpoch(1553289660)); 4752 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$2")), QDateTime::fromSecsSinceEpoch(1553289680)); 4753 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$18")), QDateTime::fromSecsSinceEpoch(1553289700)); 4754 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$17")), QDateTime::fromSecsSinceEpoch(1553289720)); 4755 musicDb.trackHasFinishedPlaying(QUrl::fromLocalFile(QStringLiteral("/$7")), QDateTime::fromSecsSinceEpoch(1553289740)); 4756 4757 auto frequentlyPlayedTracksData = musicDb.frequentlyPlayedTracksData(5); 4758 4759 QCOMPARE(frequentlyPlayedTracksData.count(), 5); 4760 QCOMPARE(frequentlyPlayedTracksData[0].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$2"))); 4761 QCOMPARE(frequentlyPlayedTracksData[1].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$7"))); 4762 QCOMPARE(frequentlyPlayedTracksData[2].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$9"))); 4763 QCOMPARE(frequentlyPlayedTracksData[3].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$17"))); 4764 QCOMPARE(frequentlyPlayedTracksData[4].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/$18"))); 4765 } 4766 4767 void readAllGenresData() 4768 { 4769 DatabaseInterface musicDb; 4770 4771 musicDb.init(QStringLiteral("testDb")); 4772 4773 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 4774 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 4775 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 4776 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 4777 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 4778 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 4779 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 4780 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 4781 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 4782 4783 QCOMPARE(musicDb.allAlbumsData().count(), 0); 4784 QCOMPARE(musicDb.allArtistsData().count(), 0); 4785 QCOMPARE(musicDb.allTracksData().count(), 0); 4786 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 4787 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 4788 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 4789 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4790 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4791 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4792 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4793 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4794 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4795 4796 musicDb.insertTracksList(mNewTracks, mNewCovers); 4797 4798 musicDbTrackAddedSpy.wait(300); 4799 4800 QCOMPARE(musicDb.allAlbumsData().count(), 5); 4801 QCOMPARE(musicDb.allArtistsData().count(), 7); 4802 QCOMPARE(musicDb.allTracksData().count(), 22); 4803 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 4804 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 4805 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 4806 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4807 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4808 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4809 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4810 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4811 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4812 4813 auto allGenresData = musicDb.allGenresData(); 4814 4815 QCOMPARE(allGenresData.count(), 4); 4816 QCOMPARE(allGenresData[0].title(), QStringLiteral("genre1")); 4817 QCOMPARE(allGenresData[1].title(), QStringLiteral("genre2")); 4818 QCOMPARE(allGenresData[2].title(), QStringLiteral("genre3")); 4819 QCOMPARE(allGenresData[3].title(), QStringLiteral("genre4")); 4820 } 4821 4822 void clearDataTest() 4823 { 4824 DatabaseInterface musicDb; 4825 4826 musicDb.init(QStringLiteral("testDb")); 4827 4828 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 4829 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 4830 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 4831 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 4832 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 4833 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 4834 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 4835 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 4836 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 4837 QSignalSpy musicDbCleanedDatabaseSpy(&musicDb, &DatabaseInterface::cleanedDatabase); 4838 4839 QCOMPARE(musicDb.allAlbumsData().count(), 0); 4840 QCOMPARE(musicDb.allArtistsData().count(), 0); 4841 QCOMPARE(musicDb.allTracksData().count(), 0); 4842 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 4843 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 4844 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 4845 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4846 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4847 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4848 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4849 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4850 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4851 QCOMPARE(musicDbCleanedDatabaseSpy.count(), 0); 4852 4853 musicDb.insertTracksList(mNewTracks, mNewCovers); 4854 4855 musicDbTrackAddedSpy.wait(300); 4856 4857 QCOMPARE(musicDb.allAlbumsData().count(), 5); 4858 QCOMPARE(musicDb.allArtistsData().count(), 7); 4859 QCOMPARE(musicDb.allTracksData().count(), 22); 4860 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 4861 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 4862 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 4863 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4864 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4865 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4866 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4867 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4868 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4869 QCOMPARE(musicDbCleanedDatabaseSpy.count(), 0); 4870 4871 musicDb.clearData(); 4872 4873 QCOMPARE(musicDb.allAlbumsData().count(), 0); 4874 QCOMPARE(musicDb.allArtistsData().count(), 0); 4875 QCOMPARE(musicDb.allTracksData().count(), 0); 4876 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 4877 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 4878 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 4879 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4880 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4881 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4882 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4883 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4884 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4885 QCOMPARE(musicDbCleanedDatabaseSpy.count(), 1); 4886 } 4887 4888 void upgradeFromStableVersion() 4889 { 4890 auto dbTestFile = QString{QStringLiteral(LOCAL_FILE_TESTS_WORKING_PATH) + QStringLiteral("/elisaDatabase.v0.3.db")}; 4891 auto dbOriginFile = QString{QStringLiteral(LOCAL_FILE_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/elisaDatabase.v0.3.db")}; 4892 QVERIFY(QDir().mkpath(QStringLiteral(LOCAL_FILE_TESTS_WORKING_PATH))); 4893 QFile::remove(dbTestFile); 4894 QFile::copy(dbOriginFile, dbTestFile); 4895 4896 DatabaseInterface musicDb; 4897 4898 musicDb.init(QStringLiteral("testDb"), dbTestFile); 4899 4900 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 4901 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 4902 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 4903 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 4904 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 4905 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 4906 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 4907 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 4908 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 4909 4910 QCOMPARE(musicDb.allAlbumsData().count(), 5); 4911 QCOMPARE(musicDb.allArtistsData().count(), 7); 4912 QCOMPARE(musicDb.allTracksData().count(), 22); 4913 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 4914 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 4915 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 4916 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4917 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4918 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4919 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4920 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4921 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4922 } 4923 4924 void addMultipleDifferentTracksWithSameTitle() 4925 { 4926 QTemporaryFile databaseFile; 4927 databaseFile.open(); 4928 4929 qDebug() << "addMultipleDifferentTracksWithSameTitle" << databaseFile.fileName(); 4930 4931 DatabaseInterface musicDb; 4932 4933 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 4934 4935 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 4936 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 4937 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 4938 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 4939 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 4940 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 4941 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 4942 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 4943 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 4944 4945 QCOMPARE(musicDb.allAlbumsData().count(), 0); 4946 QCOMPARE(musicDb.allArtistsData().count(), 0); 4947 QCOMPARE(musicDb.allTracksData().count(), 0); 4948 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 4949 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 4950 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 4951 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4952 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4953 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4954 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4955 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4956 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4957 4958 auto newTracks = DataTypes::ListTrackDataType{ 4959 {true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 4960 QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 4961 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/test/$23"))}, 4962 QDateTime::fromMSecsSinceEpoch(23), 4963 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, 4964 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, 4965 {true, QStringLiteral("$24"), QStringLiteral("0"), QStringLiteral("track6"), 4966 QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 4967 7, 1, QTime::fromMSecsSinceStartOfDay(24), {QUrl::fromLocalFile(QStringLiteral("/test/$24"))}, 4968 QDateTime::fromMSecsSinceEpoch(24), 4969 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, 4970 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, 4971 {true, QStringLiteral("$25"), QStringLiteral("0"), QStringLiteral("track6"), 4972 QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 4973 8, 1, QTime::fromMSecsSinceStartOfDay(25), {QUrl::fromLocalFile(QStringLiteral("/test/$25"))}, 4974 QDateTime::fromMSecsSinceEpoch(25), 4975 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, 4976 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}}; 4977 4978 auto newCovers = mNewCovers; 4979 newCovers[QStringLiteral("/test/$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 4980 newCovers[QStringLiteral("/test/$24")] = QUrl::fromLocalFile(QStringLiteral("album3")); 4981 newCovers[QStringLiteral("/test/$25")] = QUrl::fromLocalFile(QStringLiteral("album3")); 4982 4983 musicDb.insertTracksList(newTracks, newCovers); 4984 4985 musicDbTrackAddedSpy.wait(300); 4986 4987 QCOMPARE(musicDb.allAlbumsData().count(), 1); 4988 QCOMPARE(musicDb.allArtistsData().count(), 1); 4989 QCOMPARE(musicDb.allTracksData().count(), 3); 4990 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 4991 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 4992 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 4993 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 4994 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 4995 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 4996 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 4997 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 4998 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 4999 } 5000 5001 void enqueueTracksWithMissingMetadata() 5002 { 5003 QTemporaryFile databaseFile; 5004 databaseFile.open(); 5005 5006 qDebug() << "enqueueTracksWithMissingMetadata" << databaseFile.fileName(); 5007 5008 DatabaseInterface musicDb; 5009 5010 musicDb.init(QStringLiteral("enqueueTracksWithMissingMetadata"), databaseFile.fileName()); 5011 5012 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 5013 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 5014 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 5015 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 5016 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 5017 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 5018 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 5019 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 5020 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 5021 5022 QCOMPARE(musicDb.allAlbumsData().count(), 0); 5023 QCOMPARE(musicDb.allArtistsData().count(), 0); 5024 QCOMPARE(musicDb.allTracksData().count(), 0); 5025 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 5026 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 5027 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 5028 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 5029 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 5030 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 5031 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 5032 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 5033 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 5034 5035 auto fullTrack = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 5036 QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 5037 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/test/$23"))}, 5038 QDateTime::fromMSecsSinceEpoch(23), 5039 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, 5040 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; 5041 5042 fullTrack[DataTypes::BitRateRole] = 154; 5043 fullTrack[DataTypes::ChannelsRole] = 2; 5044 fullTrack[DataTypes::SampleRateRole] = 48000; 5045 5046 auto newTrack = DataTypes::TrackDataType{}; 5047 5048 newTrack[DataTypes::IdRole] = QStringLiteral("$29"); 5049 newTrack[DataTypes::ParentIdRole] = QStringLiteral("0"); 5050 newTrack[DataTypes::TitleRole] = QStringLiteral("track19"); 5051 newTrack[DataTypes::ArtistRole] = QStringLiteral("artist2"); 5052 newTrack[DataTypes::DurationRole] = QTime::fromMSecsSinceStartOfDay(29); 5053 newTrack[DataTypes::ResourceRole] = QUrl::fromLocalFile(QStringLiteral("/$29")); 5054 newTrack[DataTypes::FileModificationTime] = QDateTime::fromMSecsSinceEpoch(29); 5055 newTrack[DataTypes::ImageUrlRole] = QUrl::fromLocalFile(QStringLiteral("/withoutAlbum")); 5056 newTrack[DataTypes::RatingRole] = 9; 5057 newTrack[DataTypes::IsSingleDiscAlbumRole] = true; 5058 newTrack[DataTypes::GenreRole] = QStringLiteral("genre1"); 5059 newTrack[DataTypes::ComposerRole] = QStringLiteral("composer1"); 5060 newTrack[DataTypes::LyricistRole] = QStringLiteral("lyricist1"); 5061 newTrack[DataTypes::HasEmbeddedCover] = false; 5062 newTrack[DataTypes::ElementTypeRole] = ElisaUtils::Track; 5063 5064 auto temp = {fullTrack, newTrack}; 5065 musicDb.insertTracksList(temp, mNewCovers); 5066 5067 QCOMPARE(musicDb.allAlbumsData().count(), 1); 5068 QCOMPARE(musicDb.allArtistsData().count(), 1); 5069 QCOMPARE(musicDb.allTracksData().count(), 2); 5070 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 5071 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 5072 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 5073 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 5074 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 5075 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 5076 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 5077 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 5078 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 5079 5080 auto firstTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist2"), 5081 QStringLiteral("album3"), 6, 1); 5082 auto firstTrack = musicDb.trackDataFromDatabaseId(firstTrackId); 5083 5084 auto firstTrackTitle = firstTrack.title(); 5085 auto firstTrackArtist = firstTrack.artist(); 5086 auto firstTrackAlbumArtist = firstTrack.albumArtist(); 5087 auto firstTrackAlbum = firstTrack.album(); 5088 auto firstTrackImage = firstTrack.albumCover(); 5089 auto firstTrackDuration = firstTrack.duration(); 5090 auto firstTrackMilliSecondsDuration = firstTrack.duration().msecsSinceStartOfDay(); 5091 auto firstTrackTrackNumber = firstTrack.trackNumber(); 5092 auto firstTrackDiscNumber = firstTrack.discNumber(); 5093 const auto &firstTrackResource = firstTrack.resourceURI(); 5094 auto firstTrackRating = firstTrack.rating(); 5095 auto firstIsSingleDiscAlbum = firstTrack.isSingleDiscAlbum(); 5096 5097 QCOMPARE(firstTrack.isValid(), true); 5098 QCOMPARE(firstTrackTitle, QStringLiteral("track6")); 5099 QCOMPARE(firstTrackArtist, QStringLiteral("artist2")); 5100 QCOMPARE(firstTrackAlbumArtist, QStringLiteral("artist2")); 5101 QCOMPARE(firstTrackAlbum, QStringLiteral("album3")); 5102 QCOMPARE(firstTrackImage.isValid(), true); 5103 QCOMPARE(firstTrackImage, QUrl::fromLocalFile(QStringLiteral("album3"))); 5104 QCOMPARE(firstTrackDuration, QTime::fromMSecsSinceStartOfDay(23)); 5105 QCOMPARE(firstTrackMilliSecondsDuration, 23); 5106 QCOMPARE(firstTrackTrackNumber, 6); 5107 QCOMPARE(firstTrackDiscNumber, 1); 5108 QCOMPARE(firstTrackResource.isValid(), true); 5109 QCOMPARE(firstTrackResource, QUrl::fromLocalFile(QStringLiteral("/test/$23"))); 5110 QCOMPARE(firstTrackRating, 5); 5111 QCOMPARE(firstIsSingleDiscAlbum, true); 5112 5113 auto secondTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track19"), QStringLiteral("artist2"), {}, {}, {}); 5114 auto secondTrack = musicDb.trackDataFromDatabaseId(secondTrackId); 5115 5116 auto secondTrackTitle = secondTrack.title(); 5117 auto secondTrackArtist = secondTrack.artist(); 5118 auto secondTrackAlbumArtist = secondTrack.albumArtist(); 5119 auto secondTrackAlbum = secondTrack.album(); 5120 auto secondTrackImage = secondTrack.albumCover(); 5121 auto secondTrackDuration = secondTrack.duration(); 5122 auto secondTrackMilliSecondsDuration = secondTrack.duration().msecsSinceStartOfDay(); 5123 auto secondTrackTrackNumber = secondTrack.trackNumber(); 5124 auto secondTrackDiscNumber = secondTrack.discNumber(); 5125 auto secondTrackChannels = secondTrack.channels(); 5126 auto secondTrackBitRate = secondTrack.bitRate(); 5127 auto secondTrackSampleRate = secondTrack.sampleRate(); 5128 const auto &secondTrackResource = secondTrack.resourceURI(); 5129 auto secondTrackRating = secondTrack.rating(); 5130 auto secondIsSingleDiscAlbum = secondTrack.isSingleDiscAlbum(); 5131 5132 QCOMPARE(secondTrack.isValid(), true); 5133 QCOMPARE(secondTrackTitle, QStringLiteral("track19")); 5134 QCOMPARE(secondTrackArtist, QStringLiteral("artist2")); 5135 QCOMPARE(secondTrackAlbumArtist, QString()); 5136 QCOMPARE(secondTrackAlbum, QString()); 5137 QCOMPARE(secondTrackImage.isValid(), false); 5138 QCOMPARE(secondTrackDuration, QTime::fromMSecsSinceStartOfDay(29)); 5139 QCOMPARE(secondTrackMilliSecondsDuration, 29); 5140 QCOMPARE(secondTrackTrackNumber, 0); 5141 QCOMPARE(secondTrackDiscNumber, 0); 5142 QCOMPARE(secondTrackChannels, 0); 5143 QCOMPARE(secondTrackBitRate, 0); 5144 QCOMPARE(secondTrackSampleRate, 0); 5145 QCOMPARE(secondTrackResource.isValid(), true); 5146 QCOMPARE(secondTrackResource, QUrl::fromLocalFile(QStringLiteral("/$29"))); 5147 QCOMPARE(secondTrackRating, 9); 5148 QCOMPARE(secondIsSingleDiscAlbum, true); 5149 } 5150 5151 void testCompilationWithoutAlbumArtist() 5152 { 5153 QTemporaryFile databaseFile; 5154 databaseFile.open(); 5155 5156 qDebug() << "testCompilationWithoutAlbumArtist" << databaseFile.fileName(); 5157 5158 DatabaseInterface musicDb; 5159 5160 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 5161 5162 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 5163 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 5164 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 5165 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 5166 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 5167 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 5168 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 5169 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 5170 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 5171 5172 QCOMPARE(musicDb.allAlbumsData().count(), 0); 5173 QCOMPARE(musicDb.allArtistsData().count(), 0); 5174 QCOMPARE(musicDb.allTracksData().count(), 0); 5175 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 5176 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 5177 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 5178 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 5179 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 5180 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 5181 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 5182 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 5183 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 5184 5185 auto newTracks = DataTypes::ListTrackDataType{ 5186 {true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 5187 QStringLiteral("artist2"), QStringLiteral("album3"), {}, 5188 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/test/$23"))}, 5189 QDateTime::fromMSecsSinceEpoch(23), 5190 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, 5191 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, 5192 {true, QStringLiteral("$24"), QStringLiteral("0"), QStringLiteral("track7"), 5193 QStringLiteral("artist3"), QStringLiteral("album3"), {}, 5194 7, 1, QTime::fromMSecsSinceStartOfDay(24), {QUrl::fromLocalFile(QStringLiteral("/test/$24"))}, 5195 QDateTime::fromMSecsSinceEpoch(24), 5196 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, 5197 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, 5198 {true, QStringLiteral("$25"), QStringLiteral("0"), QStringLiteral("track8"), 5199 QStringLiteral("artist4"), QStringLiteral("album3"), {}, 5200 8, 1, QTime::fromMSecsSinceStartOfDay(25), {QUrl::fromLocalFile(QStringLiteral("/test/$25"))}, 5201 QDateTime::fromMSecsSinceEpoch(25), 5202 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, 5203 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}}; 5204 5205 auto newCovers = mNewCovers; 5206 newCovers[QStringLiteral("/test/$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 5207 newCovers[QStringLiteral("/test/$24")] = QUrl::fromLocalFile(QStringLiteral("album3")); 5208 newCovers[QStringLiteral("/test/$25")] = QUrl::fromLocalFile(QStringLiteral("album3")); 5209 5210 musicDb.insertTracksList(newTracks, newCovers); 5211 5212 musicDbTrackAddedSpy.wait(300); 5213 5214 QCOMPARE(musicDb.allAlbumsData().count(), 1); 5215 QCOMPARE(musicDb.allArtistsData().count(), 3); 5216 QCOMPARE(musicDb.allTracksData().count(), 3); 5217 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 5218 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 5219 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 5220 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 5221 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 5222 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 5223 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 5224 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 5225 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 5226 5227 const auto newAlbumSignal = musicDbAlbumAddedSpy.at(0); 5228 QCOMPARE(newAlbumSignal.size(), 1); 5229 const auto newAlbums = newAlbumSignal.at(0).value<DataTypes::ListAlbumDataType>(); 5230 QCOMPARE(newAlbums.size(), 1); 5231 const auto newAlbum = newAlbums.at(0); 5232 QCOMPARE(newAlbum.title(), QStringLiteral("album3")); 5233 QCOMPARE(newAlbum.artist(), QStringLiteral("Various Artists")); 5234 QCOMPARE(newAlbum[DataTypes::ColumnsRoles::SecondaryTextRole], QStringLiteral("Various Artists")); 5235 5236 const auto oneAlbum = musicDb.allAlbumsData().at(0); 5237 QCOMPARE(oneAlbum.title(), QStringLiteral("album3")); 5238 QCOMPARE(oneAlbum.artist(), QStringLiteral("Various Artists")); 5239 QCOMPARE(oneAlbum[DataTypes::ColumnsRoles::SecondaryTextRole], QStringLiteral("Various Artists")); 5240 } 5241 5242 void testAlbumFromGenreAndArtistWithoutAlbumArtist() 5243 { 5244 QTemporaryFile databaseFile; 5245 databaseFile.open(); 5246 5247 qDebug() << "testAlbumFromGenreAndArtistWithoutAlbumArtist" << databaseFile.fileName(); 5248 5249 DatabaseInterface musicDb; 5250 5251 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 5252 5253 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 5254 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 5255 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 5256 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 5257 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 5258 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 5259 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 5260 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 5261 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 5262 5263 QCOMPARE(musicDb.allAlbumsData().count(), 0); 5264 QCOMPARE(musicDb.allArtistsData().count(), 0); 5265 QCOMPARE(musicDb.allTracksData().count(), 0); 5266 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 5267 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 5268 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 5269 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 5270 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 5271 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 5272 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 5273 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 5274 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 5275 5276 auto newTracks = DataTypes::ListTrackDataType{ 5277 {true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 5278 QStringLiteral("artist2"), QStringLiteral("album3"), {}, 5279 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/test/$23"))}, 5280 QDateTime::fromMSecsSinceEpoch(23), 5281 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, 5282 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}}; 5283 5284 auto newCovers = mNewCovers; 5285 newCovers[QStringLiteral("/test/$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 5286 newCovers[QStringLiteral("/test/$24")] = QUrl::fromLocalFile(QStringLiteral("album3")); 5287 newCovers[QStringLiteral("/test/$25")] = QUrl::fromLocalFile(QStringLiteral("album3")); 5288 5289 musicDb.insertTracksList(newTracks, newCovers); 5290 5291 musicDbTrackAddedSpy.wait(300); 5292 5293 QCOMPARE(musicDb.allAlbumsData().count(), 1); 5294 QCOMPARE(musicDb.allArtistsData().count(), 1); 5295 QCOMPARE(musicDb.allTracksData().count(), 1); 5296 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 5297 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 5298 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 5299 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 5300 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 5301 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 5302 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 5303 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 5304 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 5305 5306 auto albumFromGenreAndArtist = musicDb.allAlbumsDataByGenreAndArtist(QStringLiteral("genre1"), QStringLiteral("artist2")); 5307 5308 QCOMPARE(albumFromGenreAndArtist.size(), 1); 5309 } 5310 5311 void testTracksWithoutMetadata() 5312 { 5313 QTemporaryFile databaseFile; 5314 databaseFile.open(); 5315 5316 qDebug() << "testTracksWithoutMetadata" << databaseFile.fileName(); 5317 5318 DatabaseInterface musicDb; 5319 5320 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 5321 5322 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 5323 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 5324 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 5325 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 5326 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 5327 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 5328 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 5329 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 5330 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 5331 5332 QCOMPARE(musicDb.allAlbumsData().count(), 0); 5333 QCOMPARE(musicDb.allArtistsData().count(), 0); 5334 QCOMPARE(musicDb.allTracksData().count(), 0); 5335 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 5336 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 5337 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 5338 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 5339 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 5340 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 5341 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 5342 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 5343 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 5344 5345 auto newTracks = DataTypes::ListTrackDataType { 5346 {true, {}, {}, {}, {}, {}, {}, 0, 0, {}, {QUrl::fromLocalFile(QStringLiteral("/test/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {}, 0, true, {}, {}, {}, false}, 5347 {true, {}, {}, {}, {}, {}, {}, 0, 0, {}, {QUrl::fromLocalFile(QStringLiteral("/test/$24"))}, QDateTime::fromMSecsSinceEpoch(24), {}, 0, true, {}, {}, {}, false}, 5348 {true, {}, {}, {}, {}, {}, {}, 0, 0, {}, {QUrl::fromLocalFile(QStringLiteral("/test/$25"))}, QDateTime::fromMSecsSinceEpoch(25), {}, 0, true, {}, {}, {}, false}}; 5349 5350 auto newCovers = mNewCovers; 5351 5352 musicDb.insertTracksList(newTracks, newCovers); 5353 5354 musicDbTrackAddedSpy.wait(300); 5355 5356 QCOMPARE(musicDb.allAlbumsData().count(), 0); 5357 QCOMPARE(musicDb.allArtistsData().count(), 0); 5358 QCOMPARE(musicDb.allTracksData().count(), 3); 5359 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 5360 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 5361 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 5362 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 5363 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 5364 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 5365 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 5366 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 5367 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 5368 5369 auto allTracks = musicDb.allTracksData(); 5370 QVERIFY(allTracks[0].title().isEmpty()); 5371 QCOMPARE(allTracks[0].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/test/$23"))); 5372 QCOMPARE(allTracks[0].fileModificationTime(), QDateTime::fromMSecsSinceEpoch(23)); 5373 QVERIFY(allTracks[1].title().isEmpty()); 5374 QCOMPARE(allTracks[1].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/test/$24"))); 5375 QCOMPARE(allTracks[1].fileModificationTime(), QDateTime::fromMSecsSinceEpoch(24)); 5376 QVERIFY(allTracks[2].title().isEmpty()); 5377 QCOMPARE(allTracks[2].resourceURI(), QUrl::fromLocalFile(QStringLiteral("/test/$25"))); 5378 QCOMPARE(allTracks[2].fileModificationTime(), QDateTime::fromMSecsSinceEpoch(25)); 5379 } 5380 5381 void removeTrackNumber() 5382 { 5383 QTemporaryFile databaseFile; 5384 databaseFile.open(); 5385 5386 qDebug() << "removeTrackNumber" << databaseFile.fileName(); 5387 5388 DatabaseInterface musicDb; 5389 5390 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 5391 QSignalSpy musicDbErrorSpy(&musicDb, &DatabaseInterface::databaseError); 5392 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 5393 5394 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 5395 5396 musicDb.insertTracksList(mNewTracks, mNewCovers); 5397 5398 musicDbTrackAddedSpy.wait(300); 5399 5400 QCOMPARE(musicDb.allAlbumsData().count(), 5); 5401 QCOMPARE(musicDbErrorSpy.count(), 0); 5402 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 5403 5404 auto newTracks = DataTypes::ListTrackDataType{ 5405 {true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 5406 QStringLiteral("artist2"), QStringLiteral("album3"), {}, 5407 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/test/$23"))}, 5408 QDateTime::fromMSecsSinceEpoch(23), 5409 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, 5410 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}}; 5411 5412 auto newCovers = mNewCovers; 5413 newCovers[QStringLiteral("/test/$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 5414 newCovers[QStringLiteral("/test/$24")] = QUrl::fromLocalFile(QStringLiteral("album3")); 5415 newCovers[QStringLiteral("/test/$25")] = QUrl::fromLocalFile(QStringLiteral("album3")); 5416 5417 musicDb.insertTracksList(newTracks, newCovers); 5418 5419 QCOMPARE(musicDb.allAlbumsData().count(), 6); 5420 QCOMPARE(musicDbErrorSpy.count(), 0); 5421 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 5422 5423 auto trackIdFirstVersion = musicDb.trackIdFromFileName(QUrl::fromLocalFile(QStringLiteral("/test/$23"))); 5424 auto firstTrackDataVersion = musicDb.trackDataFromDatabaseId(trackIdFirstVersion); 5425 5426 auto newTrackData = firstTrackDataVersion; 5427 newTrackData.remove(DataTypes::TrackNumberRole); 5428 5429 musicDb.insertTracksList({newTrackData}, newCovers); 5430 5431 QCOMPARE(musicDb.allAlbumsData().count(), 6); 5432 QCOMPARE(musicDbErrorSpy.count(), 0); 5433 QCOMPARE(musicDbTrackModifiedSpy.count(), 1); 5434 5435 auto trackIdSecondVersion = musicDb.trackIdFromFileName(QUrl::fromLocalFile(QStringLiteral("/test/$23"))); 5436 QCOMPARE(trackIdFirstVersion, trackIdSecondVersion); 5437 5438 auto secondTrackDataVersion = musicDb.trackDataFromDatabaseId(trackIdSecondVersion); 5439 5440 auto modifiedTrack = musicDbTrackModifiedSpy.at(0).at(0).value<DataTypes::TrackDataType>(); 5441 5442 auto trackIdIterator = secondTrackDataVersion.find(DataTypes::TrackNumberRole); 5443 QCOMPARE(trackIdIterator, secondTrackDataVersion.end()); 5444 5445 QCOMPARE(secondTrackDataVersion, modifiedTrack); 5446 } 5447 5448 void removeDiscNumber() 5449 { 5450 QTemporaryFile databaseFile; 5451 databaseFile.open(); 5452 5453 qDebug() << "removeTrackNumber" << databaseFile.fileName(); 5454 5455 DatabaseInterface musicDb; 5456 5457 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 5458 QSignalSpy musicDbErrorSpy(&musicDb, &DatabaseInterface::databaseError); 5459 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 5460 5461 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 5462 5463 musicDb.insertTracksList(mNewTracks, mNewCovers); 5464 5465 musicDbTrackAddedSpy.wait(300); 5466 5467 QCOMPARE(musicDb.allAlbumsData().count(), 5); 5468 QCOMPARE(musicDbErrorSpy.count(), 0); 5469 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 5470 5471 auto newTracks = DataTypes::ListTrackDataType{ 5472 {true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 5473 QStringLiteral("artist2"), QStringLiteral("album3"), {}, 5474 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/test/$23"))}, 5475 QDateTime::fromMSecsSinceEpoch(23), 5476 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, 5477 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}}; 5478 5479 auto newCovers = mNewCovers; 5480 newCovers[QStringLiteral("/test/$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 5481 newCovers[QStringLiteral("/test/$24")] = QUrl::fromLocalFile(QStringLiteral("album3")); 5482 newCovers[QStringLiteral("/test/$25")] = QUrl::fromLocalFile(QStringLiteral("album3")); 5483 5484 musicDb.insertTracksList(newTracks, newCovers); 5485 5486 QCOMPARE(musicDb.allAlbumsData().count(), 6); 5487 QCOMPARE(musicDbErrorSpy.count(), 0); 5488 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 5489 5490 auto trackIdFirstVersion = musicDb.trackIdFromFileName(QUrl::fromLocalFile(QStringLiteral("/test/$23"))); 5491 auto firstTrackDataVersion = musicDb.trackDataFromDatabaseId(trackIdFirstVersion); 5492 5493 auto newTrackData = firstTrackDataVersion; 5494 newTrackData.remove(DataTypes::DiscNumberRole); 5495 5496 musicDb.insertTracksList({newTrackData}, newCovers); 5497 5498 QCOMPARE(musicDb.allAlbumsData().count(), 6); 5499 QCOMPARE(musicDbErrorSpy.count(), 0); 5500 QCOMPARE(musicDbTrackModifiedSpy.count(), 1); 5501 5502 auto trackIdSecondVersion = musicDb.trackIdFromFileName(QUrl::fromLocalFile(QStringLiteral("/test/$23"))); 5503 QCOMPARE(trackIdFirstVersion, trackIdSecondVersion); 5504 5505 auto secondTrackDataVersion = musicDb.trackDataFromDatabaseId(trackIdSecondVersion); 5506 5507 auto modifiedTrack = musicDbTrackModifiedSpy.at(0).at(0).value<DataTypes::TrackDataType>(); 5508 5509 auto trackIdIterator = secondTrackDataVersion.find(DataTypes::DiscNumberRole); 5510 QCOMPARE(trackIdIterator, secondTrackDataVersion.end()); 5511 5512 QCOMPARE(secondTrackDataVersion, modifiedTrack); 5513 5514 qDebug() << trackIdFirstVersion << secondTrackDataVersion; 5515 } 5516 5517 void removeYear() 5518 { 5519 QTemporaryFile databaseFile; 5520 databaseFile.open(); 5521 5522 qDebug() << "removeYear" << databaseFile.fileName(); 5523 5524 DatabaseInterface musicDb; 5525 5526 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 5527 QSignalSpy musicDbErrorSpy(&musicDb, &DatabaseInterface::databaseError); 5528 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 5529 5530 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 5531 5532 musicDb.insertTracksList(mNewTracks, mNewCovers); 5533 5534 musicDbTrackAddedSpy.wait(300); 5535 5536 QCOMPARE(musicDb.allAlbumsData().count(), 5); 5537 QCOMPARE(musicDbErrorSpy.count(), 0); 5538 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 5539 5540 auto newTracks = DataTypes::ListTrackDataType{ 5541 {true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 5542 QStringLiteral("artist2"), QStringLiteral("album3"), {}, 5543 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/test/$23"))}, 5544 QDateTime::fromMSecsSinceEpoch(23), 5545 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, 5546 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}}; 5547 5548 newTracks.last()[DataTypes::YearRole] = 2020; 5549 5550 auto newCovers = mNewCovers; 5551 newCovers[QStringLiteral("/test/$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); 5552 newCovers[QStringLiteral("/test/$24")] = QUrl::fromLocalFile(QStringLiteral("album3")); 5553 newCovers[QStringLiteral("/test/$25")] = QUrl::fromLocalFile(QStringLiteral("album3")); 5554 5555 musicDb.insertTracksList(newTracks, newCovers); 5556 5557 QCOMPARE(musicDb.allAlbumsData().count(), 6); 5558 QCOMPARE(musicDbErrorSpy.count(), 0); 5559 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 5560 5561 auto trackIdFirstVersion = musicDb.trackIdFromFileName(QUrl::fromLocalFile(QStringLiteral("/test/$23"))); 5562 auto firstTrackDataVersion = musicDb.trackDataFromDatabaseId(trackIdFirstVersion); 5563 5564 auto newTrackData = firstTrackDataVersion; 5565 newTrackData.remove(DataTypes::YearRole); 5566 5567 musicDb.insertTracksList({newTrackData}, newCovers); 5568 5569 QCOMPARE(musicDb.allAlbumsData().count(), 6); 5570 QCOMPARE(musicDbErrorSpy.count(), 0); 5571 QCOMPARE(musicDbTrackModifiedSpy.count(), 1); 5572 5573 auto trackIdSecondVersion = musicDb.trackIdFromFileName(QUrl::fromLocalFile(QStringLiteral("/test/$23"))); 5574 QCOMPARE(trackIdFirstVersion, trackIdSecondVersion); 5575 5576 auto secondTrackDataVersion = musicDb.trackDataFromDatabaseId(trackIdSecondVersion); 5577 5578 auto modifiedTrack = musicDbTrackModifiedSpy.at(0).at(0).value<DataTypes::TrackDataType>(); 5579 5580 auto trackIdIterator = secondTrackDataVersion.find(DataTypes::YearRole); 5581 QCOMPARE(trackIdIterator, secondTrackDataVersion.end()); 5582 5583 QCOMPARE(secondTrackDataVersion, modifiedTrack); 5584 } 5585 5586 void modifyOneTrackWithEmbeddedCover() 5587 { 5588 QTemporaryFile databaseFile; 5589 databaseFile.open(); 5590 5591 qDebug() << "modifyOneTrack" << databaseFile.fileName(); 5592 5593 DatabaseInterface musicDb; 5594 5595 musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); 5596 5597 QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); 5598 QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); 5599 QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); 5600 QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); 5601 QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); 5602 QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); 5603 QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); 5604 QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); 5605 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 5606 5607 QCOMPARE(musicDb.allAlbumsData().count(), 0); 5608 QCOMPARE(musicDb.allArtistsData().count(), 0); 5609 QCOMPARE(musicDb.allTracksData().count(), 0); 5610 QCOMPARE(musicDbArtistAddedSpy.count(), 0); 5611 QCOMPARE(musicDbAlbumAddedSpy.count(), 0); 5612 QCOMPARE(musicDbTrackAddedSpy.count(), 0); 5613 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 5614 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 5615 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 5616 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 5617 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 5618 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 5619 5620 auto fullTrack = DataTypes::TrackDataType{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), 5621 QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 5622 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/test/$23"))}, 5623 QDateTime::fromMSecsSinceEpoch(23), {}, 5, true, 5624 QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}; 5625 5626 fullTrack[DataTypes::BitRateRole] = 154; 5627 fullTrack[DataTypes::ChannelsRole] = 2; 5628 fullTrack[DataTypes::SampleRateRole] = 48000; 5629 5630 musicDb.insertTracksList({fullTrack}, {}); 5631 5632 musicDbTrackAddedSpy.wait(300); 5633 5634 QCOMPARE(musicDb.allAlbumsData().count(), 1); 5635 QCOMPARE(musicDb.allArtistsData().count(), 1); 5636 QCOMPARE(musicDb.allTracksData().count(), 1); 5637 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 5638 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 5639 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 5640 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 5641 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 5642 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 5643 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 5644 QCOMPARE(musicDbTrackModifiedSpy.count(), 0); 5645 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 5646 5647 auto trackIdFirstVersion = musicDb.trackIdFromFileName(QUrl::fromLocalFile(QStringLiteral("/test/$23"))); 5648 auto firstTrackDataVersion = musicDb.trackDataFromDatabaseId(trackIdFirstVersion); 5649 5650 QVERIFY(firstTrackDataVersion.hasEmbeddedCover()); 5651 QCOMPARE(firstTrackDataVersion[DataTypes::ImageUrlRole].toString(), QStringLiteral("image://cover//test/$23")); 5652 5653 firstTrackDataVersion[DataTypes::TrackNumberRole] = 12; 5654 firstTrackDataVersion[DataTypes::FileModificationTime] = QDateTime::fromMSecsSinceEpoch(32); 5655 5656 musicDb.insertTracksList({firstTrackDataVersion}, {}); 5657 5658 musicDbTrackAddedSpy.wait(300); 5659 5660 QCOMPARE(musicDb.allAlbumsData().count(), 1); 5661 QCOMPARE(musicDb.allArtistsData().count(), 1); 5662 QCOMPARE(musicDb.allTracksData().count(), 1); 5663 QCOMPARE(musicDbArtistAddedSpy.count(), 1); 5664 QCOMPARE(musicDbAlbumAddedSpy.count(), 1); 5665 QCOMPARE(musicDbTrackAddedSpy.count(), 1); 5666 QCOMPARE(musicDbArtistRemovedSpy.count(), 0); 5667 QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); 5668 QCOMPARE(musicDbTrackRemovedSpy.count(), 0); 5669 QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); 5670 QCOMPARE(musicDbTrackModifiedSpy.count(), 1); 5671 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 5672 5673 auto modifiedTrackIdFirstVersion = musicDb.trackIdFromFileName(QUrl::fromLocalFile(QStringLiteral("/test/$23"))); 5674 auto modifiedTrackDataVersion = musicDb.trackDataFromDatabaseId(modifiedTrackIdFirstVersion); 5675 5676 QVERIFY(modifiedTrackDataVersion.hasEmbeddedCover()); 5677 QCOMPARE(modifiedTrackDataVersion[DataTypes::ImageUrlRole].toString(), QStringLiteral("image://cover//test/$23")); 5678 5679 auto modifiedTrack = musicDbTrackModifiedSpy.at(0).at(0).value<DataTypes::TrackDataType>(); 5680 5681 QVERIFY(modifiedTrack.hasEmbeddedCover()); 5682 QCOMPARE(modifiedTrack[DataTypes::ImageUrlRole].toString(), QStringLiteral("image://cover//test/$23")); 5683 } 5684 5685 void testInvalidDatabase() 5686 { 5687 const auto dbName = QStringLiteral("testDb"); 5688 QString databaseFileName; 5689 5690 { 5691 // NOTE: a QTemporaryFile cannot be deleted but `resetDatabase()` attempts to delete the database file, 5692 // hence why we use a QFile in this test. Remember to delete the file when the test has finished! 5693 QTemporaryFile tempFile; 5694 tempFile.open(); 5695 databaseFileName = tempFile.fileName(); 5696 tempFile.setAutoRemove(false); 5697 } 5698 5699 QFile databaseFile(databaseFileName); 5700 5701 // Make a valid database 5702 { 5703 DatabaseInterface musicDb; 5704 5705 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 5706 5707 musicDb.init(dbName, databaseFileName); 5708 5709 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 5710 } 5711 5712 // Invalidate the database 5713 { 5714 auto invalidDatabase = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"), dbName); 5715 invalidDatabase.setDatabaseName(databaseFileName); 5716 QCOMPARE(invalidDatabase.open(), true); 5717 5718 QCOMPARE(invalidDatabase.transaction(), true); 5719 5720 auto dropQuery = QSqlQuery(invalidDatabase); 5721 QCOMPARE(dropQuery.prepare(QStringLiteral("ALTER TABLE `Albums` DROP COLUMN `CoverFileName`")), true); 5722 QCOMPARE(dropQuery.exec(), true); 5723 dropQuery.finish(); 5724 5725 QCOMPARE(invalidDatabase.commit(), true); 5726 5727 invalidDatabase.close(); 5728 } 5729 5730 // This one should detect the error & fix it 5731 { 5732 DatabaseInterface musicDb; 5733 5734 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 5735 5736 musicDb.init(dbName, databaseFileName); 5737 5738 QCOMPARE(musicDbDatabaseErrorSpy.count(), 1); 5739 } 5740 5741 // Check database has been fixed 5742 { 5743 DatabaseInterface musicDb; 5744 5745 QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); 5746 5747 musicDb.init(dbName, databaseFileName); 5748 5749 QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); 5750 } 5751 5752 databaseFile.remove(); 5753 } 5754 }; 5755 5756 QTEST_GUILESS_MAIN(DatabaseInterfaceTests) 5757 5758 5759 #include "databaseinterfacetest.moc"