File indexing completed on 2024-05-12 05:13:47
0001 /* 0002 SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "testhelper.h" 0008 0009 #include "transfer.h" 0010 #include "transfermanager.h" 0011 #include "applicationcontroller.h" 0012 #include "reservationmanager.h" 0013 #include "tripgroupmanager.h" 0014 #include "favoritelocationmodel.h" 0015 #include "livedatamanager.h" 0016 0017 #include <QtTest/qtest.h> 0018 #include <QSignalSpy> 0019 #include <QStandardPaths> 0020 #include <QTimeZone> 0021 0022 class TransferTest : public QObject 0023 { 0024 Q_OBJECT 0025 private Q_SLOTS: 0026 void initTestCase() 0027 { 0028 qputenv("TZ", "UTC"); 0029 QStandardPaths::setTestModeEnabled(true); 0030 0031 qRegisterMetaType<Transfer::Alignment>(); 0032 } 0033 0034 void testTransferManager() 0035 { 0036 ReservationManager resMgr; 0037 Test::clearAll(&resMgr); 0038 auto ctrl = Test::makeAppController(); 0039 ctrl->setReservationManager(&resMgr); 0040 0041 TripGroupManager::clear(); 0042 TripGroupManager tgMgr; 0043 tgMgr.setReservationManager(&resMgr); 0044 0045 FavoriteLocationModel favLocModel; 0046 while (favLocModel.rowCount()) { 0047 favLocModel.removeLocation(0); 0048 } 0049 FavoriteLocation favLoc; 0050 favLoc.setLatitude(52.51860f); 0051 favLoc.setLongitude(13.37630f); 0052 favLoc.setName(QStringLiteral("name")); 0053 favLocModel.setFavoriteLocations({favLoc}); 0054 QCOMPARE(favLocModel.rowCount(), 1); 0055 0056 LiveDataManager liveDataMgr; 0057 0058 TransferManager::clear(); 0059 TransferManager mgr; 0060 mgr.setFavoriteLocationModel(&favLocModel); 0061 mgr.overrideCurrentDateTime(QDateTime({2017, 1, 1}, {})); 0062 mgr.setReservationManager(&resMgr); 0063 mgr.setTripGroupManager(&tgMgr); 0064 mgr.setLiveDataManager(&liveDataMgr); 0065 QSignalSpy addSpy(&mgr, &TransferManager::transferAdded); 0066 QSignalSpy changeSpy(&mgr, &TransferManager::transferChanged); 0067 QSignalSpy removeSpy(&mgr, &TransferManager::transferRemoved); 0068 0069 ctrl->importFromUrl(QUrl::fromLocalFile(QLatin1StringView(SOURCE_DIR "/../tests/randa2017.json"))); 0070 // ctrl.importFromUrl(QUrl::fromLocalFile(QLatin1StringView(SOURCE_DIR "/../tests/akademy2017.json"))); 0071 // ctrl.importFromUrl(QUrl::fromLocalFile(QLatin1StringView(SOURCE_DIR "/../tests/akademy2018-program.json"))); 0072 0073 QCOMPARE(addSpy.size() - removeSpy.size(), 4); // to/from home, and one inbetween 0074 0075 auto batchId = resMgr.batches().at(0); 0076 auto transfer = mgr.transfer(batchId, Transfer::Before); 0077 QCOMPARE(transfer.state(), Transfer::Pending); 0078 QCOMPARE(transfer.anchorTime(), QDateTime({2017, 9, 10}, {6, 15}, QTimeZone("Europe/Berlin"))); 0079 QCOMPARE(transfer.anchorTimeDelta(), 5400); 0080 QCOMPARE(transfer.alignment(), Transfer::Before); 0081 QCOMPARE(transfer.reservationId(), batchId); 0082 QVERIFY(transfer.from().hasCoordinate()); 0083 QCOMPARE(transfer.from().latitude(), 52.51860f); 0084 QCOMPARE(transfer.from().longitude(), 13.37630f); 0085 QVERIFY(transfer.to().hasCoordinate()); 0086 QCOMPARE(transfer.to().name(), QLatin1StringView("Berlin Tegel")); 0087 QVERIFY(!mgr.canAddTransfer(batchId, Transfer::Before)); 0088 0089 transfer = mgr.transfer(batchId, Transfer::After); 0090 QCOMPARE(transfer.state(), Transfer::UndefinedState); 0091 QVERIFY(!mgr.canAddTransfer(batchId, Transfer::After)); 0092 0093 // verify persistence 0094 TransferManager mgr2; 0095 transfer = mgr2.transfer(batchId, Transfer::Before); 0096 QCOMPARE(transfer.state(), Transfer::Pending); 0097 QCOMPARE(transfer.anchorTime(), QDateTime({2017, 9, 10}, {6, 15}, QTimeZone("Europe/Berlin"))); 0098 QCOMPARE(transfer.alignment(), Transfer::Before); 0099 QCOMPARE(transfer.reservationId(), batchId); 0100 QVERIFY(transfer.hasLocations()); 0101 QVERIFY(transfer.from().hasCoordinate()); 0102 QCOMPARE(transfer.from().latitude(), 52.51860f); 0103 QCOMPARE(transfer.from().longitude(), 13.37630f); 0104 QVERIFY(transfer.to().hasCoordinate()); 0105 QCOMPARE(transfer.to().name(), QLatin1StringView("Berlin Tegel")); 0106 0107 // operations 0108 addSpy.clear(); 0109 changeSpy.clear(); 0110 removeSpy.clear(); 0111 0112 KPublicTransport::Journey jny; 0113 KPublicTransport::JourneySection section; 0114 section.setScheduledDepartureTime(QDateTime({2017, 9, 10}, {5, 0}, QTimeZone("Europe/Berlin"))); 0115 section.setScheduledArrivalTime(QDateTime({2017, 9, 10}, {5, 30}, QTimeZone("Europe/Berlin"))); 0116 jny.setSections({section}); 0117 mgr.setJourneyForTransfer(transfer, jny); 0118 QCOMPARE(addSpy.size(), 0); 0119 QCOMPARE(changeSpy.size(), 1); 0120 QCOMPARE(removeSpy.size(), 0); 0121 0122 transfer = mgr.transfer(batchId, Transfer::Before); 0123 QCOMPARE(transfer.state(), Transfer::Selected); 0124 QCOMPARE(transfer.journey().sections().size(), 1); 0125 QCOMPARE(transfer.journey().scheduledArrivalTime(), QDateTime({2017, 9, 10}, {5, 30}, QTimeZone("Europe/Berlin"))); 0126 QCOMPARE(transfer.anchorTimeDelta(), 45*60); 0127 0128 addSpy.clear(); 0129 changeSpy.clear(); 0130 removeSpy.clear(); 0131 0132 mgr.discardTransfer(transfer); 0133 QCOMPARE(addSpy.size(), 0); 0134 QCOMPARE(changeSpy.size(), 0); 0135 QCOMPARE(removeSpy.size(), 1); 0136 transfer = mgr.transfer(batchId, Transfer::Before); 0137 QCOMPARE(transfer.state(), Transfer::Discarded); 0138 QVERIFY(mgr.canAddTransfer(batchId, Transfer::Before)); 0139 0140 transfer = mgr.addTransfer(batchId, Transfer::Before); 0141 QCOMPARE(transfer.state(), Transfer::Pending); 0142 QCOMPARE(transfer.anchorTime(), QDateTime({2017, 9, 10}, {6, 15}, QTimeZone("Europe/Berlin"))); 0143 QCOMPARE(transfer.alignment(), Transfer::Before); 0144 QCOMPARE(transfer.reservationId(), batchId); 0145 QVERIFY(transfer.hasLocations()); 0146 QVERIFY(!mgr.canAddTransfer(batchId, Transfer::Before)); 0147 } 0148 }; 0149 0150 QTEST_GUILESS_MAIN(TransferTest) 0151 0152 #include "transfertest.moc"