1 /* 2 SPDX-FileCopyrightText: 2018 Volker Krause <vkrause@kde.org> 3 4 SPDX-License-Identifier: LGPL-2.0-or-later 5 */ 6 7 #include "testhelper.h" 8 9 #include <applicationcontroller.h> 10 #include <pkpassmanager.h> 11 #include <reservationmanager.h> 12 #include <documentmanager.h> 13 #include <favoritelocationmodel.h> 14 #include <healthcertificatemanager.h> 15 #include <transfermanager.h> 16 #include <tripgroupmanager.h> 17 18 #include <KItinerary/ExtractorCapabilities> 19 #include <KItinerary/File> 20 21 #include <QUrl> 22 #include <QtTest/qtest.h> 23 #include <QSignalSpy> 24 #include <QStandardPaths> 25 #include <QTemporaryFile> 26 27 class AppControllerTest : public QObject 28 { 29 Q_OBJECT 30 private: readFile(const QString & fn)31 QByteArray readFile(const QString &fn) 32 { 33 QFile f(fn); 34 f.open(QFile::ReadOnly); 35 return f.readAll(); 36 } 37 hasZxing()38 bool hasZxing() 39 { 40 return KItinerary::ExtractorCapabilities::capabilitiesString().contains(QLatin1String("zxing"), Qt::CaseInsensitive); 41 } 42 43 private Q_SLOTS: initTestCase()44 void initTestCase() 45 { 46 qputenv("TZ", "UTC"); 47 QStandardPaths::setTestModeEnabled(true); 48 } 49 testImportData()50 void testImportData() 51 { 52 PkPassManager passMgr; 53 Test::clearAll(&passMgr); 54 QSignalSpy passSpy(&passMgr, &PkPassManager::passAdded); 55 QVERIFY(passSpy.isValid()); 56 57 ReservationManager resMgr; 58 Test::clearAll(&resMgr); 59 QSignalSpy resSpy(&resMgr, &ReservationManager::reservationAdded); 60 QVERIFY(resSpy.isValid()); 61 62 DocumentManager docMgr; 63 Test::clearAll(&docMgr); 64 65 HealthCertificateManager healthCertMgr; 66 67 ApplicationController appController; 68 QSignalSpy infoSpy(&appController, &ApplicationController::infoMessage); 69 appController.setPkPassManager(&passMgr); 70 appController.setReservationManager(&resMgr); 71 appController.setDocumentManager(&docMgr); 72 appController.setHealthCertificateManager(&healthCertMgr); 73 74 appController.importData(readFile(QLatin1String(SOURCE_DIR "/data/4U8465-v1.json"))); 75 QCOMPARE(resSpy.size(), 1); 76 QCOMPARE(passSpy.size(), 0); 77 QCOMPARE(infoSpy.size(), 1); 78 appController.importData(readFile(QLatin1String(SOURCE_DIR "/data/boardingpass-v1.pkpass"))); 79 QCOMPARE(resSpy.size(), 2); 80 QCOMPARE(passSpy.size(), 1); 81 QCOMPARE(infoSpy.size(), 2); 82 appController.importData("M1DOE/JOHN EXXX007 TXLBRUSN 2592 110Y"); 83 QCOMPARE(resSpy.size(), 3); 84 QCOMPARE(passSpy.size(), 1); 85 QCOMPARE(infoSpy.size(), 3); 86 appController.importData(readFile(QLatin1String(SOURCE_DIR "/data/iata-bcbp-demo.pdf"))); 87 if (!hasZxing()) { 88 QSKIP("Built without ZXing"); 89 } 90 QCOMPARE(resSpy.size(), 4); 91 QCOMPARE(passSpy.size(), 1); 92 QCOMPARE(infoSpy.size(), 4); 93 QCOMPARE(docMgr.documents().size(), 1); 94 } 95 testImportFile()96 void testImportFile() 97 { 98 PkPassManager passMgr; 99 Test::clearAll(&passMgr); 100 QSignalSpy passSpy(&passMgr, &PkPassManager::passAdded); 101 QVERIFY(passSpy.isValid()); 102 103 ReservationManager resMgr; 104 Test::clearAll(&resMgr); 105 QSignalSpy resSpy(&resMgr, &ReservationManager::reservationAdded); 106 QVERIFY(resSpy.isValid()); 107 108 DocumentManager docMgr; 109 Test::clearAll(&docMgr); 110 111 HealthCertificateManager healthCertMgr; 112 113 ApplicationController appController; 114 QSignalSpy infoSpy(&appController, &ApplicationController::infoMessage); 115 appController.setPkPassManager(&passMgr); 116 appController.setReservationManager(&resMgr); 117 appController.setDocumentManager(&docMgr); 118 appController.setHealthCertificateManager(&healthCertMgr); 119 120 appController.importFromUrl(QUrl::fromLocalFile(QLatin1String(SOURCE_DIR "/data/4U8465-v1.json"))); 121 QCOMPARE(resSpy.size(), 1); 122 QCOMPARE(passSpy.size(), 0); 123 QCOMPARE(infoSpy.size(), 1); 124 appController.importFromUrl(QUrl::fromLocalFile(QLatin1String(SOURCE_DIR "/data/boardingpass-v1.pkpass"))); 125 QCOMPARE(resSpy.size(), 2); 126 QCOMPARE(passSpy.size(), 1); 127 QCOMPARE(infoSpy.size(), 2); 128 appController.importFromUrl(QUrl::fromLocalFile(QLatin1String(SOURCE_DIR "/data/iata-bcbp-demo.pdf"))); 129 if (!hasZxing()) { 130 QSKIP("Built without ZXing"); 131 } 132 QCOMPARE(resSpy.size(), 3); 133 QCOMPARE(passSpy.size(), 1); 134 QCOMPARE(infoSpy.size(), 3); 135 QCOMPARE(docMgr.documents().size(), 1); 136 } 137 testExportFile()138 void testExportFile() 139 { 140 PkPassManager passMgr; 141 Test::clearAll(&passMgr); 142 143 ReservationManager resMgr; 144 Test::clearAll(&resMgr); 145 146 DocumentManager docMgr; 147 Test::clearAll(&docMgr); 148 149 TripGroupManager tripGroupMgr; 150 tripGroupMgr.setReservationManager(&resMgr); 151 TransferManager transferMgr; 152 transferMgr.setReservationManager(&resMgr); 153 transferMgr.setTripGroupManager(&tripGroupMgr); 154 155 FavoriteLocationModel favLoc; 156 157 HealthCertificateManager healthCertMgr; 158 159 ApplicationController appController; 160 QSignalSpy infoSpy(&appController, &ApplicationController::infoMessage); 161 appController.setPkPassManager(&passMgr); 162 appController.setReservationManager(&resMgr); 163 appController.setDocumentManager(&docMgr); 164 appController.setTransferManager(&transferMgr); 165 appController.setFavoriteLocationModel(&favLoc); 166 appController.setHealthCertificateManager(&healthCertMgr); 167 168 appController.importFromUrl(QUrl::fromLocalFile(QLatin1String(SOURCE_DIR "/data/4U8465-v1.json"))); 169 appController.importFromUrl(QUrl::fromLocalFile(QLatin1String(SOURCE_DIR "/data/boardingpass-v1.pkpass"))); 170 QCOMPARE(resMgr.batches().size(), 2); 171 QCOMPARE(passMgr.passes().size(), 1); 172 QCOMPARE(infoSpy.size(), 2); 173 174 QTemporaryFile tmp; 175 QVERIFY(tmp.open()); 176 tmp.close(); 177 appController.exportToFile(QUrl::fromLocalFile(tmp.fileName())); 178 QCOMPARE(infoSpy.size(), 3); 179 180 KItinerary::File f(tmp.fileName()); 181 QVERIFY(f.open(KItinerary::File::Read)); 182 QCOMPARE(f.reservations().size(), 2); 183 QCOMPARE(f.passes().size(), 1); 184 185 Test::clearAll(&passMgr); 186 Test::clearAll(&resMgr); 187 Test::clearAll(&docMgr); 188 QCOMPARE(resMgr.batches().size(), 0); 189 QCOMPARE(passMgr.passes().size(), 0); 190 191 appController.importFromUrl(QUrl::fromLocalFile(tmp.fileName())); 192 QCOMPARE(resMgr.batches().size(), 2); 193 QCOMPARE(passMgr.passes().size(), 1); 194 QCOMPARE(infoSpy.size(), 4); 195 196 Test::clearAll(&passMgr); 197 Test::clearAll(&resMgr); 198 QCOMPARE(resMgr.batches().size(), 0); 199 QCOMPARE(passMgr.passes().size(), 0); 200 201 QFile bundle(tmp.fileName()); 202 QVERIFY(bundle.open(QFile::ReadOnly)); 203 appController.importData(bundle.readAll()); 204 QCOMPARE(resMgr.batches().size(), 2); 205 QCOMPARE(passMgr.passes().size(), 1); 206 QCOMPARE(infoSpy.size(), 5); 207 } 208 }; 209 210 QTEST_GUILESS_MAIN(AppControllerTest) 211 212 #include "applicationcontrollertest.moc" 213