1 /*
2     SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org>
3 
4     SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #include <field.h>
8 #include <pass.h>
9 
10 #include <QJsonDocument>
11 #include <QJsonObject>
12 #include <QLocale>
13 #include <QTest>
14 
15 #include <cmath>
16 
initLocale()17 void initLocale()
18 {
19     qputenv("TZ", "UTC");
20 }
21 
22 Q_CONSTRUCTOR_FUNCTION(initLocale)
23 
24 namespace KPkPass
25 {
26 class FieldTest : public QObject
27 {
28     Q_OBJECT
29 private Q_SLOTS:
initTestCase()30     void initTestCase()
31     {
32         QLocale::setDefault(QLocale(QStringLiteral("fr_FR")));
33     }
34 
testBoardingPass()35     void testBoardingPass()
36     {
37         std::unique_ptr<KPkPass::Pass> pass(KPkPass::Pass::fromFile(QStringLiteral(SOURCE_DIR "/data/boardingpass-v1.pkpass")));
38         QVERIFY(pass);
39 
40         auto obj =
41             QJsonDocument::fromJson(R"({"key":"valid-date","label":"Datum","dateStyle":"PKDateStyleShort","value":"2021-06-27T14:30:00+02:00"})").object();
42         KPkPass::Field f(obj, pass.get());
43         QCOMPARE(f.value().type(), QVariant::DateTime);
44         QCOMPARE(f.value(), QDateTime({2021, 6, 27}, {14, 30}, Qt::OffsetFromUTC, 7200));
45         QCOMPARE(f.valueDisplayString(), QLatin1String("27/06/2021 14:30"));
46 
47         obj = QJsonDocument::fromJson(R"({"key":"valid-date","label":"Datum","dateStyle":"PKDateStyleShort","value":"2021-06-27T00:00:00+02:00"})").object();
48         f = KPkPass::Field(obj, pass.get());
49         QCOMPARE(f.value().type(), QVariant::DateTime);
50         QCOMPARE(f.value().toDateTime().date(), QDate({2021, 6, 27}));
51         QCOMPARE(f.valueDisplayString(), QLatin1String("27/06/2021"));
52 
53         obj = QJsonDocument::fromJson(R"({"key":"valid-locations","label":"Ort","value":"Freibad Killesberg\n"})").object();
54         f = KPkPass::Field(obj, pass.get());
55 
56         QCOMPARE(f.value().type(), QVariant::String);
57         QCOMPARE(f.value(), QLatin1String("Freibad Killesberg\n"));
58         QCOMPARE(f.valueDisplayString(), QLatin1String("Freibad Killesberg"));
59     }
60 };
61 }
62 
63 QTEST_GUILESS_MAIN(KPkPass::FieldTest)
64 
65 #include "fieldtest.moc"
66