File indexing completed on 2024-04-28 04:48:59

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 "models/viewsmodel.h"
0011 #include "models/viewsproxymodel.h"
0012 #include "viewslistdata.h"
0013 
0014 #include <QAbstractItemModelTester>
0015 #include <QHash>
0016 #include <QObject>
0017 #include <QStandardPaths>
0018 #include <QString>
0019 #include <QThread>
0020 #include <QUrl>
0021 #include <QVector>
0022 
0023 #include <QSignalSpy>
0024 #include <QTest>
0025 
0026 class ViewsModelTests : public QObject, public DatabaseTestData
0027 {
0028     Q_OBJECT
0029 
0030 private:
0031     const int mNumOfBaseViews = 9;
0032 
0033 private Q_SLOTS:
0034 
0035     void initTestCase()
0036     {
0037         qRegisterMetaType<QHash<qulonglong, int>>("QHash<qulonglong,int>");
0038         qRegisterMetaType<QHash<QString, QUrl>>("QHash<QString,QUrl>");
0039         qRegisterMetaType<QVector<qlonglong>>("QVector<qlonglong>");
0040         qRegisterMetaType<QHash<qlonglong, int>>("QHash<qlonglong,int>");
0041     }
0042 
0043     void switchToEmbeddedGenreCategory()
0044     {
0045         DatabaseInterface musicDb;
0046         ViewsModel viewsModel;
0047         ViewsProxyModel viewsProxyModel;
0048         ViewsListData viewsPagesData;
0049         viewsModel.setViewsData(&viewsPagesData);
0050         viewsProxyModel.setSourceModel(&viewsModel);
0051 
0052         QAbstractItemModelTester testModel(&viewsModel);
0053         QAbstractItemModelTester testProxyModel(&viewsProxyModel);
0054 
0055         musicDb.init(QStringLiteral("testDb"));
0056 
0057         viewsModel.viewsData()->setDatabase(&musicDb);
0058 
0059         QSignalSpy beginInsertRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeInserted);
0060         QSignalSpy endInsertRowsSpy(&viewsModel, &ViewsModel::rowsInserted);
0061         QSignalSpy beginRemoveRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeRemoved);
0062         QSignalSpy endRemoveRowsSpy(&viewsModel, &ViewsModel::rowsRemoved);
0063         QSignalSpy dataChangedSpy(&viewsModel, &ViewsModel::dataChanged);
0064 
0065         QCOMPARE(beginInsertRowsSpy.count(), 0);
0066         QCOMPARE(endInsertRowsSpy.count(), 0);
0067         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0068         QCOMPARE(endRemoveRowsSpy.count(), 0);
0069         QCOMPARE(dataChangedSpy.count(), 0);
0070         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0071         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews);
0072 
0073         musicDb.insertTracksList(mNewTracks, mNewCovers);
0074 
0075         QCOMPARE(beginInsertRowsSpy.count(), 0);
0076         QCOMPARE(endInsertRowsSpy.count(), 0);
0077         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0078         QCOMPARE(endRemoveRowsSpy.count(), 0);
0079         QCOMPARE(dataChangedSpy.count(), 0);
0080         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0081         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews);
0082 
0083         viewsModel.viewsData()->setEmbeddedCategory(ElisaUtils::Genre);
0084         viewsProxyModel.setEmbeddedCategory(ElisaUtils::Genre);
0085 
0086         QCOMPARE(beginInsertRowsSpy.count(), 1);
0087         QCOMPARE(endInsertRowsSpy.count(), 1);
0088         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0089         QCOMPARE(endRemoveRowsSpy.count(), 0);
0090         QCOMPARE(dataChangedSpy.count(), 0);
0091         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews + 4);
0092         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1 + 4);
0093 
0094         viewsModel.viewsData()->setEmbeddedCategory(ElisaUtils::Unknown);
0095         viewsProxyModel.setEmbeddedCategory(ElisaUtils::Unknown);
0096 
0097         QCOMPARE(beginInsertRowsSpy.count(), 1);
0098         QCOMPARE(endInsertRowsSpy.count(), 1);
0099         QCOMPARE(beginRemoveRowsSpy.count(), 1);
0100         QCOMPARE(endRemoveRowsSpy.count(), 1);
0101         QCOMPARE(dataChangedSpy.count(), 0);
0102         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0103         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews);
0104     }
0105 
0106     void switchToEmbeddedGenreCategoryWithInsert()
0107     {
0108         DatabaseInterface musicDb;
0109         ViewsModel viewsModel;
0110         ViewsProxyModel viewsProxyModel;
0111         ViewsListData viewsPagesData;
0112         viewsModel.setViewsData(&viewsPagesData);
0113         viewsProxyModel.setSourceModel(&viewsModel);
0114 
0115         QAbstractItemModelTester testModel(&viewsModel);
0116         QAbstractItemModelTester testProxyModel(&viewsProxyModel);
0117 
0118         musicDb.init(QStringLiteral("testDb"));
0119 
0120         viewsModel.viewsData()->setDatabase(&musicDb);
0121 
0122         QSignalSpy beginInsertRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeInserted);
0123         QSignalSpy endInsertRowsSpy(&viewsModel, &ViewsModel::rowsInserted);
0124         QSignalSpy beginRemoveRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeRemoved);
0125         QSignalSpy endRemoveRowsSpy(&viewsModel, &ViewsModel::rowsRemoved);
0126         QSignalSpy dataChangedSpy(&viewsModel, &ViewsModel::dataChanged);
0127 
0128         QCOMPARE(beginInsertRowsSpy.count(), 0);
0129         QCOMPARE(endInsertRowsSpy.count(), 0);
0130         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0131         QCOMPARE(endRemoveRowsSpy.count(), 0);
0132         QCOMPARE(dataChangedSpy.count(), 0);
0133         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0134         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews);
0135 
0136         viewsModel.viewsData()->setEmbeddedCategory(ElisaUtils::Genre);
0137         viewsProxyModel.setEmbeddedCategory(ElisaUtils::Genre);
0138 
0139         QCOMPARE(beginInsertRowsSpy.count(), 0);
0140         QCOMPARE(endInsertRowsSpy.count(), 0);
0141         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0142         QCOMPARE(endRemoveRowsSpy.count(), 0);
0143         QCOMPARE(dataChangedSpy.count(), 0);
0144         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0145         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1);
0146 
0147         musicDb.insertTracksList(mNewTracks, mNewCovers);
0148 
0149         QCOMPARE(beginInsertRowsSpy.count(), 4);
0150         QCOMPARE(endInsertRowsSpy.count(), 4);
0151         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0152         QCOMPARE(endRemoveRowsSpy.count(), 0);
0153         QCOMPARE(dataChangedSpy.count(), 0);
0154         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews + 4);
0155         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1 + 4);
0156 
0157         auto newTracks = DataTypes::ListTrackDataType{
0158         {true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"),
0159                 QStringLiteral("artist2"), QStringLiteral("album3"), {},
0160                 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/test/$23"))},
0161                 QDateTime::fromMSecsSinceEpoch(23),
0162                 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true,
0163                 QStringLiteral("genre7"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false},
0164         {true, QStringLiteral("$24"), QStringLiteral("0"), QStringLiteral("track7"),
0165                 QStringLiteral("artist3"), QStringLiteral("album3"), {},
0166                 7, 1, QTime::fromMSecsSinceStartOfDay(24), {QUrl::fromLocalFile(QStringLiteral("/test/$24"))},
0167                 QDateTime::fromMSecsSinceEpoch(24),
0168                 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true,
0169                 QStringLiteral("genre6"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false},
0170         {true, QStringLiteral("$25"), QStringLiteral("0"), QStringLiteral("track8"),
0171                 QStringLiteral("artist4"), QStringLiteral("album3"), {},
0172                 8, 1, QTime::fromMSecsSinceStartOfDay(25), {QUrl::fromLocalFile(QStringLiteral("/test/$25"))},
0173                 QDateTime::fromMSecsSinceEpoch(25),
0174                 QUrl::fromLocalFile(QStringLiteral("album3")), 5, true,
0175                 QStringLiteral("genre5"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}};
0176 
0177         auto newCovers = mNewCovers;
0178         newCovers[QStringLiteral("/test/$23")] = QUrl::fromLocalFile(QStringLiteral("album3"));
0179         newCovers[QStringLiteral("/test/$24")] = QUrl::fromLocalFile(QStringLiteral("album3"));
0180         newCovers[QStringLiteral("/test/$25")] = QUrl::fromLocalFile(QStringLiteral("album3"));
0181 
0182         musicDb.insertTracksList(newTracks, newCovers);
0183 
0184         QCOMPARE(beginInsertRowsSpy.count(), 7);
0185         QCOMPARE(endInsertRowsSpy.count(), 7);
0186         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0187         QCOMPARE(endRemoveRowsSpy.count(), 0);
0188         QCOMPARE(dataChangedSpy.count(), 0);
0189         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews + 7);
0190         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1 + 7);
0191 
0192         const auto newTrack = DataTypes::TrackDataType {
0193             true, QStringLiteral("$26"), QStringLiteral("0"), QStringLiteral("track6"),
0194             QStringLiteral("artist2"), QStringLiteral("album3"), {},
0195             6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/test/$23"))},
0196             QDateTime::fromMSecsSinceEpoch(23),
0197             QUrl::fromLocalFile(QStringLiteral("album3")), 5, true,
0198             QStringLiteral("a genre"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false};
0199 
0200         const auto newCover = QHash<QString, QUrl>{{QStringLiteral("/test/$26"), QUrl::fromLocalFile(QStringLiteral("album3"))}};
0201 
0202         musicDb.insertTracksList({newTrack}, newCover);
0203 
0204         QCOMPARE(beginInsertRowsSpy.count(), 8);
0205         QCOMPARE(endInsertRowsSpy.count(), 8);
0206         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0207         QCOMPARE(endRemoveRowsSpy.count(), 0);
0208         QCOMPARE(dataChangedSpy.count(), 0);
0209         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews + 8);
0210         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1 + 8);
0211 
0212         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(0, 0), Qt::DisplayRole), QStringLiteral("Now Playing"));
0213         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(1, 0), Qt::DisplayRole), QStringLiteral("Recently Played"));
0214         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(2, 0), Qt::DisplayRole), QStringLiteral("Frequently Played"));
0215         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(3, 0), Qt::DisplayRole), QStringLiteral("Albums"));
0216         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(4, 0), Qt::DisplayRole), QStringLiteral("Artists"));
0217         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(5, 0), Qt::DisplayRole), QStringLiteral("Tracks"));
0218         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(6, 0), Qt::DisplayRole), QStringLiteral("Files"));
0219         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(7, 0), Qt::DisplayRole), QStringLiteral("Radio Stations"));
0220         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(8, 0), Qt::DisplayRole), QStringLiteral("a genre"));
0221         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(9, 0), Qt::DisplayRole), QStringLiteral("genre1"));
0222         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(10, 0), Qt::DisplayRole), QStringLiteral("genre2"));
0223         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(11, 0), Qt::DisplayRole), QStringLiteral("genre3"));
0224         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(12, 0), Qt::DisplayRole), QStringLiteral("genre4"));
0225         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(13, 0), Qt::DisplayRole), QStringLiteral("genre5"));
0226         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(14, 0), Qt::DisplayRole), QStringLiteral("genre6"));
0227         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(15, 0), Qt::DisplayRole), QStringLiteral("genre7"));
0228 
0229         viewsModel.viewsData()->setEmbeddedCategory(ElisaUtils::Unknown);
0230         viewsProxyModel.setEmbeddedCategory(ElisaUtils::Unknown);
0231 
0232         QCOMPARE(beginInsertRowsSpy.count(), 8);
0233         QCOMPARE(endInsertRowsSpy.count(), 8);
0234         QCOMPARE(beginRemoveRowsSpy.count(),1);
0235         QCOMPARE(endRemoveRowsSpy.count(), 1);
0236         QCOMPARE(dataChangedSpy.count(), 0);
0237         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0238         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews);
0239     }
0240 
0241     void switchToEmbeddedAlbumCategoryWithInsertAndRemove()
0242     {
0243         DatabaseInterface musicDb;
0244         ViewsModel viewsModel;
0245         ViewsProxyModel viewsProxyModel;
0246         ViewsListData viewsPagesData;
0247         viewsModel.setViewsData(&viewsPagesData);
0248         viewsProxyModel.setSourceModel(&viewsModel);
0249 
0250         QAbstractItemModelTester testModel(&viewsModel);
0251         QAbstractItemModelTester testProxyModel(&viewsProxyModel);
0252 
0253         musicDb.init(QStringLiteral("testDb"));
0254 
0255         viewsModel.viewsData()->setDatabase(&musicDb);
0256 
0257         QSignalSpy beginInsertRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeInserted);
0258         QSignalSpy endInsertRowsSpy(&viewsModel, &ViewsModel::rowsInserted);
0259         QSignalSpy beginRemoveRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeRemoved);
0260         QSignalSpy endRemoveRowsSpy(&viewsModel, &ViewsModel::rowsRemoved);
0261         QSignalSpy dataChangedSpy(&viewsModel, &ViewsModel::dataChanged);
0262 
0263         QCOMPARE(beginInsertRowsSpy.count(), 0);
0264         QCOMPARE(endInsertRowsSpy.count(), 0);
0265         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0266         QCOMPARE(endRemoveRowsSpy.count(), 0);
0267         QCOMPARE(dataChangedSpy.count(), 0);
0268         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0269         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews);
0270 
0271         viewsModel.viewsData()->setEmbeddedCategory(ElisaUtils::Album);
0272         viewsProxyModel.setEmbeddedCategory(ElisaUtils::Album);
0273 
0274         QCOMPARE(beginInsertRowsSpy.count(), 0);
0275         QCOMPARE(endInsertRowsSpy.count(), 0);
0276         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0277         QCOMPARE(endRemoveRowsSpy.count(), 0);
0278         QCOMPARE(dataChangedSpy.count(), 0);
0279         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0280         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1);
0281 
0282         musicDb.insertTracksList(mNewTracks, mNewCovers);
0283 
0284         QCOMPARE(beginInsertRowsSpy.count(), 1);
0285         QCOMPARE(endInsertRowsSpy.count(), 1);
0286         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0287         QCOMPARE(endRemoveRowsSpy.count(), 0);
0288         QCOMPARE(dataChangedSpy.count(), 0);
0289         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews + 5);
0290         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1 + 5);
0291 
0292         auto newTracks = DataTypes::ListTrackDataType{
0293         {true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"),
0294                 QStringLiteral("artist2"), QStringLiteral("album8"), {},
0295                 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/test/$23"))},
0296                 QDateTime::fromMSecsSinceEpoch(23),
0297                 QUrl::fromLocalFile(QStringLiteral("album8")), 5, true,
0298                 QStringLiteral("genre7"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false},
0299         {true, QStringLiteral("$24"), QStringLiteral("0"), QStringLiteral("track7"),
0300                 QStringLiteral("artist3"), QStringLiteral("album9"), {},
0301                 7, 1, QTime::fromMSecsSinceStartOfDay(24), {QUrl::fromLocalFile(QStringLiteral("/test/$24"))},
0302                 QDateTime::fromMSecsSinceEpoch(24),
0303                 QUrl::fromLocalFile(QStringLiteral("album9")), 5, true,
0304                 QStringLiteral("genre6"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false},
0305         {true, QStringLiteral("$25"), QStringLiteral("0"), QStringLiteral("track8"),
0306                 QStringLiteral("artist4"), QStringLiteral("album10"), {},
0307                 8, 1, QTime::fromMSecsSinceStartOfDay(25), {QUrl::fromLocalFile(QStringLiteral("/test/$25"))},
0308                 QDateTime::fromMSecsSinceEpoch(25),
0309                 QUrl::fromLocalFile(QStringLiteral("album10")), 5, true,
0310                 QStringLiteral("genre5"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}};
0311 
0312         auto newCovers = mNewCovers;
0313         newCovers[QStringLiteral("/test/$23")] = QUrl::fromLocalFile(QStringLiteral("album8"));
0314         newCovers[QStringLiteral("/test/$24")] = QUrl::fromLocalFile(QStringLiteral("album9"));
0315         newCovers[QStringLiteral("/test/$25")] = QUrl::fromLocalFile(QStringLiteral("album10"));
0316 
0317         musicDb.insertTracksList(newTracks, newCovers);
0318 
0319         QCOMPARE(beginInsertRowsSpy.count(), 2);
0320         QCOMPARE(endInsertRowsSpy.count(), 2);
0321         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0322         QCOMPARE(endRemoveRowsSpy.count(), 0);
0323         QCOMPARE(dataChangedSpy.count(), 0);
0324         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews + 8);
0325         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1 + 8);
0326 
0327         musicDb.removeTracksList({{QUrl::fromLocalFile(QStringLiteral("/test/$23"))},
0328                                   {QUrl::fromLocalFile(QStringLiteral("/test/$24"))},
0329                                   {QUrl::fromLocalFile(QStringLiteral("/test/$25"))}});
0330 
0331         QCOMPARE(beginInsertRowsSpy.count(), 2);
0332         QCOMPARE(endInsertRowsSpy.count(), 2);
0333         QCOMPARE(beginRemoveRowsSpy.count(), 3);
0334         QCOMPARE(endRemoveRowsSpy.count(), 3);
0335         QCOMPARE(dataChangedSpy.count(), 0);
0336         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews + 5);
0337         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1 + 5);
0338 
0339         viewsModel.viewsData()->setEmbeddedCategory(ElisaUtils::Unknown);
0340         viewsProxyModel.setEmbeddedCategory(ElisaUtils::Unknown);
0341 
0342         QCOMPARE(beginInsertRowsSpy.count(), 2);
0343         QCOMPARE(endInsertRowsSpy.count(), 2);
0344         QCOMPARE(beginRemoveRowsSpy.count(), 4);
0345         QCOMPARE(endRemoveRowsSpy.count(), 4);
0346         QCOMPARE(dataChangedSpy.count(), 0);
0347         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0348         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews);
0349     }
0350 
0351     void simpleSwitchToEmbeddedAlbumCategory()
0352     {
0353         DatabaseInterface musicDb;
0354         ViewsModel viewsModel;
0355         ViewsProxyModel viewsProxyModel;
0356         ViewsListData viewsPagesData;
0357         viewsModel.setViewsData(&viewsPagesData);
0358         viewsProxyModel.setSourceModel(&viewsModel);
0359 
0360         QAbstractItemModelTester testModel(&viewsModel);
0361         QAbstractItemModelTester testProxyModel(&viewsProxyModel);
0362 
0363         musicDb.init(QStringLiteral("testDb"));
0364 
0365         viewsModel.viewsData()->setDatabase(&musicDb);
0366 
0367         QSignalSpy beginInsertRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeInserted);
0368         QSignalSpy endInsertRowsSpy(&viewsModel, &ViewsModel::rowsInserted);
0369         QSignalSpy beginRemoveRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeRemoved);
0370         QSignalSpy endRemoveRowsSpy(&viewsModel, &ViewsModel::rowsRemoved);
0371         QSignalSpy dataChangedSpy(&viewsModel, &ViewsModel::dataChanged);
0372 
0373         QCOMPARE(beginInsertRowsSpy.count(), 0);
0374         QCOMPARE(endInsertRowsSpy.count(), 0);
0375         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0376         QCOMPARE(endRemoveRowsSpy.count(), 0);
0377         QCOMPARE(dataChangedSpy.count(), 0);
0378         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0379         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews);
0380 
0381         viewsModel.viewsData()->setEmbeddedCategory(ElisaUtils::Album);
0382         viewsProxyModel.setEmbeddedCategory(ElisaUtils::Album);
0383 
0384         QCOMPARE(beginInsertRowsSpy.count(), 0);
0385         QCOMPARE(endInsertRowsSpy.count(), 0);
0386         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0387         QCOMPARE(endRemoveRowsSpy.count(), 0);
0388         QCOMPARE(dataChangedSpy.count(), 0);
0389         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0390         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1);
0391 
0392         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(0, 0), Qt::DisplayRole), QStringLiteral("Now Playing"));
0393         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(1, 0), Qt::DisplayRole), QStringLiteral("Recently Played"));
0394         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(2, 0), Qt::DisplayRole), QStringLiteral("Frequently Played"));
0395         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(3, 0), Qt::DisplayRole), QStringLiteral("Artists"));
0396         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(4, 0), Qt::DisplayRole), QStringLiteral("Tracks"));
0397         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(5, 0), Qt::DisplayRole), QStringLiteral("Genres"));
0398         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(6, 0), Qt::DisplayRole), QStringLiteral("Files"));
0399         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(7, 0), Qt::DisplayRole), QStringLiteral("Radio Stations"));
0400     }
0401 
0402     void simpleSwitchToEmbeddedArtistCategory()
0403     {
0404         DatabaseInterface musicDb;
0405         ViewsModel viewsModel;
0406         ViewsProxyModel viewsProxyModel;
0407         ViewsListData viewsPagesData;
0408         viewsModel.setViewsData(&viewsPagesData);
0409         viewsProxyModel.setSourceModel(&viewsModel);
0410 
0411         QAbstractItemModelTester testModel(&viewsModel);
0412         QAbstractItemModelTester testProxyModel(&viewsProxyModel);
0413 
0414         musicDb.init(QStringLiteral("testDb"));
0415 
0416         viewsModel.viewsData()->setDatabase(&musicDb);
0417 
0418         QSignalSpy beginInsertRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeInserted);
0419         QSignalSpy endInsertRowsSpy(&viewsModel, &ViewsModel::rowsInserted);
0420         QSignalSpy beginRemoveRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeRemoved);
0421         QSignalSpy endRemoveRowsSpy(&viewsModel, &ViewsModel::rowsRemoved);
0422         QSignalSpy dataChangedSpy(&viewsModel, &ViewsModel::dataChanged);
0423 
0424         QCOMPARE(beginInsertRowsSpy.count(), 0);
0425         QCOMPARE(endInsertRowsSpy.count(), 0);
0426         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0427         QCOMPARE(endRemoveRowsSpy.count(), 0);
0428         QCOMPARE(dataChangedSpy.count(), 0);
0429         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0430         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews);
0431 
0432         viewsModel.viewsData()->setEmbeddedCategory(ElisaUtils::Artist);
0433         viewsProxyModel.setEmbeddedCategory(ElisaUtils::Artist);
0434 
0435         QCOMPARE(beginInsertRowsSpy.count(), 0);
0436         QCOMPARE(endInsertRowsSpy.count(), 0);
0437         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0438         QCOMPARE(endRemoveRowsSpy.count(), 0);
0439         QCOMPARE(dataChangedSpy.count(), 0);
0440         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0441         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1);
0442 
0443         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(0, 0), Qt::DisplayRole), QStringLiteral("Now Playing"));
0444         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(1, 0), Qt::DisplayRole), QStringLiteral("Recently Played"));
0445         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(2, 0), Qt::DisplayRole), QStringLiteral("Frequently Played"));
0446         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(3, 0), Qt::DisplayRole), QStringLiteral("Albums"));
0447         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(4, 0), Qt::DisplayRole), QStringLiteral("Tracks"));
0448         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(5, 0), Qt::DisplayRole), QStringLiteral("Genres"));
0449         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(6, 0), Qt::DisplayRole), QStringLiteral("Files"));
0450         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(7, 0), Qt::DisplayRole), QStringLiteral("Radio Stations"));
0451     }
0452 
0453     void simpleSwitchToEmbeddedGenreCategory()
0454     {
0455         DatabaseInterface musicDb;
0456         ViewsModel viewsModel;
0457         ViewsProxyModel viewsProxyModel;
0458         ViewsListData viewsPagesData;
0459         viewsModel.setViewsData(&viewsPagesData);
0460         viewsProxyModel.setSourceModel(&viewsModel);
0461 
0462         QAbstractItemModelTester testModel(&viewsModel);
0463         QAbstractItemModelTester testProxyModel(&viewsProxyModel);
0464 
0465         musicDb.init(QStringLiteral("testDb"));
0466 
0467         viewsModel.viewsData()->setDatabase(&musicDb);
0468 
0469         QSignalSpy beginInsertRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeInserted);
0470         QSignalSpy endInsertRowsSpy(&viewsModel, &ViewsModel::rowsInserted);
0471         QSignalSpy beginRemoveRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeRemoved);
0472         QSignalSpy endRemoveRowsSpy(&viewsModel, &ViewsModel::rowsRemoved);
0473         QSignalSpy dataChangedSpy(&viewsModel, &ViewsModel::dataChanged);
0474 
0475         QCOMPARE(beginInsertRowsSpy.count(), 0);
0476         QCOMPARE(endInsertRowsSpy.count(), 0);
0477         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0478         QCOMPARE(endRemoveRowsSpy.count(), 0);
0479         QCOMPARE(dataChangedSpy.count(), 0);
0480         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0481         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews);
0482 
0483         viewsModel.viewsData()->setEmbeddedCategory(ElisaUtils::Genre);
0484         viewsProxyModel.setEmbeddedCategory(ElisaUtils::Genre);
0485 
0486         QCOMPARE(beginInsertRowsSpy.count(), 0);
0487         QCOMPARE(endInsertRowsSpy.count(), 0);
0488         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0489         QCOMPARE(endRemoveRowsSpy.count(), 0);
0490         QCOMPARE(dataChangedSpy.count(), 0);
0491         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0492         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1);
0493 
0494         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(0, 0), Qt::DisplayRole), QStringLiteral("Now Playing"));
0495         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(1, 0), Qt::DisplayRole), QStringLiteral("Recently Played"));
0496         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(2, 0), Qt::DisplayRole), QStringLiteral("Frequently Played"));
0497         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(3, 0), Qt::DisplayRole), QStringLiteral("Albums"));
0498         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(4, 0), Qt::DisplayRole), QStringLiteral("Artists"));
0499         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(5, 0), Qt::DisplayRole), QStringLiteral("Tracks"));
0500         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(6, 0), Qt::DisplayRole), QStringLiteral("Files"));
0501         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(7, 0), Qt::DisplayRole), QStringLiteral("Radio Stations"));
0502     }
0503 
0504     void simpleSwitchToEmbeddedAlbumCategoryWithoutDatabase()
0505     {
0506         ViewsModel viewsModel;
0507         ViewsProxyModel viewsProxyModel;
0508         ViewsListData viewsPagesData;
0509         viewsModel.setViewsData(&viewsPagesData);
0510         viewsProxyModel.setSourceModel(&viewsModel);
0511 
0512         QAbstractItemModelTester testModel(&viewsModel);
0513         QAbstractItemModelTester testProxyModel(&viewsProxyModel);
0514 
0515         QSignalSpy beginInsertRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeInserted);
0516         QSignalSpy endInsertRowsSpy(&viewsModel, &ViewsModel::rowsInserted);
0517         QSignalSpy beginRemoveRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeRemoved);
0518         QSignalSpy endRemoveRowsSpy(&viewsModel, &ViewsModel::rowsRemoved);
0519         QSignalSpy dataChangedSpy(&viewsModel, &ViewsModel::dataChanged);
0520 
0521         QCOMPARE(beginInsertRowsSpy.count(), 0);
0522         QCOMPARE(endInsertRowsSpy.count(), 0);
0523         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0524         QCOMPARE(endRemoveRowsSpy.count(), 0);
0525         QCOMPARE(dataChangedSpy.count(), 0);
0526         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0527         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews);
0528 
0529         viewsModel.viewsData()->setEmbeddedCategory(ElisaUtils::Album);
0530         viewsProxyModel.setEmbeddedCategory(ElisaUtils::Album);
0531 
0532         QCOMPARE(beginInsertRowsSpy.count(), 0);
0533         QCOMPARE(endInsertRowsSpy.count(), 0);
0534         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0535         QCOMPARE(endRemoveRowsSpy.count(), 0);
0536         QCOMPARE(dataChangedSpy.count(), 0);
0537         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0538         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1);
0539 
0540         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(0, 0), Qt::DisplayRole), QStringLiteral("Now Playing"));
0541         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(1, 0), Qt::DisplayRole), QStringLiteral("Recently Played"));
0542         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(2, 0), Qt::DisplayRole), QStringLiteral("Frequently Played"));
0543         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(3, 0), Qt::DisplayRole), QStringLiteral("Artists"));
0544         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(4, 0), Qt::DisplayRole), QStringLiteral("Tracks"));
0545         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(5, 0), Qt::DisplayRole), QStringLiteral("Genres"));
0546         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(6, 0), Qt::DisplayRole), QStringLiteral("Files"));
0547         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(7, 0), Qt::DisplayRole), QStringLiteral("Radio Stations"));
0548     }
0549 
0550     void simpleSwitchToEmbeddedArtistCategoryWithoutDatabase()
0551     {
0552         ViewsModel viewsModel;
0553         ViewsProxyModel viewsProxyModel;
0554         ViewsListData viewsPagesData;
0555         viewsModel.setViewsData(&viewsPagesData);
0556         viewsProxyModel.setSourceModel(&viewsModel);
0557 
0558         QAbstractItemModelTester testModel(&viewsModel);
0559         QAbstractItemModelTester testProxyModel(&viewsProxyModel);
0560 
0561         QSignalSpy beginInsertRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeInserted);
0562         QSignalSpy endInsertRowsSpy(&viewsModel, &ViewsModel::rowsInserted);
0563         QSignalSpy beginRemoveRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeRemoved);
0564         QSignalSpy endRemoveRowsSpy(&viewsModel, &ViewsModel::rowsRemoved);
0565         QSignalSpy dataChangedSpy(&viewsModel, &ViewsModel::dataChanged);
0566 
0567         QCOMPARE(beginInsertRowsSpy.count(), 0);
0568         QCOMPARE(endInsertRowsSpy.count(), 0);
0569         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0570         QCOMPARE(endRemoveRowsSpy.count(), 0);
0571         QCOMPARE(dataChangedSpy.count(), 0);
0572         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0573         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews);
0574 
0575         viewsModel.viewsData()->setEmbeddedCategory(ElisaUtils::Artist);
0576         viewsProxyModel.setEmbeddedCategory(ElisaUtils::Artist);
0577 
0578         QCOMPARE(beginInsertRowsSpy.count(), 0);
0579         QCOMPARE(endInsertRowsSpy.count(), 0);
0580         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0581         QCOMPARE(endRemoveRowsSpy.count(), 0);
0582         QCOMPARE(dataChangedSpy.count(), 0);
0583         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0584         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1);
0585 
0586         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(0, 0), Qt::DisplayRole), QStringLiteral("Now Playing"));
0587         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(1, 0), Qt::DisplayRole), QStringLiteral("Recently Played"));
0588         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(2, 0), Qt::DisplayRole), QStringLiteral("Frequently Played"));
0589         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(3, 0), Qt::DisplayRole), QStringLiteral("Albums"));
0590         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(4, 0), Qt::DisplayRole), QStringLiteral("Tracks"));
0591         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(5, 0), Qt::DisplayRole), QStringLiteral("Genres"));
0592         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(6, 0), Qt::DisplayRole), QStringLiteral("Files"));
0593         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(7, 0), Qt::DisplayRole), QStringLiteral("Radio Stations"));
0594     }
0595 
0596     void simpleSwitchToEmbeddedGenreCategoryWithoutDatabase()
0597     {
0598         ViewsModel viewsModel;
0599         ViewsProxyModel viewsProxyModel;
0600         ViewsListData viewsPagesData;
0601         viewsModel.setViewsData(&viewsPagesData);
0602         viewsProxyModel.setSourceModel(&viewsModel);
0603 
0604         QAbstractItemModelTester testModel(&viewsModel);
0605         QAbstractItemModelTester testProxyModel(&viewsProxyModel);
0606 
0607         QSignalSpy beginInsertRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeInserted);
0608         QSignalSpy endInsertRowsSpy(&viewsModel, &ViewsModel::rowsInserted);
0609         QSignalSpy beginRemoveRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeRemoved);
0610         QSignalSpy endRemoveRowsSpy(&viewsModel, &ViewsModel::rowsRemoved);
0611         QSignalSpy dataChangedSpy(&viewsModel, &ViewsModel::dataChanged);
0612 
0613         QCOMPARE(beginInsertRowsSpy.count(), 0);
0614         QCOMPARE(endInsertRowsSpy.count(), 0);
0615         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0616         QCOMPARE(endRemoveRowsSpy.count(), 0);
0617         QCOMPARE(dataChangedSpy.count(), 0);
0618         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0619         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews);
0620 
0621         viewsModel.viewsData()->setEmbeddedCategory(ElisaUtils::Genre);
0622         viewsProxyModel.setEmbeddedCategory(ElisaUtils::Genre);
0623 
0624         QCOMPARE(beginInsertRowsSpy.count(), 0);
0625         QCOMPARE(endInsertRowsSpy.count(), 0);
0626         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0627         QCOMPARE(endRemoveRowsSpy.count(), 0);
0628         QCOMPARE(dataChangedSpy.count(), 0);
0629         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0630         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1);
0631 
0632         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(0, 0), Qt::DisplayRole), QStringLiteral("Now Playing"));
0633         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(1, 0), Qt::DisplayRole), QStringLiteral("Recently Played"));
0634         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(2, 0), Qt::DisplayRole), QStringLiteral("Frequently Played"));
0635         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(3, 0), Qt::DisplayRole), QStringLiteral("Albums"));
0636         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(4, 0), Qt::DisplayRole), QStringLiteral("Artists"));
0637         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(5, 0), Qt::DisplayRole), QStringLiteral("Tracks"));
0638         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(6, 0), Qt::DisplayRole), QStringLiteral("Files"));
0639         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(7, 0), Qt::DisplayRole), QStringLiteral("Radio Stations"));
0640     }
0641 
0642     void switchToEmbeddedAlbumCategoryAndToEmbeddedArtistCategory()
0643     {
0644         DatabaseInterface musicDb;
0645         ViewsModel viewsModel;
0646         ViewsProxyModel viewsProxyModel;
0647         ViewsListData viewsPagesData;
0648         viewsModel.setViewsData(&viewsPagesData);
0649         viewsProxyModel.setSourceModel(&viewsModel);
0650 
0651         QAbstractItemModelTester testModel(&viewsModel);
0652         QAbstractItemModelTester testProxyModel(&viewsProxyModel);
0653 
0654         musicDb.init(QStringLiteral("testDb"));
0655 
0656         viewsModel.viewsData()->setDatabase(&musicDb);
0657 
0658         QSignalSpy beginInsertRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeInserted);
0659         QSignalSpy endInsertRowsSpy(&viewsModel, &ViewsModel::rowsInserted);
0660         QSignalSpy beginRemoveRowsSpy(&viewsModel, &ViewsModel::rowsAboutToBeRemoved);
0661         QSignalSpy endRemoveRowsSpy(&viewsModel, &ViewsModel::rowsRemoved);
0662         QSignalSpy dataChangedSpy(&viewsModel, &ViewsModel::dataChanged);
0663 
0664         QCOMPARE(beginInsertRowsSpy.count(), 0);
0665         QCOMPARE(endInsertRowsSpy.count(), 0);
0666         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0667         QCOMPARE(endRemoveRowsSpy.count(), 0);
0668         QCOMPARE(dataChangedSpy.count(), 0);
0669         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0670         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews);
0671 
0672         musicDb.insertTracksList(mNewTracks, mNewCovers);
0673 
0674         QCOMPARE(beginInsertRowsSpy.count(), 0);
0675         QCOMPARE(endInsertRowsSpy.count(), 0);
0676         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0677         QCOMPARE(endRemoveRowsSpy.count(), 0);
0678         QCOMPARE(dataChangedSpy.count(), 0);
0679         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0680         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews);
0681 
0682         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(0, 0), Qt::DisplayRole), QStringLiteral("Now Playing"));
0683         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(1, 0), Qt::DisplayRole), QStringLiteral("Recently Played"));
0684         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(2, 0), Qt::DisplayRole), QStringLiteral("Frequently Played"));
0685         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(3, 0), Qt::DisplayRole), QStringLiteral("Albums"));
0686         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(4, 0), Qt::DisplayRole), QStringLiteral("Artists"));
0687         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(5, 0), Qt::DisplayRole), QStringLiteral("Tracks"));
0688         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(6, 0), Qt::DisplayRole), QStringLiteral("Genres"));
0689         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(7, 0), Qt::DisplayRole), QStringLiteral("Files"));
0690         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(8, 0), Qt::DisplayRole), QStringLiteral("Radio Stations"));
0691 
0692         viewsModel.viewsData()->setEmbeddedCategory(ElisaUtils::Album);
0693         viewsProxyModel.setEmbeddedCategory(ElisaUtils::Album);
0694 
0695         beginInsertRowsSpy.wait(100);
0696 
0697         QCOMPARE(beginInsertRowsSpy.count(), 1);
0698         QCOMPARE(endInsertRowsSpy.count(), 1);
0699         QCOMPARE(beginRemoveRowsSpy.count(), 0);
0700         QCOMPARE(endRemoveRowsSpy.count(), 0);
0701         QCOMPARE(dataChangedSpy.count(), 0);
0702         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews + 5);
0703         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1 + 5);
0704 
0705         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(0, 0), Qt::DisplayRole), QStringLiteral("Now Playing"));
0706         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(1, 0), Qt::DisplayRole), QStringLiteral("Recently Played"));
0707         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(2, 0), Qt::DisplayRole), QStringLiteral("Frequently Played"));
0708         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(3, 0), Qt::DisplayRole), QStringLiteral("Artists"));
0709         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(4, 0), Qt::DisplayRole), QStringLiteral("Tracks"));
0710         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(5, 0), Qt::DisplayRole), QStringLiteral("Genres"));
0711         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(6, 0), Qt::DisplayRole), QStringLiteral("Files"));
0712         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(7, 0), Qt::DisplayRole), QStringLiteral("Radio Stations"));
0713         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(8, 0), Qt::DisplayRole), QStringLiteral("album1"));
0714         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(9, 0), Qt::DisplayRole), QStringLiteral("album2"));
0715         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(10, 0), Qt::DisplayRole), QStringLiteral("album3"));
0716         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(11, 0), Qt::DisplayRole), QStringLiteral("album3"));
0717         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(12, 0), Qt::DisplayRole), QStringLiteral("album4"));
0718 
0719         viewsModel.viewsData()->setEmbeddedCategory(ElisaUtils::Artist);
0720         viewsProxyModel.setEmbeddedCategory(ElisaUtils::Artist);
0721 
0722         beginInsertRowsSpy.wait(100);
0723 
0724         QCOMPARE(beginInsertRowsSpy.count(), 2);
0725         QCOMPARE(endInsertRowsSpy.count(), 2);
0726         QCOMPARE(beginRemoveRowsSpy.count(), 1);
0727         QCOMPARE(endRemoveRowsSpy.count(), 1);
0728         QCOMPARE(dataChangedSpy.count(), 0);
0729         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews + 7);
0730         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews - 1 + 7);
0731 
0732         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(0, 0), Qt::DisplayRole), QStringLiteral("Now Playing"));
0733         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(1, 0), Qt::DisplayRole), QStringLiteral("Recently Played"));
0734         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(2, 0), Qt::DisplayRole), QStringLiteral("Frequently Played"));
0735         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(3, 0), Qt::DisplayRole), QStringLiteral("Albums"));
0736         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(4, 0), Qt::DisplayRole), QStringLiteral("Tracks"));
0737         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(5, 0), Qt::DisplayRole), QStringLiteral("Genres"));
0738         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(6, 0), Qt::DisplayRole), QStringLiteral("Files"));
0739         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(7, 0), Qt::DisplayRole), QStringLiteral("Radio Stations"));
0740         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(8, 0), Qt::DisplayRole), QStringLiteral("artist1"));
0741         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(9, 0), Qt::DisplayRole), QStringLiteral("artist1 and artist2"));
0742         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(10, 0), Qt::DisplayRole), QStringLiteral("artist2"));
0743         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(11, 0), Qt::DisplayRole), QStringLiteral("artist3"));
0744         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(12, 0), Qt::DisplayRole), QStringLiteral("artist4"));
0745         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(13, 0), Qt::DisplayRole), QStringLiteral("artist7"));
0746         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(14, 0), Qt::DisplayRole), QStringLiteral("Various Artists"));
0747 
0748         viewsModel.viewsData()->setEmbeddedCategory(ElisaUtils::Unknown);
0749         viewsProxyModel.setEmbeddedCategory(ElisaUtils::Unknown);
0750 
0751         beginInsertRowsSpy.wait(100);
0752 
0753         QCOMPARE(beginInsertRowsSpy.count(), 2);
0754         QCOMPARE(endInsertRowsSpy.count(), 2);
0755         QCOMPARE(beginRemoveRowsSpy.count(), 2);
0756         QCOMPARE(endRemoveRowsSpy.count(), 2);
0757         QCOMPARE(dataChangedSpy.count(), 0);
0758         QCOMPARE(viewsModel.rowCount(), mNumOfBaseViews);
0759         QCOMPARE(viewsProxyModel.rowCount(), mNumOfBaseViews);
0760 
0761         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(0, 0), Qt::DisplayRole), QStringLiteral("Now Playing"));
0762         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(1, 0), Qt::DisplayRole), QStringLiteral("Recently Played"));
0763         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(2, 0), Qt::DisplayRole), QStringLiteral("Frequently Played"));
0764         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(3, 0), Qt::DisplayRole), QStringLiteral("Albums"));
0765         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(4, 0), Qt::DisplayRole), QStringLiteral("Artists"));
0766         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(5, 0), Qt::DisplayRole), QStringLiteral("Tracks"));
0767         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(6, 0), Qt::DisplayRole), QStringLiteral("Genres"));
0768         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(7, 0), Qt::DisplayRole), QStringLiteral("Files"));
0769         QCOMPARE(viewsProxyModel.data(viewsProxyModel.index(8, 0), Qt::DisplayRole), QStringLiteral("Radio Stations"));
0770     }
0771 };
0772 
0773 QTEST_GUILESS_MAIN(ViewsModelTests)
0774 
0775 #include "viewsmodeltest.moc"