File indexing completed on 2024-05-19 05:57:19

0001 // SPDX-FileCopyrightText: 2023 Plata Hill <plata.hill@kdemail.net>
0002 // SPDX-License-Identifier: LGPL-2.1-or-later
0003 
0004 #include "../src/database.h"
0005 
0006 #include <QStandardPaths>
0007 #include <QTest>
0008 
0009 #include <algorithm>
0010 
0011 class DatabaseTest : public QObject
0012 {
0013     Q_OBJECT
0014 private Q_SLOTS:
0015     void initTestCase()
0016     {
0017         QStandardPaths::setTestModeEnabled(true);
0018 
0019         Database::instance().execute(QStringLiteral("DELETE FROM \"Groups\";"));
0020         QCOMPARE(Database::instance().groupCount(), 0);
0021         Database::instance().execute(QStringLiteral("DELETE FROM Channels;"));
0022         QCOMPARE(Database::instance().channelCount(), 0);
0023         Database::instance().execute(QStringLiteral("DELETE FROM GroupChannels;"));
0024         Database::instance().execute(QStringLiteral("DELETE FROM Programs;"));
0025         Database::instance().execute(QStringLiteral("DELETE FROM ProgramCategories;"));
0026         Database::instance().execute(QStringLiteral("DELETE FROM Favorites;"));
0027         QCOMPARE(Database::instance().favoriteCount(), 0);
0028     }
0029 
0030     void testAddGroup()
0031     {
0032         GroupData data;
0033         data.m_id = GroupId("Group1");
0034         data.m_name = "Group 1";
0035         data.m_url = "GroupUrl1";
0036 
0037         Database::instance().addGroup(data);
0038 
0039         QCOMPARE(Database::instance().groupCount(), 1);
0040         const QVector<GroupData> groups = Database::instance().groups();
0041         const GroupData &group1 = groups.at(0);
0042         QCOMPARE(group1.m_id.value(), "Group1");
0043         QCOMPARE(group1.m_name, "Group 1");
0044         QCOMPARE(group1.m_url, "GroupUrl1");
0045     }
0046 
0047     void testAddGroups()
0048     {
0049         GroupData data2;
0050         data2.m_id = GroupId("Group2");
0051         data2.m_name = "Group 2";
0052         data2.m_url = "GroupUrl2";
0053         GroupData data3;
0054         data3.m_id = GroupId("Group3");
0055         data3.m_name = "Group 3";
0056         data3.m_url = "GroupUrl3";
0057         QVector<GroupData> data;
0058         data.push_back(data2);
0059         data.push_back(data3);
0060 
0061         Database::instance().addGroups(data);
0062 
0063         QCOMPARE(Database::instance().groupCount(), 3);
0064         const QVector<GroupData> groups = Database::instance().groups();
0065         const GroupData &group1 = groups.at(0);
0066         QCOMPARE(group1.m_id.value(), "Group1");
0067         QCOMPARE(group1.m_name, "Group 1");
0068         QCOMPARE(group1.m_url, "GroupUrl1");
0069         const GroupData &group2 = groups.at(1);
0070         QCOMPARE(group2.m_id.value(), "Group2");
0071         QCOMPARE(group2.m_name, "Group 2");
0072         QCOMPARE(group2.m_url, "GroupUrl2");
0073         const GroupData &group3 = groups.at(2);
0074         QCOMPARE(group3.m_id.value(), "Group3");
0075         QCOMPARE(group3.m_name, "Group 3");
0076         QCOMPARE(group3.m_url, "GroupUrl3");
0077     }
0078 
0079     void testGroupExists()
0080     {
0081         QCOMPARE(Database::instance().groupExists(GroupId("Group1")), true);
0082         QCOMPARE(Database::instance().groupExists(GroupId("Group2")), true);
0083         QCOMPARE(Database::instance().groupExists(GroupId("Group3")), true);
0084 
0085         QCOMPARE(Database::instance().groupExists(GroupId("Group0")), false);
0086     }
0087 
0088     void testAddChannel()
0089     {
0090         ChannelData data;
0091         data.m_id = ChannelId("Channel1");
0092         data.m_name = "Channel 1";
0093         data.m_url = "Channel1Url";
0094         data.m_image = "Channel1Image";
0095 
0096         Database::instance().addChannel(data, GroupId("Group1"));
0097 
0098         QCOMPARE(Database::instance().channelCount(), 1);
0099         const QVector<ChannelData> channels = Database::instance().channels(false);
0100         const ChannelData &channel1 = channels.at(0);
0101         QCOMPARE(channel1.m_id.value(), "Channel1");
0102         QCOMPARE(channel1.m_name, "Channel 1");
0103         QCOMPARE(channel1.m_url, "Channel1Url");
0104         QCOMPARE(channel1.m_image, "Channel1Image");
0105     }
0106 
0107     void testGroupsForChannel()
0108     {
0109         const QVector<GroupData> groups = Database::instance().groups(ChannelId("Channel1"));
0110         QCOMPARE(groups.size(), 1);
0111         QCOMPARE(groups.at(0).m_id.value(), "Group1");
0112     }
0113 
0114     void testAddChannels()
0115     {
0116         ChannelData data2;
0117         data2.m_id = ChannelId("Channel2");
0118         data2.m_name = "Channel 2";
0119         data2.m_url = "Channel2Url";
0120         data2.m_image = "Channel2Image";
0121         ChannelData data3;
0122         data3.m_id = ChannelId("Channel3");
0123         data3.m_name = "Channel 3";
0124         data3.m_url = "Channel3Url";
0125         data3.m_image = "Channel3Image";
0126         QList<ChannelData> data;
0127         data.push_back(data2);
0128         data.push_back(data3);
0129 
0130         Database::instance().addChannels(data, GroupId("Group1"));
0131 
0132         QCOMPARE(Database::instance().channelCount(), 3);
0133         const QVector<ChannelData> channels = Database::instance().channels(false);
0134         const ChannelData &channel1 = channels.at(0);
0135         QCOMPARE(channel1.m_id.value(), "Channel1");
0136         QCOMPARE(channel1.m_name, "Channel 1");
0137         QCOMPARE(channel1.m_url, "Channel1Url");
0138         QCOMPARE(channel1.m_image, "Channel1Image");
0139         const ChannelData &channel2 = channels.at(1);
0140         QCOMPARE(channel2.m_id.value(), "Channel2");
0141         QCOMPARE(channel2.m_name, "Channel 2");
0142         QCOMPARE(channel2.m_url, "Channel2Url");
0143         QCOMPARE(channel2.m_image, "Channel2Image");
0144         const ChannelData &channel3 = channels.at(2);
0145         QCOMPARE(channel3.m_id.value(), "Channel3");
0146         QCOMPARE(channel3.m_name, "Channel 3");
0147         QCOMPARE(channel3.m_url, "Channel3Url");
0148         QCOMPARE(channel3.m_image, "Channel3Image");
0149     }
0150 
0151     void testChannelExists()
0152     {
0153         QCOMPARE(Database::instance().channelExists(ChannelId("Channel1")), true);
0154         QCOMPARE(Database::instance().channelExists(ChannelId("Channel2")), true);
0155         QCOMPARE(Database::instance().channelExists(ChannelId("Channel3")), true);
0156 
0157         QCOMPARE(Database::instance().channelExists(ChannelId("Channel0")), false);
0158     }
0159 
0160     void testChannel()
0161     {
0162         const ChannelData &channel1 = Database::instance().channel(ChannelId("Channel1"));
0163         QCOMPARE(channel1.m_id.value(), "Channel1");
0164         QCOMPARE(channel1.m_name, "Channel 1");
0165         QCOMPARE(channel1.m_url, "Channel1Url");
0166         QCOMPARE(channel1.m_image, "Channel1Image");
0167     }
0168 
0169     void testAddFavorite()
0170     {
0171         QCOMPARE(Database::instance().favoriteCount(), 0);
0172         Database::instance().addFavorite(ChannelId("Channel1"));
0173         QCOMPARE(Database::instance().favoriteCount(), 1);
0174         Database::instance().addFavorite(ChannelId("Channel2"));
0175         QCOMPARE(Database::instance().favoriteCount(), 2);
0176     }
0177 
0178     void testFavorites()
0179     {
0180         const QVector<ChannelId> favorites = Database::instance().favorites();
0181         QCOMPARE(favorites.at(0).value(), "Channel1");
0182         QCOMPARE(favorites.at(1).value(), "Channel2");
0183     }
0184 
0185     void testChannelsOnlyFavorites()
0186     {
0187         const QVector<ChannelData> channels = Database::instance().channels(true);
0188         QCOMPARE(channels.size(), 2);
0189         QCOMPARE(channels.at(0).m_id.value(), "Channel1");
0190         QCOMPARE(channels.at(1).m_id.value(), "Channel2");
0191     }
0192 
0193     void testSortFavorites()
0194     {
0195         QVector<ChannelId> data;
0196         data.push_back(ChannelId("Channel2"));
0197         data.push_back(ChannelId("Channel1"));
0198         Database::instance().sortFavorites(data);
0199         const QVector<ChannelId> favorites = Database::instance().favorites();
0200         QCOMPARE(favorites.size(), 2);
0201         QCOMPARE(favorites.at(0).value(), "Channel2");
0202         QCOMPARE(favorites.at(1).value(), "Channel1");
0203     }
0204 
0205     void testIsFavorite()
0206     {
0207         QCOMPARE(Database::instance().isFavorite(ChannelId("Channel1")), true);
0208         QCOMPARE(Database::instance().isFavorite(ChannelId("Channel2")), true);
0209 
0210         QCOMPARE(Database::instance().isFavorite(ChannelId("Channel3")), false);
0211 
0212         QCOMPARE(Database::instance().isFavorite(ChannelId("Channel0")), false);
0213     }
0214 
0215     void testRemoveFavorite()
0216     {
0217         QCOMPARE(Database::instance().favoriteCount(), 2);
0218         Database::instance().removeFavorite(ChannelId("Channel2"));
0219         QCOMPARE(Database::instance().favoriteCount(), 1);
0220         QCOMPARE(Database::instance().isFavorite(ChannelId("Channel1")), true);
0221         QCOMPARE(Database::instance().isFavorite(ChannelId("Channel2")), false);
0222     }
0223 
0224     void testClearFavorites()
0225     {
0226         QCOMPARE(Database::instance().favoriteCount(), 1);
0227         Database::instance().clearFavorites();
0228         QCOMPARE(Database::instance().favoriteCount(), 0);
0229         QCOMPARE(Database::instance().isFavorite(ChannelId("Channel1")), false);
0230     }
0231 
0232     void testAddProgram()
0233     {
0234         ProgramData data;
0235         data.m_id = ProgramId("Program1");
0236         data.m_url = "Program1Url";
0237         data.m_channelId = ChannelId("Channel1");
0238         data.m_startTime = QDateTime::fromString("2022-12-28T00:00:00", Qt::ISODate);
0239         data.m_stopTime = QDateTime::fromString("2022-12-28T01:00:00", Qt::ISODate);
0240         data.m_title = "Program1Title";
0241         data.m_subtitle = "Program1Subtitle";
0242         data.m_description = "Program1Description";
0243         data.m_descriptionFetched = true;
0244         data.m_categories = {"Category1"};
0245 
0246         Database::instance().addProgram(data);
0247 
0248         QCOMPARE(Database::instance().programCount(ChannelId("Channel1")), 1);
0249         const QVector<ProgramData> programs = Database::instance().programs(ChannelId("Channel1"));
0250         const ProgramData &program1 = programs.at(0);
0251         QCOMPARE(program1.m_id.value(), "Program1");
0252         QCOMPARE(program1.m_url, "Program1Url");
0253         QCOMPARE(program1.m_channelId.value(), "Channel1");
0254         QCOMPARE(program1.m_startTime, QDateTime::fromString("2022-12-28T00:00:00", Qt::ISODate));
0255         QCOMPARE(program1.m_stopTime, QDateTime::fromString("2022-12-28T01:00:00", Qt::ISODate));
0256         QCOMPARE(program1.m_title, "Program1Title");
0257         QCOMPARE(program1.m_subtitle, "Program1Subtitle");
0258         QCOMPARE(program1.m_description, "Program1Description");
0259         QCOMPARE(program1.m_descriptionFetched, true);
0260         QCOMPARE(program1.m_categories, {"Category1"});
0261     }
0262 
0263     void testAddPrograms()
0264     {
0265         ProgramData data2;
0266         data2.m_id = ProgramId("Program2");
0267         data2.m_url = "Program2Url";
0268         data2.m_channelId = ChannelId("Channel1");
0269         data2.m_startTime = QDateTime::fromString("2022-12-28T01:00:00", Qt::ISODate);
0270         data2.m_stopTime = QDateTime::fromString("2022-12-28T02:00:00", Qt::ISODate);
0271         data2.m_title = "Program2Title";
0272         data2.m_subtitle = "Program2Subtitle";
0273         data2.m_description = "Program2Description";
0274         data2.m_descriptionFetched = false;
0275         data2.m_categories = {"Category2"};
0276         ProgramData data3;
0277         data3.m_id = ProgramId("Program3");
0278         data3.m_url = "Program3Url";
0279         data3.m_channelId = ChannelId("Channel2");
0280         data3.m_startTime = QDateTime::fromString("2022-12-28T02:00:00", Qt::ISODate);
0281         data3.m_stopTime = QDateTime::fromString("2022-12-28T03:00:00", Qt::ISODate);
0282         data3.m_title = "Program3Title";
0283         data3.m_subtitle = "Program3Subtitle";
0284         data3.m_description = "Program3Description";
0285         data3.m_descriptionFetched = true;
0286         data3.m_categories = {"Category1", "Category2"};
0287         QVector<ProgramData> data;
0288         data.push_back(data2);
0289         data.push_back(data3);
0290 
0291         Database::instance().addPrograms(data);
0292 
0293         QCOMPARE(Database::instance().programCount(ChannelId("Channel1")), 2);
0294         QCOMPARE(Database::instance().programCount(ChannelId("Channel2")), 1);
0295         const QVector<ProgramData> programsChannel1 = Database::instance().programs(ChannelId("Channel1"));
0296         const ProgramData &program1 = programsChannel1.at(0);
0297         QCOMPARE(program1.m_id.value(), "Program1");
0298         QCOMPARE(program1.m_url, "Program1Url");
0299         QCOMPARE(program1.m_channelId.value(), "Channel1");
0300         QCOMPARE(program1.m_startTime, QDateTime::fromString("2022-12-28T00:00:00", Qt::ISODate));
0301         QCOMPARE(program1.m_stopTime, QDateTime::fromString("2022-12-28T01:00:00", Qt::ISODate));
0302         QCOMPARE(program1.m_title, "Program1Title");
0303         QCOMPARE(program1.m_subtitle, "Program1Subtitle");
0304         QCOMPARE(program1.m_description, "Program1Description");
0305         QCOMPARE(program1.m_descriptionFetched, true);
0306         QCOMPARE(program1.m_categories, {"Category1"});
0307         const ProgramData &program2 = programsChannel1.at(1);
0308         QCOMPARE(program2.m_id.value(), "Program2");
0309         QCOMPARE(program2.m_url, "Program2Url");
0310         QCOMPARE(program2.m_channelId.value(), "Channel1");
0311         QCOMPARE(program2.m_startTime, QDateTime::fromString("2022-12-28T01:00:00", Qt::ISODate));
0312         QCOMPARE(program2.m_stopTime, QDateTime::fromString("2022-12-28T02:00:00", Qt::ISODate));
0313         QCOMPARE(program2.m_title, "Program2Title");
0314         QCOMPARE(program2.m_subtitle, "Program2Subtitle");
0315         QCOMPARE(program2.m_description, "Program2Description");
0316         QCOMPARE(program2.m_descriptionFetched, false);
0317         QCOMPARE(program2.m_categories, {"Category2"});
0318         const QVector<ProgramData> programsChannel2 = Database::instance().programs(ChannelId("Channel2"));
0319         const ProgramData &program3 = programsChannel2.at(0);
0320         QCOMPARE(program3.m_id.value(), "Program3");
0321         QCOMPARE(program3.m_url, "Program3Url");
0322         QCOMPARE(program3.m_channelId.value(), "Channel2");
0323         QCOMPARE(program3.m_startTime, QDateTime::fromString("2022-12-28T02:00:00", Qt::ISODate));
0324         QCOMPARE(program3.m_stopTime, QDateTime::fromString("2022-12-28T03:00:00", Qt::ISODate));
0325         QCOMPARE(program3.m_title, "Program3Title");
0326         QCOMPARE(program3.m_subtitle, "Program3Subtitle");
0327         QCOMPARE(program3.m_description, "Program3Description");
0328         QCOMPARE(program3.m_descriptionFetched, true);
0329         QVector<QString> sortedCategories = program3.m_categories;
0330         std::sort(sortedCategories.begin(), sortedCategories.end());
0331         QCOMPARE(sortedCategories.at(0), "Category1");
0332         QCOMPARE(sortedCategories.at(1), "Category2");
0333     }
0334 
0335     void testProgramExists()
0336     {
0337         QCOMPARE(Database::instance().programExists(ChannelId("Channel1"), QDateTime::fromString("2022-12-28T02:00:00", Qt::ISODate)), true);
0338         QCOMPARE(Database::instance().programExists(ChannelId("Channel1"), QDateTime::fromString("2022-12-28T02:00:01", Qt::ISODate)), false);
0339     }
0340 
0341     void testUpdateProgramDescription()
0342     {
0343         Database::instance().updateProgramDescription(ProgramId("Program2"), "Program2DescriptionUpdated");
0344         const QVector<ProgramData> programsChannel1 = Database::instance().programs(ChannelId("Channel1"));
0345         const ProgramData &program2 = programsChannel1.at(1);
0346         QCOMPARE(program2.m_description, "Program2DescriptionUpdated");
0347         QCOMPARE(program2.m_descriptionFetched, true);
0348     }
0349 
0350     void testPrograms()
0351     {
0352         const QMap<ChannelId, QVector<ProgramData>> programs = Database::instance().programs();
0353         const QVector<ProgramData> programsChannel1 = programs[ChannelId("Channel1")];
0354         QCOMPARE(programsChannel1.size(), 2);
0355         QCOMPARE(programsChannel1.at(0).m_id.value(), "Program1");
0356         QCOMPARE(programsChannel1.at(1).m_id.value(), "Program2");
0357         const QVector<ProgramData> programsChannel2 = programs[ChannelId("Channel2")];
0358         QCOMPARE(programsChannel2.size(), 1);
0359         QCOMPARE(programsChannel2.at(0).m_id.value(), "Program3");
0360     }
0361 };
0362 
0363 QTEST_GUILESS_MAIN(DatabaseTest)
0364 
0365 #include "databasetest.moc"