Warning, file /utilities/telly-skout/autotests/fetchertest.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 // SPDX-FileCopyrightText: 2023 Plata Hill <plata.hill@kdemail.net> 0002 // SPDX-License-Identifier: LGPL-2.1-or-later 0003 0004 #include "../src/fetcher.h" 0005 0006 #include "../src/database.h" 0007 #include "../src/fetcherimpl.h" 0008 0009 #include <QSignalSpy> 0010 #include <QStandardPaths> 0011 #include <QTest> 0012 0013 namespace 0014 { 0015 class MockFetcherImpl : public FetcherImpl 0016 { 0017 Q_OBJECT 0018 public: 0019 virtual ~MockFetcherImpl() = default; 0020 0021 void fetchGroups(std::function<void(const QVector<GroupData> &)> callback = nullptr, std::function<void(const Error &)> errorCallback = nullptr) override 0022 { 0023 Q_UNUSED(errorCallback) 0024 0025 QVector<GroupData> groups; 0026 GroupData data; 0027 data.m_id = GroupId("TestGroup"); 0028 groups.push_back(data); 0029 callback(groups); 0030 } 0031 0032 void fetchGroup(const QString &url, 0033 const GroupId &groupId, 0034 std::function<void(const QList<ChannelData> &)> callback = nullptr, 0035 std::function<void(const Error &)> errorCallback = nullptr) override 0036 { 0037 Q_UNUSED(url) 0038 Q_UNUSED(groupId) 0039 Q_UNUSED(errorCallback) 0040 0041 QList<ChannelData> channels; 0042 ChannelData data; 0043 data.m_id = ChannelId("TestChannel"); 0044 channels.push_back(data); 0045 callback(channels); 0046 } 0047 0048 void fetchProgram(const ChannelId &channelId, 0049 std::function<void(const QVector<ProgramData> &)> callback = nullptr, 0050 std::function<void(const Error &)> errorCallback = nullptr) override 0051 { 0052 Q_UNUSED(channelId) 0053 Q_UNUSED(errorCallback) 0054 0055 QVector<ProgramData> programs; 0056 ProgramData data; 0057 data.m_id = ProgramId("TestProgram"); 0058 data.m_channelId = ChannelId("TestChannel"); 0059 programs.push_back(data); 0060 callback(programs); 0061 } 0062 0063 void fetchProgramDescription(const ChannelId &channelId, 0064 const ProgramId &programId, 0065 const QString &url, 0066 std::function<void(const QString &)> callback = nullptr, 0067 std::function<void(const Error &)> errorCallback = nullptr) override 0068 { 0069 Q_UNUSED(channelId) 0070 Q_UNUSED(programId) 0071 Q_UNUSED(url) 0072 Q_UNUSED(errorCallback) 0073 0074 callback("TestDescription"); 0075 } 0076 0077 QString image(const QString &url, std::function<void()> callback = nullptr, std::function<void(const Error &)> errorCallback = nullptr) override 0078 { 0079 Q_UNUSED(url) 0080 Q_UNUSED(errorCallback) 0081 0082 callback(); 0083 0084 return "TestImage"; 0085 } 0086 0087 QString imagePath(const QString &url) override 0088 { 0089 Q_UNUSED(url) 0090 0091 return "TestImagePath"; 0092 } 0093 }; 0094 } 0095 0096 class FetcherTest : public QObject 0097 { 0098 Q_OBJECT 0099 private Q_SLOTS: 0100 void initTestCase() 0101 { 0102 QStandardPaths::setTestModeEnabled(true); 0103 0104 Database::instance().execute(QStringLiteral("DELETE FROM \"Groups\";")); 0105 QCOMPARE(Database::instance().groupCount(), 0); 0106 Database::instance().execute(QStringLiteral("DELETE FROM Channels;")); 0107 QCOMPARE(Database::instance().channelCount(), 0); 0108 Database::instance().execute(QStringLiteral("DELETE FROM GroupChannels;")); 0109 Database::instance().execute(QStringLiteral("DELETE FROM Programs;")); 0110 Database::instance().execute(QStringLiteral("DELETE FROM ProgramCategories;")); 0111 Database::instance().execute(QStringLiteral("DELETE FROM Favorites;")); 0112 QCOMPARE(Database::instance().favoriteCount(), 0); 0113 0114 std::unique_ptr<FetcherImpl> fetcherImpl(new MockFetcherImpl()); 0115 Fetcher::instance().setImpl(std::move(fetcherImpl)); 0116 } 0117 0118 void testFetchGroups() 0119 { 0120 Fetcher::instance().fetchGroups(); 0121 QCOMPARE(Database::instance().groupCount(), 1); 0122 const QVector<GroupData> groups = Database::instance().groups(); 0123 QCOMPARE(groups.at(0).m_id.value(), "TestGroup"); 0124 } 0125 0126 void testFetchGroup() 0127 { 0128 QSignalSpy groupUpdatedSpy(&Fetcher::instance(), SIGNAL(groupUpdated(const GroupId &))); 0129 QVERIFY(groupUpdatedSpy.isValid()); 0130 QCOMPARE(groupUpdatedSpy.count(), 0); 0131 Fetcher::instance().fetchGroup(QString(), QString()); 0132 QCOMPARE(groupUpdatedSpy.count(), 1); 0133 QCOMPARE(Database::instance().channelCount(), 1); 0134 const QVector<ChannelData> channels = Database::instance().channels(false); 0135 QCOMPARE(channels.at(0).m_id.value(), "TestChannel"); 0136 } 0137 0138 void testFetchFavorites() 0139 { 0140 Database::instance().addFavorite(ChannelId("TestChannel")); 0141 QSignalSpy channelUpdatedSpy(&Fetcher::instance(), SIGNAL(channelUpdated(const ChannelId &))); 0142 QVERIFY(channelUpdatedSpy.isValid()); 0143 QCOMPARE(channelUpdatedSpy.count(), 0); 0144 Fetcher::instance().fetchFavorites(); 0145 QCOMPARE(channelUpdatedSpy.count(), 1); 0146 QCOMPARE(Database::instance().programCount(ChannelId("TestChannel")), 1); 0147 const QVector<ProgramData> programs = Database::instance().programs(ChannelId("TestChannel")); 0148 QCOMPARE(programs.at(0).m_id.value(), "TestProgram"); 0149 } 0150 0151 void testFetchProgramDescription() 0152 { 0153 QSignalSpy channelUpdatedSpy(&Fetcher::instance(), SIGNAL(channelUpdated(const ChannelId &))); 0154 QVERIFY(channelUpdatedSpy.isValid()); 0155 QCOMPARE(channelUpdatedSpy.count(), 0); 0156 Fetcher::instance().fetchProgramDescription("TestChannel", "TestProgram", QString()); 0157 QCOMPARE(channelUpdatedSpy.count(), 1); 0158 const QVector<ProgramData> programs = Database::instance().programs(ChannelId("TestChannel")); 0159 QCOMPARE(programs.at(0).m_description, "TestDescription"); 0160 } 0161 0162 void testImage() 0163 { 0164 QSignalSpy imageDownloadFinishedSpy(&Fetcher::instance(), SIGNAL(imageDownloadFinished(QString))); 0165 QVERIFY(imageDownloadFinishedSpy.isValid()); 0166 QCOMPARE(imageDownloadFinishedSpy.count(), 0); 0167 QCOMPARE(Fetcher::instance().image(QString()), "TestImage"); 0168 QCOMPARE(imageDownloadFinishedSpy.count(), 1); 0169 } 0170 }; 0171 0172 QTEST_GUILESS_MAIN(FetcherTest) 0173 0174 #include "fetchertest.moc"