Warning, file /utilities/telly-skout/autotests/xmltvfetchertest.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/xmltvfetcher.h"
0005 
0006 #include "../src/TellySkoutSettings.h"
0007 
0008 #include <QSignalSpy>
0009 #include <QStandardPaths>
0010 #include <QString>
0011 #include <QTest>
0012 
0013 class XmltvFetcherTest : public QObject
0014 {
0015     Q_OBJECT
0016 
0017 private:
0018     const QString m_dataPath = QFINDTESTDATA("data/xmltvfetcher/test.xml");
0019 
0020 private Q_SLOTS:
0021     void initTestCase()
0022     {
0023         // xmltv: : Europe/Berlin (UTC+1), DB: UTC
0024         // check that start/stop times are displayed correctly in Europe/Athens (UTC+2 = EET-2)
0025         qputenv("TZ", "EET-2");
0026         QStandardPaths::setTestModeEnabled(true);
0027 
0028         TellySkoutSettings::setXmltvFile(m_dataPath);
0029     }
0030 
0031     void testFetchGroups()
0032     {
0033         XmltvFetcher fetcher;
0034         QVector<GroupData> data;
0035         bool callbackCalled = false;
0036         bool errorCallbackCalled = false;
0037         fetcher.fetchGroups(
0038             [&data, &callbackCalled](const QVector<GroupData> &groups) {
0039                 data = groups;
0040                 callbackCalled = true;
0041             },
0042             [&errorCallbackCalled](Error) {
0043                 errorCallbackCalled = true;
0044             });
0045         QCOMPARE(callbackCalled, true);
0046         QCOMPARE(errorCallbackCalled, false);
0047         QCOMPARE(data.size(), 1);
0048         const GroupData &group = data.at(0);
0049         QCOMPARE(group.m_id.value(), "xmltv");
0050         QCOMPARE(group.m_name, "XMLTV");
0051         QCOMPARE(group.m_url, m_dataPath);
0052     }
0053 
0054     void testFetchGroup()
0055     {
0056         XmltvFetcher fetcher;
0057         const GroupData group{GroupId("xmltv"), "XMLTV", m_dataPath};
0058         QList<ChannelData> data;
0059         bool callbackCalled = false;
0060         bool errorCallbackCalled = false;
0061         fetcher.fetchGroup(
0062             group.m_url,
0063             group.m_id,
0064             [&data, &callbackCalled](const QList<ChannelData> &channels) {
0065                 data = channels;
0066                 callbackCalled = true;
0067             },
0068             [&errorCallbackCalled](Error) {
0069                 errorCallbackCalled = true;
0070             });
0071         QCOMPARE(callbackCalled, true);
0072         QCOMPARE(errorCallbackCalled, false);
0073         QCOMPARE(data.size(), 2);
0074     }
0075 
0076     void testFetchProgram()
0077     {
0078         const ChannelId channelId("channel1");
0079 
0080         XmltvFetcher fetcher;
0081         QVector<ProgramData> data;
0082         bool callbackCalled = false;
0083         bool errorCallbackCalled = false;
0084         fetcher.fetchProgram(
0085             channelId,
0086             [&data, &callbackCalled](const QVector<ProgramData> &programs) {
0087                 data = programs;
0088                 callbackCalled = true;
0089             },
0090             [&errorCallbackCalled](Error) {
0091                 errorCallbackCalled = true;
0092             });
0093         QCOMPARE(callbackCalled, true);
0094         QCOMPARE(errorCallbackCalled, false);
0095         QCOMPARE(data.size(), 2);
0096 
0097         QCOMPARE(data.at(0).m_id, ProgramId("channel1_1672182000"));
0098         QCOMPARE(data.at(0).m_url, "");
0099         QCOMPARE(data.at(0).m_channelId, channelId);
0100         QCOMPARE(data.at(0).m_startTime, QDateTime::fromString("2022-12-28T01:00:00", Qt::ISODate));
0101         QCOMPARE(data.at(0).m_stopTime, QDateTime::fromString("2022-12-28T07:00:00", Qt::ISODate));
0102         QCOMPARE(data.at(0).m_title, "Title 1");
0103         QCOMPARE(data.at(0).m_subtitle, "Subtitle 1");
0104         QCOMPARE(data.at(0).m_description, "Description 1");
0105         QCOMPARE(data.at(0).m_descriptionFetched, true);
0106         QCOMPARE(data.at(0).m_categories.at(0), "Category 1");
0107 
0108         QCOMPARE(data.at(1).m_id, ProgramId("channel1_1672203600"));
0109         QCOMPARE(data.at(1).m_url, "");
0110         QCOMPARE(data.at(1).m_channelId, channelId);
0111         QCOMPARE(data.at(1).m_startTime, QDateTime::fromString("2022-12-28T07:00:00", Qt::ISODate));
0112         QCOMPARE(data.at(1).m_stopTime, QDateTime::fromString("2022-12-28T10:00:00", Qt::ISODate));
0113         QCOMPARE(data.at(1).m_title, "Title 2");
0114         QCOMPARE(data.at(1).m_subtitle, "Subtitle 2");
0115         QCOMPARE(data.at(1).m_description, "Description 2");
0116         QCOMPARE(data.at(1).m_descriptionFetched, true);
0117         QCOMPARE(data.at(1).m_categories.at(0), "Category 2");
0118     }
0119 
0120     void testFetchProgramDescription()
0121     {
0122         const ChannelId channelId("channel1");
0123         ProgramId programId;
0124 
0125         XmltvFetcher fetcher;
0126         QString data;
0127         bool callbackCalled = false;
0128         bool errorCallbackCalled = false;
0129         fetcher.fetchProgramDescription(
0130             channelId,
0131             ProgramId("channel1_1672182000"),
0132             "",
0133             [&data, &callbackCalled](const QString &description) {
0134                 data = description;
0135                 callbackCalled = true;
0136             },
0137             [&errorCallbackCalled](Error) {
0138                 errorCallbackCalled = true;
0139             });
0140         // nothing done, description already known after fetchProgram()
0141         QCOMPARE(callbackCalled, false);
0142         QCOMPARE(errorCallbackCalled, false);
0143         QCOMPARE(data, "");
0144     }
0145 };
0146 
0147 QTEST_GUILESS_MAIN(XmltvFetcherTest)
0148 
0149 #include "xmltvfetchertest.moc"