File indexing completed on 2024-05-12 05:21:34

0001 /*
0002     SPDX-FileCopyrightText: 2018 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "barcode.h"
0008 #include "boardingpass.h"
0009 #include "location.h"
0010 
0011 #include <QLocale>
0012 #include <QTest>
0013 #include <QTimeZone>
0014 
0015 #include <cmath>
0016 
0017 class PkPassTest : public QObject
0018 {
0019     Q_OBJECT
0020 private Q_SLOTS:
0021     void initTestCase()
0022     {
0023         QLocale::setDefault(QLocale(QStringLiteral("de_DE")));
0024     }
0025 
0026     void testBoardingPass()
0027     {
0028         std::unique_ptr<KPkPass::Pass> pass(KPkPass::Pass::fromFile(QStringLiteral(SOURCE_DIR "/data/boardingpass-v1.pkpass")));
0029         QVERIFY(pass);
0030 
0031         QCOMPARE(pass->type(), KPkPass::Pass::BoardingPass);
0032         QCOMPARE(pass->serialNumber(), QLatin1StringView("1234"));
0033         QCOMPARE(pass->description(), QLatin1StringView("description"));
0034         QCOMPARE(pass->organizationName(), QLatin1StringView("KDE"));
0035 
0036         QCOMPARE(pass->logoText(), QLatin1StringView("Boarding Pass"));
0037         QCOMPARE(pass->backgroundColor(), QColor(61, 174, 233));
0038         QCOMPARE(pass->relevantDate(), QDateTime(QDate(2017, 9, 17), QTime(0, 4, 0), QTimeZone::UTC));
0039         QCOMPARE(pass->expirationDate(), QDateTime(QDate(2017, 9, 18), QTime(0, 0, 36), QTimeZone::UTC));
0040         QCOMPARE(pass->isVoided(), false);
0041         QCOMPARE(pass->groupingIdentifier(), QLatin1StringView(""));
0042 
0043         QCOMPARE(pass->fields().size(), 12);
0044         auto headers = pass->headerFields();
0045         QCOMPARE(headers.size(), 2);
0046         auto field = headers.at(0);
0047         QCOMPARE(field.label(), QLatin1StringView("Sitzplatz"));
0048         QCOMPARE(field.value().toString(), QLatin1StringView("10E"));
0049         QCOMPARE(field.valueDisplayString(), QLatin1StringView("10E"));
0050         QCOMPARE(field.key(), QLatin1StringView("seat"));
0051         QCOMPARE(field.changeMessage(), QStringLiteral("Sitzplatznummer geƤndert in 10E"));
0052 
0053         field = pass->field(QStringLiteral("boarding"));
0054         QCOMPARE(field.key(), QLatin1StringView("boarding"));
0055         QCOMPARE(field.value().toString(), QLatin1StringView("20:25"));
0056         QCOMPARE(field.textAlignment(), Qt::AlignLeft);
0057 
0058         auto boardingPass = dynamic_cast<KPkPass::BoardingPass *>(pass.get());
0059         QVERIFY(boardingPass);
0060         QCOMPARE(boardingPass->transitType(), KPkPass::BoardingPass::Air);
0061 
0062         auto barcodes = pass->barcodes();
0063         QCOMPARE(barcodes.size(), 1);
0064         auto bc = barcodes.at(0);
0065         QCOMPARE(bc.format(), KPkPass::Barcode::QR);
0066         QVERIFY(!bc.message().isEmpty());
0067         QVERIFY(bc.alternativeText().isEmpty());
0068         QCOMPARE(bc.messageEncoding(), QLatin1StringView("iso-8859-1"));
0069 
0070         const auto locs = pass->locations();
0071         QCOMPARE(locs.size(), 1);
0072         const auto loc = locs.at(0);
0073         QVERIFY(std::isnan(loc.altitude()));
0074         QCOMPARE((int)loc.latitude(), 47);
0075         QCOMPARE((int)loc.longitude(), 8);
0076         QCOMPARE(loc.relevantText(), QLatin1StringView("LX962 Boarding 20:25"));
0077         QCOMPARE(pass->maximumDistance(), 500);
0078 
0079         QCOMPARE(pass->hasIcon(), false);
0080         QCOMPARE(pass->hasLogo(), true);
0081         auto img = pass->logo(3);
0082         QVERIFY(!img.isNull());
0083         img = pass->logo(3);
0084         QVERIFY(!img.isNull());
0085         img = pass->logo(1);
0086         QVERIFY(!img.isNull());
0087 
0088         img = pass->image(QStringLiteral("I don't exist"));
0089         QVERIFY(img.isNull());
0090 
0091         auto sourceFile = QFile(QStringLiteral(SOURCE_DIR "/data/boardingpass-v1.pkpass"));
0092         QVERIFY(sourceFile.open(QFile::ReadOnly));
0093         QCOMPARE(pass->rawData(), sourceFile.readAll());
0094     }
0095 };
0096 
0097 QTEST_GUILESS_MAIN(PkPassTest)
0098 
0099 #include "pkpasstest.moc"