File indexing completed on 2024-05-12 05:12:43
0001 /* 0002 SPDX-FileCopyrightText: 2017-2024 Laurent Montel <montel@kde.org> 0003 SPDX-FileCopyrightText: 2017 David Faure <faure@kde.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "jobtrackertest.h" 0009 #include "jobtracker.h" 0010 #include <QSignalSpy> 0011 #include <QTest> 0012 #include <akonadi/private/instance_p.h> 0013 0014 static QString intPairListToString(const QVariant &var) 0015 { 0016 const auto arg = var.value<QList<QPair<int, int>>>(); 0017 QString ret; 0018 for (const auto &pair : arg) { 0019 if (!ret.isEmpty()) { 0020 ret += QLatin1Char(' '); 0021 } 0022 ret += QString::number(pair.first) + QLatin1Char(',') + QString::number(pair.second); 0023 } 0024 return ret; 0025 } 0026 0027 JobTrackerTest::JobTrackerTest(QObject *parent) 0028 : QObject(parent) 0029 { 0030 } 0031 0032 JobTrackerTest::~JobTrackerTest() = default; 0033 0034 void JobTrackerTest::initTestCase() 0035 { 0036 // Don't interfere with a running akonadiconsole 0037 Akonadi::Instance::setIdentifier(QStringLiteral("jobtrackertest")); 0038 0039 qRegisterMetaType<QList<QPair<int, int>>>(); 0040 } 0041 0042 void JobTrackerTest::shouldBeEmpty() 0043 { 0044 JobTracker tracker("jobtracker"); 0045 QVERIFY(tracker.sessions().isEmpty()); 0046 QCOMPARE(tracker.parentId(0), -1); 0047 } 0048 0049 void JobTrackerTest::shouldDisplayOneJob() 0050 { 0051 // GIVEN 0052 JobTracker tracker("jobtracker"); 0053 const QString jobName(QStringLiteral("job1")); 0054 QSignalSpy spyAboutToAdd(&tracker, &JobTracker::aboutToAdd); 0055 QSignalSpy spyUpdated(&tracker, &JobTracker::updated); 0056 0057 // WHEN 0058 tracker.jobCreated(QStringLiteral("session1"), jobName, QString(), QStringLiteral("type1"), QStringLiteral("debugStr1")); 0059 0060 // THEN 0061 QCOMPARE(tracker.sessions().count(), 1); 0062 QCOMPARE(tracker.sessions().at(0), QStringLiteral("session1")); 0063 QCOMPARE(tracker.idForSession(QStringLiteral("session1")), -2); 0064 QCOMPARE(tracker.sessionForId(-2), QStringLiteral("session1")); 0065 QCOMPARE(tracker.parentId(-2), -1); 0066 QCOMPARE(tracker.jobCount(-2), 1); 0067 QCOMPARE(tracker.jobIdAt(0, -2), 42); // job is child of session 0068 0069 QCOMPARE(tracker.info(42).name, jobName); 0070 QCOMPARE(tracker.info(42).state, JobInfo::Initial); 0071 QCOMPARE(tracker.parentId(42), -2); 0072 QCOMPARE(tracker.rowForJob(42, -2), 0); 0073 QCOMPARE(tracker.jobCount(42), 0); // no child 0074 0075 QCOMPARE(spyAboutToAdd.count(), 2); 0076 QCOMPARE(spyAboutToAdd.at(0).at(0).toInt(), 0); 0077 QCOMPARE(spyAboutToAdd.at(0).at(1).toInt(), -1); 0078 QCOMPARE(spyAboutToAdd.at(1).at(0).toInt(), 0); 0079 QCOMPARE(spyAboutToAdd.at(1).at(1).toInt(), -2); 0080 QCOMPARE(spyUpdated.count(), 0); 0081 } 0082 0083 void JobTrackerTest::shouldHandleJobStart() 0084 { 0085 // GIVEN 0086 JobTracker tracker("jobtracker"); 0087 const QString jobName(QStringLiteral("job1")); 0088 tracker.jobCreated(QStringLiteral("session1"), jobName, QString(), QStringLiteral("type1"), QStringLiteral("debugStr1")); 0089 tracker.signalUpdates(); 0090 QSignalSpy spyAdded(&tracker, &JobTracker::added); 0091 QSignalSpy spyUpdated(&tracker, &JobTracker::updated); 0092 0093 // WHEN 0094 tracker.jobStarted(jobName); 0095 0096 // THEN 0097 QCOMPARE(tracker.info(42).state, JobInfo::Running); 0098 0099 tracker.signalUpdates(); 0100 0101 QCOMPARE(spyAdded.count(), 0); 0102 QCOMPARE(spyUpdated.count(), 1); 0103 QCOMPARE(intPairListToString(spyUpdated.at(0).at(0)), QStringLiteral("0,-2")); 0104 } 0105 0106 void JobTrackerTest::shouldHandleJobEnd() 0107 { 0108 // GIVEN 0109 JobTracker tracker("jobtracker"); 0110 const QString jobName(QStringLiteral("job1")); 0111 tracker.jobCreated(QStringLiteral("session1"), jobName, QString(), QStringLiteral("type1"), QStringLiteral("debugStr1")); 0112 tracker.jobStarted(jobName); 0113 tracker.signalUpdates(); 0114 QSignalSpy spyAdded(&tracker, &JobTracker::added); 0115 QSignalSpy spyUpdated(&tracker, &JobTracker::updated); 0116 0117 // WHEN 0118 tracker.jobEnded(QStringLiteral("job1"), QStringLiteral("errorString")); 0119 0120 // THEN 0121 QCOMPARE(tracker.info(42).state, JobInfo::Failed); 0122 QCOMPARE(tracker.info(42).error, QStringLiteral("errorString")); 0123 0124 tracker.signalUpdates(); 0125 0126 QCOMPARE(spyAdded.count(), 0); 0127 QCOMPARE(spyUpdated.count(), 1); 0128 QCOMPARE(intPairListToString(spyUpdated.at(0).at(0)), QStringLiteral("0,-2")); 0129 } 0130 0131 QTEST_GUILESS_MAIN(JobTrackerTest) 0132 0133 #include "moc_jobtrackertest.cpp"