File indexing completed on 2024-05-19 04:01:10

0001 /*
0002     SPDX-FileCopyrightText: 2017 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: MIT
0005 */
0006 
0007 #include <provider.h>
0008 #include <surveyinfo.h>
0009 
0010 #include <QDebug>
0011 #include <QtTest/qtest.h>
0012 #include <QObject>
0013 #include <QSettings>
0014 #include <QSignalSpy>
0015 #include <QStandardPaths>
0016 #include <QUuid>
0017 
0018 using namespace KUserFeedback;
0019 
0020 class SurveyProviderTest : public QObject
0021 {
0022     Q_OBJECT
0023 private Q_SLOTS:
0024     void initTestCase()
0025     {
0026         qRegisterMetaType<KUserFeedback::SurveyInfo>();
0027 
0028         QCoreApplication::setOrganizationName(QStringLiteral("KDE"));
0029         QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org"));
0030         QCoreApplication::setApplicationName(QStringLiteral("surveyprovidertest"));
0031         QStandardPaths::setTestModeEnabled(true);
0032     }
0033 
0034     void testSurveySelect()
0035     {
0036         {
0037             QSettings s(QCoreApplication::organizationName(), QStringLiteral("UserFeedback.org.kde.surveyprovidertest"));;
0038             s.beginGroup(QLatin1String("UserFeedback"));
0039             s.remove(QLatin1String("LastSurvey"));
0040             s.remove(QLatin1String("CompletedSurveys"));
0041         }
0042         {
0043             QSettings s(QCoreApplication::organizationName(), QStringLiteral("UserFeedback"));;
0044             s.beginGroup(QLatin1String("UserFeedback"));
0045             s.remove(QLatin1String("LastSurvey"));
0046         }
0047 
0048         SurveyInfo s1;
0049         s1.setUuid(QUuid::createUuid());
0050         s1.setUrl(QUrl(QStringLiteral("https://www.kde.org")));
0051         QVERIFY(s1.isValid());
0052 
0053         Provider p;
0054         p.setSurveyInterval(90);
0055         QSignalSpy spy(&p, SIGNAL(surveyAvailable(KUserFeedback::SurveyInfo)));
0056         QVERIFY(spy.isValid());
0057 
0058         // global kill switch prevents survey
0059         bool rv = false;
0060         p.setEnabled(false);
0061         QMetaObject::invokeMethod(&p, "selectSurvey", Q_RETURN_ARG(bool, rv), Q_ARG(KUserFeedback::SurveyInfo, s1));
0062         QVERIFY(!rv);
0063         QVERIFY(spy.isEmpty());
0064 
0065         p.setEnabled(true);
0066         QMetaObject::invokeMethod(&p, "selectSurvey", Q_RETURN_ARG(bool, rv), Q_ARG(KUserFeedback::SurveyInfo, s1));
0067         QVERIFY(rv);
0068         QCOMPARE(spy.size(), 1);
0069 
0070         // again, not completed yet
0071         QMetaObject::invokeMethod(&p, "selectSurvey", Q_RETURN_ARG(bool, rv), Q_ARG(KUserFeedback::SurveyInfo, s1));
0072         QVERIFY(rv);
0073         QCOMPARE(spy.size(), 2);
0074         spy.clear();
0075 
0076         // survey completed, should no longer be accepted
0077         p.surveyCompleted(s1);
0078         QMetaObject::invokeMethod(&p, "selectSurvey", Q_RETURN_ARG(bool, rv), Q_ARG(KUserFeedback::SurveyInfo, s1));
0079         QVERIFY(!rv);
0080         QVERIFY(spy.isEmpty());
0081 
0082         SurveyInfo s2;
0083         s2.setUuid(QUuid::createUuid());
0084         s2.setUrl(QUrl(QStringLiteral("https://www.kde.org/survey2")));
0085         QVERIFY(s2.isValid());
0086 
0087         // next survey, but interval hasn't passed yet
0088         p.setSurveyInterval(90);
0089         QMetaObject::invokeMethod(&p, "selectSurvey", Q_RETURN_ARG(bool, rv), Q_ARG(KUserFeedback::SurveyInfo, s2));
0090         QVERIFY(!rv);
0091         QVERIFY(spy.isEmpty());
0092 
0093         // survey interval passed
0094         p.setSurveyInterval(0);
0095         QMetaObject::invokeMethod(&p, "selectSurvey", Q_RETURN_ARG(bool, rv), Q_ARG(KUserFeedback::SurveyInfo, s2));
0096         QVERIFY(rv);
0097 
0098         // global survey coordination prevents next survey
0099         p.setSurveyInterval(90);
0100         {
0101             QSettings s(QCoreApplication::organizationName(), QStringLiteral("UserFeedback.org.kde.surveyprovidertest"));;
0102             s.beginGroup(QLatin1String("UserFeedback"));
0103             s.remove(QLatin1String("LastSurvey"));
0104             s.remove(QLatin1String("CompletedSurveys"));
0105         }
0106         QMetaObject::invokeMethod(&p, "selectSurvey", Q_RETURN_ARG(bool, rv), Q_ARG(KUserFeedback::SurveyInfo, s1));
0107         QVERIFY(!rv);
0108     }
0109 };
0110 
0111 QTEST_GUILESS_MAIN(SurveyProviderTest)
0112 
0113 #include "surveyprovidertest.moc"