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"