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

0001 /*
0002    SPDX-FileCopyrightText: 2018 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
0003 
0004    SPDX-License-Identifier: LGPL-3.0-or-later
0005  */
0006 
0007 #include "models/trackmetadatamodel.h"
0008 
0009 #include "databasetestdata.h"
0010 
0011 #include <QAbstractItemModelTester>
0012 #include <QDebug>
0013 #include <QTemporaryFile>
0014 
0015 #include <QSignalSpy>
0016 #include <QTest>
0017 
0018 class TrackMetadataModelTests: public QObject, public DatabaseTestData
0019 {
0020     Q_OBJECT
0021 
0022 public:
0023 
0024     explicit TrackMetadataModelTests(QObject *aParent = nullptr) : QObject(aParent)
0025     {
0026     }
0027 
0028 private Q_SLOTS:
0029 
0030     void initTestCase()
0031     {
0032     }
0033 
0034     void loadOneTrackData()
0035     {
0036         TrackMetadataModel myModel;
0037         QAbstractItemModelTester testModel(&myModel);
0038 
0039         QSignalSpy beginResetSpy(&myModel, &TrackMetadataModel::modelAboutToBeReset);
0040         QSignalSpy endResetSpy(&myModel, &TrackMetadataModel::modelReset);
0041         QSignalSpy beginInsertRowsSpy(&myModel, &TrackMetadataModel::rowsAboutToBeInserted);
0042         QSignalSpy endInsertRowsSpy(&myModel, &TrackMetadataModel::rowsInserted);
0043         QSignalSpy dataChangedSpy(&myModel, &TrackMetadataModel::dataChanged);
0044         QSignalSpy beginRemovedRowsSpy(&myModel, &TrackMetadataModel::rowsAboutToBeRemoved);
0045         QSignalSpy endRemovedRowsSpy(&myModel, &TrackMetadataModel::rowsRemoved);
0046 
0047         QCOMPARE(beginResetSpy.count(), 0);
0048         QCOMPARE(endResetSpy.count(), 0);
0049         QCOMPARE(beginInsertRowsSpy.count(), 0);
0050         QCOMPARE(endInsertRowsSpy.count(), 0);
0051         QCOMPARE(dataChangedSpy.count(), 0);
0052         QCOMPARE(beginRemovedRowsSpy.count(), 0);
0053         QCOMPARE(endRemovedRowsSpy.count(), 0);
0054         QCOMPARE(myModel.rowCount(), 0);
0055 
0056         auto trackData = TrackMetadataModel::TrackDataType{{DataTypes::DatabaseIdRole, 1},
0057                                                            {DataTypes::TitleRole, QStringLiteral("title")},
0058                                                            {DataTypes::AlbumRole, QStringLiteral("album")}};
0059         myModel.trackData(trackData);
0060 
0061         QCOMPARE(beginResetSpy.count(), 1);
0062         QCOMPARE(endResetSpy.count(), 1);
0063         QCOMPARE(beginInsertRowsSpy.count(), 0);
0064         QCOMPARE(endInsertRowsSpy.count(), 0);
0065         QCOMPARE(dataChangedSpy.count(), 0);
0066         QCOMPARE(beginRemovedRowsSpy.count(), 0);
0067         QCOMPARE(endRemovedRowsSpy.count(), 0);
0068         QCOMPARE(myModel.rowCount(), 2);
0069     }
0070 
0071     void modifyTrackInDatabase()
0072     {
0073         QTemporaryFile databaseFile;
0074         databaseFile.open();
0075 
0076         qDebug() << "addOneTrackWithoutAlbumArtist" << databaseFile.fileName();
0077 
0078         DatabaseInterface musicDb;
0079 
0080         musicDb.init(QStringLiteral("testDb"), databaseFile.fileName());
0081 
0082         musicDb.insertTracksList(mNewTracks, mNewCovers);
0083 
0084         TrackMetadataModel myModel;
0085         QAbstractItemModelTester testModel(&myModel);
0086 
0087         QSignalSpy beginResetSpy(&myModel, &TrackMetadataModel::modelAboutToBeReset);
0088         QSignalSpy endResetSpy(&myModel, &TrackMetadataModel::modelReset);
0089         QSignalSpy beginInsertRowsSpy(&myModel, &TrackMetadataModel::rowsAboutToBeInserted);
0090         QSignalSpy endInsertRowsSpy(&myModel, &TrackMetadataModel::rowsInserted);
0091         QSignalSpy dataChangedSpy(&myModel, &TrackMetadataModel::dataChanged);
0092         QSignalSpy beginRemovedRowsSpy(&myModel, &TrackMetadataModel::rowsAboutToBeRemoved);
0093         QSignalSpy endRemovedRowsSpy(&myModel, &TrackMetadataModel::rowsRemoved);
0094 
0095         QCOMPARE(beginResetSpy.count(), 0);
0096         QCOMPARE(endResetSpy.count(), 0);
0097         QCOMPARE(beginInsertRowsSpy.count(), 0);
0098         QCOMPARE(endInsertRowsSpy.count(), 0);
0099         QCOMPARE(dataChangedSpy.count(), 0);
0100         QCOMPARE(beginRemovedRowsSpy.count(), 0);
0101         QCOMPARE(endRemovedRowsSpy.count(), 0);
0102         QCOMPARE(myModel.rowCount(), 0);
0103 
0104         myModel.setDatabase(&musicDb);
0105 
0106         auto trackId = musicDb.trackIdFromFileName(QUrl::fromLocalFile(QStringLiteral("/$1")));
0107 
0108         myModel.initializeByIdAndUrl(ElisaUtils::Track, trackId, QUrl::fromLocalFile(QStringLiteral("/$1")));
0109 
0110         QCOMPARE(beginResetSpy.count(), 1);
0111         QCOMPARE(endResetSpy.count(), 1);
0112         QCOMPARE(beginInsertRowsSpy.count(), 0);
0113         QCOMPARE(endInsertRowsSpy.count(), 0);
0114         QCOMPARE(dataChangedSpy.count(), 0);
0115         QCOMPARE(beginRemovedRowsSpy.count(), 0);
0116         QCOMPARE(endRemovedRowsSpy.count(), 0);
0117         QCOMPARE(myModel.rowCount(), 12);
0118 
0119         musicDb.trackHasStartedPlaying(QUrl::fromLocalFile(QStringLiteral("/$2")), QDateTime::currentDateTime());
0120 
0121         QCOMPARE(beginResetSpy.count(), 1);
0122         QCOMPARE(endResetSpy.count(), 1);
0123         QCOMPARE(beginInsertRowsSpy.count(), 0);
0124         QCOMPARE(endInsertRowsSpy.count(), 0);
0125         QCOMPARE(dataChangedSpy.count(), 0);
0126         QCOMPARE(beginRemovedRowsSpy.count(), 0);
0127         QCOMPARE(endRemovedRowsSpy.count(), 0);
0128         QCOMPARE(myModel.rowCount(), 12);
0129     }
0130 };
0131 
0132 QTEST_GUILESS_MAIN(TrackMetadataModelTests)
0133 
0134 
0135 #include "trackmetadatamodeltest.moc"