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"