File indexing completed on 2024-05-12 05:13:46
0001 /* 0002 SPDX-FileCopyrightText: 2018 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "testhelper.h" 0008 #include "mocknetworkaccessmanager.h" 0009 0010 #include "pkpassmanager.h" 0011 0012 #include <QUrl> 0013 #include <QtTest/qtest.h> 0014 #include <QSignalSpy> 0015 #include <QStandardPaths> 0016 0017 void initLocale() 0018 { 0019 qputenv("LC_ALL", "en_US.utf-8"); 0020 qputenv("LANG", "C"); 0021 } 0022 0023 Q_CONSTRUCTOR_FUNCTION(initLocale) 0024 0025 static MockNetworkAccessManager s_nam; 0026 static QNetworkAccessManager* namFactory() { return &s_nam; } 0027 0028 class PkPassManagerTest : public QObject 0029 { 0030 Q_OBJECT 0031 private Q_SLOTS: 0032 void initTestCase() 0033 { 0034 QStandardPaths::setTestModeEnabled(true); 0035 } 0036 0037 void testImport() 0038 { 0039 PkPassManager mgr; 0040 Test::clearAll(&mgr); 0041 const auto now = QDateTime::currentDateTime().addSecs(-1); 0042 0043 QSignalSpy addSpy(&mgr, &PkPassManager::passAdded); 0044 QVERIFY(addSpy.isValid()); 0045 QSignalSpy updateSpy(&mgr, &PkPassManager::passUpdated); 0046 QVERIFY(updateSpy.isValid()); 0047 QSignalSpy rmSpy(&mgr, &PkPassManager::passRemoved); 0048 QVERIFY(rmSpy.isValid()); 0049 0050 const auto passId = QStringLiteral("pass.booking.kde.org/MTIzNA=="); 0051 QVERIFY(mgr.passes().isEmpty()); 0052 QCOMPARE(mgr.pass(passId), nullptr); 0053 QVERIFY(!mgr.updateTime(passId).isValid()); 0054 0055 mgr.importPass(QUrl::fromLocalFile(QLatin1StringView(SOURCE_DIR "/data/boardingpass-v1.pkpass"))); 0056 QCOMPARE(addSpy.size(), 1); 0057 QCOMPARE(addSpy.at(0).at(0).toString(), passId); 0058 QVERIFY(updateSpy.isEmpty()); 0059 QVERIFY(mgr.pass(passId)); 0060 QVERIFY(mgr.updateTime(passId) >= now); 0061 0062 auto passes = mgr.passes(); 0063 QCOMPARE(passes.size(), 1); 0064 QCOMPARE(passes.at(0), passId); 0065 0066 mgr.importPass(QUrl::fromLocalFile(QLatin1StringView(SOURCE_DIR "/data/boardingpass-v2.pkpass"))); 0067 QCOMPARE(addSpy.size(), 1); 0068 QCOMPARE(updateSpy.size(), 1); 0069 QCOMPARE(mgr.passes().size(), 1); 0070 QCOMPARE(updateSpy.at(0).at(0).toString(), passId); 0071 QCOMPARE(updateSpy.at(0).at(1).toStringList().size(), 1); 0072 QCOMPARE(updateSpy.at(0).at(1).toStringList().at(0), QStringLiteral("Gate changed to G30.")); 0073 QVERIFY(mgr.pass(passId)); 0074 0075 Test::clearAll(&mgr); 0076 QCOMPARE(addSpy.size(), 1); 0077 QCOMPARE(updateSpy.size(), 1); 0078 QCOMPARE(rmSpy.size(), 1); 0079 QCOMPARE(rmSpy.at(0).at(0).toString(), passId); 0080 QVERIFY(mgr.passes().isEmpty()); 0081 QCOMPARE(mgr.pass(passId), nullptr); 0082 } 0083 0084 void testCaptivePortalFailure() 0085 { 0086 PkPassManager mgr; 0087 mgr.setNetworkAccessManagerFactory(namFactory); 0088 Test::clearAll(&mgr); 0089 QSignalSpy addSpy(&mgr, &PkPassManager::passAdded); 0090 QSignalSpy updateSpy(&mgr, &PkPassManager::passUpdated); 0091 0092 mgr.importPass(QUrl::fromLocalFile(QLatin1StringView(SOURCE_DIR "/data/updateable-boardingpass.pkpass"))); 0093 QCOMPARE(mgr.passes().size(), 1); 0094 QCOMPARE(addSpy.size(), 1); 0095 addSpy.clear(); 0096 const auto passId = mgr.passes()[0]; 0097 QVERIFY(mgr.canUpdate(mgr.pass(passId))); 0098 0099 s_nam.replies.push({QNetworkReply::NoError, 200, QByteArray("hello from the captive portal!"), QString()}); 0100 0101 mgr.updatePass(passId); 0102 QTest::qWait(0); 0103 0104 QCOMPARE(addSpy.size(), 0); 0105 QCOMPARE(updateSpy.size(), 0); 0106 } 0107 }; 0108 0109 QTEST_GUILESS_MAIN(PkPassManagerTest) 0110 0111 #include "pkpassmanagertest.moc"