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"