1 /*
2    SPDX-FileCopyrightText: 2018 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
3 
4    SPDX-License-Identifier: LGPL-3.0-or-later
5  */
6 
7 #include "models/trackmetadatamodel.h"
8 
9 #include "databasetestdata.h"
10 
11 #include <QAbstractItemModelTester>
12 #include <QDebug>
13 
14 #include <QtTest>
15 
16 class TrackMetadataModelTests: public QObject, public DatabaseTestData
17 {
18     Q_OBJECT
19 
20 public:
21 
TrackMetadataModelTests(QObject * aParent=nullptr)22     explicit TrackMetadataModelTests(QObject *aParent = nullptr) : QObject(aParent)
23     {
24     }
25 
26 private Q_SLOTS:
27 
initTestCase()28     void initTestCase()
29     {
30     }
31 
loadOneTrackData()32     void loadOneTrackData()
33     {
34         TrackMetadataModel myModel;
35         QAbstractItemModelTester testModel(&myModel);
36 
37         QSignalSpy beginResetSpy(&myModel, &TrackMetadataModel::modelAboutToBeReset);
38         QSignalSpy endResetSpy(&myModel, &TrackMetadataModel::modelReset);
39         QSignalSpy beginInsertRowsSpy(&myModel, &TrackMetadataModel::rowsAboutToBeInserted);
40         QSignalSpy endInsertRowsSpy(&myModel, &TrackMetadataModel::rowsInserted);
41         QSignalSpy dataChangedSpy(&myModel, &TrackMetadataModel::dataChanged);
42         QSignalSpy beginRemovedRowsSpy(&myModel, &TrackMetadataModel::rowsAboutToBeRemoved);
43         QSignalSpy endRemovedRowsSpy(&myModel, &TrackMetadataModel::rowsRemoved);
44 
45         QCOMPARE(beginResetSpy.count(), 0);
46         QCOMPARE(endResetSpy.count(), 0);
47         QCOMPARE(beginInsertRowsSpy.count(), 0);
48         QCOMPARE(endInsertRowsSpy.count(), 0);
49         QCOMPARE(dataChangedSpy.count(), 0);
50         QCOMPARE(beginRemovedRowsSpy.count(), 0);
51         QCOMPARE(endRemovedRowsSpy.count(), 0);
52         QCOMPARE(myModel.rowCount(), 0);
53 
54         auto trackData = TrackMetadataModel::TrackDataType{{DataTypes::DatabaseIdRole, 1},
55                                                            {DataTypes::TitleRole, QStringLiteral("title")},
56                                                            {DataTypes::AlbumRole, QStringLiteral("album")}};
57         myModel.trackData(trackData);
58 
59         QCOMPARE(beginResetSpy.count(), 1);
60         QCOMPARE(endResetSpy.count(), 1);
61         QCOMPARE(beginInsertRowsSpy.count(), 0);
62         QCOMPARE(endInsertRowsSpy.count(), 0);
63         QCOMPARE(dataChangedSpy.count(), 0);
64         QCOMPARE(beginRemovedRowsSpy.count(), 0);
65         QCOMPARE(endRemovedRowsSpy.count(), 0);
66         QCOMPARE(myModel.rowCount(), 2);
67     }
68 
modifyTrackInDatabase()69     void modifyTrackInDatabase()
70     {
71         QTemporaryFile databaseFile;
72         databaseFile.open();
73 
74         qDebug() << "addOneTrackWithoutAlbumArtist" << databaseFile.fileName();
75 
76         DatabaseInterface musicDb;
77 
78         musicDb.init(QStringLiteral("testDb"), databaseFile.fileName());
79 
80         musicDb.insertTracksList(mNewTracks, mNewCovers);
81 
82         TrackMetadataModel myModel;
83         QAbstractItemModelTester testModel(&myModel);
84 
85         QSignalSpy beginResetSpy(&myModel, &TrackMetadataModel::modelAboutToBeReset);
86         QSignalSpy endResetSpy(&myModel, &TrackMetadataModel::modelReset);
87         QSignalSpy beginInsertRowsSpy(&myModel, &TrackMetadataModel::rowsAboutToBeInserted);
88         QSignalSpy endInsertRowsSpy(&myModel, &TrackMetadataModel::rowsInserted);
89         QSignalSpy dataChangedSpy(&myModel, &TrackMetadataModel::dataChanged);
90         QSignalSpy beginRemovedRowsSpy(&myModel, &TrackMetadataModel::rowsAboutToBeRemoved);
91         QSignalSpy endRemovedRowsSpy(&myModel, &TrackMetadataModel::rowsRemoved);
92 
93         QCOMPARE(beginResetSpy.count(), 0);
94         QCOMPARE(endResetSpy.count(), 0);
95         QCOMPARE(beginInsertRowsSpy.count(), 0);
96         QCOMPARE(endInsertRowsSpy.count(), 0);
97         QCOMPARE(dataChangedSpy.count(), 0);
98         QCOMPARE(beginRemovedRowsSpy.count(), 0);
99         QCOMPARE(endRemovedRowsSpy.count(), 0);
100         QCOMPARE(myModel.rowCount(), 0);
101 
102         myModel.setDatabase(&musicDb);
103 
104         auto trackId = musicDb.trackIdFromFileName(QUrl::fromLocalFile(QStringLiteral("/$1")));
105 
106         myModel.initializeByIdAndUrl(ElisaUtils::Track, trackId, QUrl::fromLocalFile(QStringLiteral("/$1")));
107 
108         QCOMPARE(beginResetSpy.count(), 1);
109         QCOMPARE(endResetSpy.count(), 1);
110         QCOMPARE(beginInsertRowsSpy.count(), 0);
111         QCOMPARE(endInsertRowsSpy.count(), 0);
112         QCOMPARE(dataChangedSpy.count(), 0);
113         QCOMPARE(beginRemovedRowsSpy.count(), 0);
114         QCOMPARE(endRemovedRowsSpy.count(), 0);
115         QCOMPARE(myModel.rowCount(), 12);
116 
117         musicDb.trackHasStartedPlaying(QUrl::fromLocalFile(QStringLiteral("/$2")), QDateTime::currentDateTime());
118 
119         QCOMPARE(beginResetSpy.count(), 1);
120         QCOMPARE(endResetSpy.count(), 1);
121         QCOMPARE(beginInsertRowsSpy.count(), 0);
122         QCOMPARE(endInsertRowsSpy.count(), 0);
123         QCOMPARE(dataChangedSpy.count(), 0);
124         QCOMPARE(beginRemovedRowsSpy.count(), 0);
125         QCOMPARE(endRemovedRowsSpy.count(), 0);
126         QCOMPARE(myModel.rowCount(), 12);
127     }
128 };
129 
130 QTEST_GUILESS_MAIN(TrackMetadataModelTests)
131 
132 
133 #include "trackmetadatamodeltest.moc"
134