File indexing completed on 2024-04-28 04:48:58
0001 /* 0002 SPDX-FileCopyrightText: 2017 (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 "trackslistener.h" 0010 #include "mediaplaylist.h" 0011 #include "databaseinterface.h" 0012 #include "datatypes.h" 0013 0014 #include "config-upnp-qt.h" 0015 0016 #include <QObject> 0017 #include <QUrl> 0018 #include <QString> 0019 #include <QHash> 0020 #include <QVector> 0021 #include <QThread> 0022 #include <QStandardPaths> 0023 0024 #include <QSignalSpy> 0025 #include <QTest> 0026 0027 class TracksListenerTests: public QObject, public DatabaseTestData 0028 { 0029 Q_OBJECT 0030 0031 public: 0032 0033 TracksListenerTests(QObject *parent = nullptr) : QObject(parent) 0034 { 0035 } 0036 0037 private Q_SLOTS: 0038 0039 void initTestCase() 0040 { 0041 qRegisterMetaType<QHash<qulonglong,int>>("QHash<qulonglong,int>"); 0042 qRegisterMetaType<QHash<QString,QUrl>>("QHash<QString,QUrl>"); 0043 qRegisterMetaType<QVector<qlonglong>>("QVector<qlonglong>"); 0044 qRegisterMetaType<QHash<qlonglong,int>>("QHash<qlonglong,int>"); 0045 qRegisterMetaType<QList<QUrl>>("QList<QUrl>"); 0046 qRegisterMetaType<DataTypes::ListTrackDataType>("ListTrackDataType"); 0047 qRegisterMetaType<DataTypes::ListAlbumDataType>("ListAlbumDataType"); 0048 qRegisterMetaType<DataTypes::ListArtistDataType>("ListArtistDataType"); 0049 qRegisterMetaType<DataTypes::ListGenreDataType>("ListGenreDataType"); 0050 qRegisterMetaType<DataTypes::TrackDataType>("TrackDataType"); 0051 qRegisterMetaType<DataTypes::AlbumDataType>("AlbumDataType"); 0052 qRegisterMetaType<DataTypes::ArtistDataType>("ArtistDataType"); 0053 qRegisterMetaType<DataTypes::GenreDataType>("GenreDataType"); 0054 qRegisterMetaType<ElisaUtils::PlayListEntryType>("PlayListEntryType"); 0055 qRegisterMetaType<TracksListener::TrackDataType>("TracksListener::TrackDataType"); 0056 qRegisterMetaType<TracksListener::ListTrackDataType>("TracksListener::ListTrackDataType"); 0057 } 0058 0059 void testTrackRemoval() 0060 { 0061 MediaPlayList myPlayList; 0062 DatabaseInterface myDatabaseContent; 0063 TracksListener myListener(&myDatabaseContent); 0064 0065 QSignalSpy trackHasChangedSpy(&myListener, &TracksListener::trackHasChanged); 0066 QSignalSpy trackHasBeenRemovedSpy(&myListener, &TracksListener::trackHasBeenRemoved); 0067 QSignalSpy tracksListAddedSpy(&myListener, &TracksListener::tracksListAdded); 0068 0069 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 0070 0071 connect(&myDatabaseContent, &DatabaseInterface::trackRemoved, &myListener, &TracksListener::trackRemoved); 0072 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); 0073 connect(&myDatabaseContent, &DatabaseInterface::trackModified, &myListener, &TracksListener::trackModified); 0074 connect(&myListener, &TracksListener::trackHasChanged, &myPlayList, &MediaPlayList::trackChanged); 0075 connect(&myListener, &TracksListener::trackHasBeenRemoved, &myPlayList, &MediaPlayList::trackRemoved); 0076 connect(&myListener, &TracksListener::tracksListAdded, &myPlayList, &MediaPlayList::tracksListAdded); 0077 connect(&myPlayList, &MediaPlayList::newEntryInList, &myListener, &TracksListener::newEntryInList); 0078 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, &myListener, &TracksListener::trackByNameInList); 0079 0080 QCOMPARE(trackHasChangedSpy.count(), 0); 0081 QCOMPARE(trackHasBeenRemovedSpy.count(), 0); 0082 QCOMPARE(tracksListAddedSpy.count(), 0); 0083 0084 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 0085 0086 QCOMPARE(trackHasChangedSpy.count(), 0); 0087 QCOMPARE(trackHasBeenRemovedSpy.count(), 0); 0088 QCOMPARE(tracksListAddedSpy.count(), 0); 0089 0090 myPlayList.enqueueOneEntry(DataTypes::EntryData{{{DataTypes::ElementTypeRole, ElisaUtils::Artist}}, QStringLiteral("artist1"), {}}); 0091 0092 QCOMPARE(trackHasChangedSpy.count(), 0); 0093 QCOMPARE(trackHasBeenRemovedSpy.count(), 0); 0094 QCOMPARE(tracksListAddedSpy.count(), 1); 0095 0096 QCOMPARE(myPlayList.rowCount(), 6); 0097 0098 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 0099 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 0100 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0101 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 0102 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 0103 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 0104 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 0105 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 0106 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0107 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 0108 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 0109 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 0110 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 0111 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track2")); 0112 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0113 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 0114 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 2); 0115 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 0116 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 0117 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track3")); 0118 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0119 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 0120 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 3); 0121 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 0122 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 0123 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track4")); 0124 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0125 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 0126 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 4); 0127 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 0128 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 0129 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track5")); 0130 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0131 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 0132 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 5); 0133 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 0134 0135 myDatabaseContent.removeTracksList({QUrl::fromLocalFile(QStringLiteral("/$1"))}); 0136 0137 QCOMPARE(trackHasChangedSpy.count(), 0); 0138 QCOMPARE(trackHasBeenRemovedSpy.count(), 1); 0139 QCOMPARE(tracksListAddedSpy.count(), 1); 0140 0141 QCOMPARE(myPlayList.rowCount(), 6); 0142 0143 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), false); 0144 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 0145 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0146 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 0147 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), -1); 0148 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 0); 0149 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 0150 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 0151 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0152 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 0153 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 0154 QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 0155 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 0156 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track2")); 0157 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0158 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 0159 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 2); 0160 QCOMPARE(myPlayList.data(myPlayList.index(2, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 0161 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 0162 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track3")); 0163 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0164 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 0165 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 3); 0166 QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 0167 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 0168 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track4")); 0169 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0170 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 0171 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 4); 0172 QCOMPARE(myPlayList.data(myPlayList.index(4, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 0173 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 0174 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track5")); 0175 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0176 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 0177 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 5); 0178 QCOMPARE(myPlayList.data(myPlayList.index(5, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 0179 } 0180 0181 void testInsertTrackIdAndRemoval() 0182 { 0183 MediaPlayList myPlayList; 0184 DatabaseInterface myDatabaseContent; 0185 TracksListener myListener(&myDatabaseContent); 0186 0187 QSignalSpy trackHasChangedSpy(&myListener, &TracksListener::trackHasChanged); 0188 QSignalSpy trackHasBeenRemovedSpy(&myListener, &TracksListener::trackHasBeenRemoved); 0189 QSignalSpy tracksListAddedSpy(&myListener, &TracksListener::tracksListAdded); 0190 0191 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 0192 0193 connect(&myDatabaseContent, &DatabaseInterface::trackRemoved, &myListener, &TracksListener::trackRemoved); 0194 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); 0195 connect(&myDatabaseContent, &DatabaseInterface::trackModified, &myListener, &TracksListener::trackModified); 0196 connect(&myListener, &TracksListener::trackHasChanged, &myPlayList, &MediaPlayList::trackChanged); 0197 connect(&myListener, &TracksListener::trackHasBeenRemoved, &myPlayList, &MediaPlayList::trackRemoved); 0198 connect(&myListener, &TracksListener::tracksListAdded, &myPlayList, &MediaPlayList::tracksListAdded); 0199 connect(&myPlayList, &MediaPlayList::newEntryInList, &myListener, &TracksListener::newEntryInList); 0200 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, &myListener, &TracksListener::trackByNameInList); 0201 0202 QCOMPARE(trackHasChangedSpy.count(), 0); 0203 QCOMPARE(trackHasBeenRemovedSpy.count(), 0); 0204 QCOMPARE(tracksListAddedSpy.count(), 0); 0205 0206 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 0207 0208 QCOMPARE(trackHasChangedSpy.count(), 0); 0209 QCOMPARE(trackHasBeenRemovedSpy.count(), 0); 0210 QCOMPARE(tracksListAddedSpy.count(), 0); 0211 0212 auto trackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), 0213 QStringLiteral("album1"), 1, 1); 0214 0215 QCOMPARE(trackId != 0, true); 0216 0217 myPlayList.enqueueOneEntry(DataTypes::EntryData{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 0218 {DataTypes::DatabaseIdRole, trackId}}, {}, {}}); 0219 0220 QCOMPARE(trackHasChangedSpy.count(), 1); 0221 QCOMPARE(trackHasBeenRemovedSpy.count(), 0); 0222 QCOMPARE(tracksListAddedSpy.count(), 0); 0223 0224 QCOMPARE(myPlayList.rowCount(), 1); 0225 0226 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 0227 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 0228 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0229 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 0230 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 0231 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 0232 0233 myDatabaseContent.removeTracksList({QUrl::fromLocalFile(QStringLiteral("/$1"))}); 0234 0235 QCOMPARE(trackHasChangedSpy.count(), 1); 0236 QCOMPARE(trackHasBeenRemovedSpy.count(), 1); 0237 QCOMPARE(tracksListAddedSpy.count(), 0); 0238 0239 QCOMPARE(myPlayList.rowCount(), 1); 0240 0241 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), false); 0242 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 0243 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0244 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 0245 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), -1); 0246 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 0); 0247 } 0248 0249 void testInsertTrackByNameAndRemoval() 0250 { 0251 MediaPlayList myPlayList; 0252 DatabaseInterface myDatabaseContent; 0253 TracksListener myListener(&myDatabaseContent); 0254 0255 QSignalSpy trackHasChangedSpy(&myListener, &TracksListener::trackHasChanged); 0256 QSignalSpy trackHasBeenRemovedSpy(&myListener, &TracksListener::trackHasBeenRemoved); 0257 QSignalSpy tracksListAddedSpy(&myListener, &TracksListener::tracksListAdded); 0258 0259 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 0260 0261 connect(&myDatabaseContent, &DatabaseInterface::trackRemoved, &myListener, &TracksListener::trackRemoved); 0262 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); 0263 connect(&myDatabaseContent, &DatabaseInterface::trackModified, &myListener, &TracksListener::trackModified); 0264 connect(&myListener, &TracksListener::trackHasChanged, &myPlayList, &MediaPlayList::trackChanged); 0265 connect(&myListener, &TracksListener::trackHasBeenRemoved, &myPlayList, &MediaPlayList::trackRemoved); 0266 connect(&myListener, &TracksListener::tracksListAdded, &myPlayList, &MediaPlayList::tracksListAdded); 0267 connect(&myPlayList, &MediaPlayList::newEntryInList, &myListener, &TracksListener::newEntryInList); 0268 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, &myListener, &TracksListener::trackByNameInList); 0269 0270 QCOMPARE(trackHasChangedSpy.count(), 0); 0271 QCOMPARE(trackHasBeenRemovedSpy.count(), 0); 0272 QCOMPARE(tracksListAddedSpy.count(), 0); 0273 0274 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 0275 0276 QCOMPARE(trackHasChangedSpy.count(), 0); 0277 QCOMPARE(trackHasBeenRemovedSpy.count(), 0); 0278 QCOMPARE(tracksListAddedSpy.count(), 0); 0279 0280 myPlayList.enqueueOneEntry({{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 0281 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1)}}, 0282 QStringLiteral("track1"), {}}); 0283 0284 QCOMPARE(trackHasChangedSpy.count(), 1); 0285 QCOMPARE(trackHasBeenRemovedSpy.count(), 0); 0286 QCOMPARE(tracksListAddedSpy.count(), 0); 0287 0288 QCOMPARE(myPlayList.rowCount(), 1); 0289 0290 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 0291 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 0292 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0293 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 0294 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 0295 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 0296 0297 myDatabaseContent.removeTracksList({QUrl::fromLocalFile(QStringLiteral("/$1"))}); 0298 0299 QCOMPARE(trackHasChangedSpy.count(), 1); 0300 QCOMPARE(trackHasBeenRemovedSpy.count(), 1); 0301 QCOMPARE(tracksListAddedSpy.count(), 0); 0302 0303 QCOMPARE(myPlayList.rowCount(), 1); 0304 0305 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), false); 0306 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 0307 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0308 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 0309 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), -1); 0310 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 0); 0311 } 0312 0313 void testInsertTrackByNameBeforeDatabaseAndRemoval() 0314 { 0315 MediaPlayList myPlayList; 0316 DatabaseInterface myDatabaseContent; 0317 TracksListener myListener(&myDatabaseContent); 0318 0319 QSignalSpy trackHasChangedSpy(&myListener, &TracksListener::trackHasChanged); 0320 QSignalSpy trackHasBeenRemovedSpy(&myListener, &TracksListener::trackHasBeenRemoved); 0321 QSignalSpy tracksListAddedSpy(&myListener, &TracksListener::tracksListAdded); 0322 0323 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 0324 0325 connect(&myDatabaseContent, &DatabaseInterface::trackRemoved, &myListener, &TracksListener::trackRemoved); 0326 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); 0327 connect(&myDatabaseContent, &DatabaseInterface::trackModified, &myListener, &TracksListener::trackModified); 0328 connect(&myListener, &TracksListener::trackHasChanged, &myPlayList, &MediaPlayList::trackChanged); 0329 connect(&myListener, &TracksListener::trackHasBeenRemoved, &myPlayList, &MediaPlayList::trackRemoved); 0330 connect(&myListener, &TracksListener::tracksListAdded, &myPlayList, &MediaPlayList::tracksListAdded); 0331 connect(&myPlayList, &MediaPlayList::newEntryInList, &myListener, &TracksListener::newEntryInList); 0332 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, &myListener, &TracksListener::trackByNameInList); 0333 0334 QCOMPARE(trackHasChangedSpy.count(), 0); 0335 QCOMPARE(trackHasBeenRemovedSpy.count(), 0); 0336 QCOMPARE(tracksListAddedSpy.count(), 0); 0337 0338 myPlayList.enqueueRestoredEntries(QVariantList({QStringList({{}, QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), QStringLiteral("1"), QStringLiteral("1"), {}})})); 0339 0340 QCOMPARE(trackHasChangedSpy.count(), 0); 0341 QCOMPARE(trackHasBeenRemovedSpy.count(), 0); 0342 QCOMPARE(tracksListAddedSpy.count(), 0); 0343 0344 QCOMPARE(myPlayList.rowCount(), 1); 0345 0346 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), false); 0347 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 0348 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0349 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 0350 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), -1); 0351 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 0); 0352 0353 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 0354 0355 QCOMPARE(trackHasChangedSpy.count(), 1); 0356 QCOMPARE(trackHasBeenRemovedSpy.count(), 0); 0357 QCOMPARE(tracksListAddedSpy.count(), 0); 0358 0359 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 0360 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 0361 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0362 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 0363 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 0364 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 0365 0366 myDatabaseContent.removeTracksList({QUrl::fromLocalFile(QStringLiteral("/$1"))}); 0367 0368 QCOMPARE(trackHasChangedSpy.count(), 1); 0369 QCOMPARE(trackHasBeenRemovedSpy.count(), 1); 0370 QCOMPARE(tracksListAddedSpy.count(), 0); 0371 0372 QCOMPARE(myPlayList.rowCount(), 1); 0373 0374 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), false); 0375 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 0376 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0377 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 0378 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), -1); 0379 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 0); 0380 } 0381 0382 void testInsertTrackByNameModifyAndRemoval() 0383 { 0384 MediaPlayList myPlayList; 0385 DatabaseInterface myDatabaseContent; 0386 TracksListener myListener(&myDatabaseContent); 0387 0388 QSignalSpy trackHasChangedSpy(&myListener, &TracksListener::trackHasChanged); 0389 QSignalSpy trackHasBeenRemovedSpy(&myListener, &TracksListener::trackHasBeenRemoved); 0390 QSignalSpy tracksListAddedSpy(&myListener, &TracksListener::tracksListAdded); 0391 0392 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 0393 0394 connect(&myDatabaseContent, &DatabaseInterface::trackRemoved, &myListener, &TracksListener::trackRemoved); 0395 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); 0396 connect(&myDatabaseContent, &DatabaseInterface::trackModified, &myListener, &TracksListener::trackModified); 0397 connect(&myListener, &TracksListener::trackHasChanged, &myPlayList, &MediaPlayList::trackChanged); 0398 connect(&myListener, &TracksListener::trackHasBeenRemoved, &myPlayList, &MediaPlayList::trackRemoved); 0399 connect(&myListener, &TracksListener::tracksListAdded, &myPlayList, &MediaPlayList::tracksListAdded); 0400 connect(&myPlayList, &MediaPlayList::newEntryInList, &myListener, &TracksListener::newEntryInList); 0401 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, &myListener, &TracksListener::trackByNameInList); 0402 0403 QCOMPARE(trackHasChangedSpy.count(), 0); 0404 QCOMPARE(trackHasBeenRemovedSpy.count(), 0); 0405 QCOMPARE(tracksListAddedSpy.count(), 0); 0406 0407 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 0408 0409 QCOMPARE(trackHasChangedSpy.count(), 0); 0410 QCOMPARE(trackHasBeenRemovedSpy.count(), 0); 0411 QCOMPARE(tracksListAddedSpy.count(), 0); 0412 0413 myPlayList.enqueueOneEntry({{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 0414 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1)}}, 0415 QStringLiteral("track1"), {}}); 0416 0417 QCOMPARE(trackHasChangedSpy.count(), 1); 0418 QCOMPARE(trackHasBeenRemovedSpy.count(), 0); 0419 QCOMPARE(tracksListAddedSpy.count(), 0); 0420 0421 QCOMPARE(myPlayList.rowCount(), 1); 0422 0423 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 0424 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 0425 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0426 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 0427 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 0428 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 0429 0430 myDatabaseContent.insertTracksList({ 0431 {true, QStringLiteral("$1"), QStringLiteral("0"), QStringLiteral("track1"), 0432 QStringLiteral("artist1"), QStringLiteral("album1"), QStringLiteral("Various Artists"), 0433 2, 3, QTime::fromMSecsSinceStartOfDay(1000), {QUrl::fromLocalFile(QStringLiteral("/$1"))}, 0434 QDateTime::fromMSecsSinceEpoch(1), 0435 {QUrl::fromLocalFile(QStringLiteral("file://image$1"))}, 1, false, 0436 {}, {}, QStringLiteral("lyricist1"), false} 0437 }, mNewCovers); 0438 0439 QCOMPARE(trackHasChangedSpy.count(), 2); 0440 QCOMPARE(trackHasBeenRemovedSpy.count(), 0); 0441 QCOMPARE(tracksListAddedSpy.count(), 0); 0442 0443 QCOMPARE(myPlayList.rowCount(), 1); 0444 0445 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 0446 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 0447 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0448 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 0449 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 2); 0450 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 3); 0451 0452 myDatabaseContent.removeTracksList({QUrl::fromLocalFile(QStringLiteral("/$1"))}); 0453 0454 QCOMPARE(trackHasChangedSpy.count(), 2); 0455 QCOMPARE(trackHasBeenRemovedSpy.count(), 1); 0456 QCOMPARE(tracksListAddedSpy.count(), 0); 0457 0458 QCOMPARE(myPlayList.rowCount(), 1); 0459 0460 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), false); 0461 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 0462 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 0463 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 0464 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), -1); 0465 QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 0); 0466 } 0467 }; 0468 0469 QTEST_GUILESS_MAIN(TracksListenerTests) 0470 0471 0472 #include "trackslistenertest.moc"