Warning, file /utilities/telly-skout/autotests/databasetest.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/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"