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"