File indexing completed on 2024-05-19 05:17:22

0001 /*
0002     SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org>
0003     SPDX-License-Identifier: LGPL-2.0-or-later
0004 */
0005 
0006 #include <QFile>
0007 #include <QTest>
0008 #include <QTimeZone>
0009 
0010 #include <KHealthCertificateParser>
0011 #include <KTestCertificate>
0012 
0013 void initLocale()
0014 {
0015     qputenv("LC_ALL", "en_US.utf-8");
0016     qputenv("TZ", "Europe/Amsterdam");
0017 }
0018 
0019 Q_CONSTRUCTOR_FUNCTION(initLocale)
0020 
0021 class NlCoronaCheckParserTest : public QObject
0022 {
0023     Q_OBJECT
0024 private:
0025     QByteArray readFile(QStringView fileName) const
0026     {
0027         QFile f(QLatin1String(SOURCE_DIR "/data/") + fileName);
0028         if (!f.open(QFile::ReadOnly)) {
0029             qCritical() << f.errorString() << f.fileName();
0030         }
0031         return f.readAll();
0032     }
0033 
0034 private Q_SLOTS:
0035     void testCertificate()
0036     {
0037         auto cert = KHealthCertificateParser::parse(readFile(u"nl-coronacheck/sample-one-day.txt"));
0038         QCOMPARE(cert.userType(), qMetaTypeId<KTestCertificate>());
0039         auto t = cert.value<KTestCertificate>();
0040         QCOMPARE(t.name(), QLatin1String("B B"));
0041         QCOMPARE(t.dateOfBirth(), QDate(1900, 7, 31));
0042         QCOMPARE(t.country(), QLatin1String("NL"));
0043         QCOMPARE(t.disease(), QLatin1String("COVID-19"));
0044         QCOMPARE(t.result(), KTestCertificate::Negative);
0045         QCOMPARE(t.certificateIssueDate(), QDateTime({2021, 7, 28}, {12, 0}, QTimeZone("Europe/Amsterdam")));
0046         QCOMPARE(t.certificateExpiryDate(), QDateTime({2021, 7, 29}, {13, 0}, QTimeZone("Europe/Amsterdam")));
0047         QCOMPARE(t.signatureState(), KHealthCertificate::InvalidSignature);
0048         QCOMPARE(t.validationState(), KHealthCertificate::Invalid);
0049         QCOMPARE(t.certificateId(), QLatin1String("6MkhqwdOJa40zJUr8RtM+Q=="));
0050         QCOMPARE(t.rawData(), readFile(u"nl-coronacheck/sample-one-day.txt"));
0051 
0052         QCOMPARE(KHealthCertificate::relevantUntil(t), QDateTime({2021, 7, 29}, {13, 0}, QTimeZone("Europe/Amsterdam")));
0053     }
0054 };
0055 
0056 QTEST_APPLESS_MAIN(NlCoronaCheckParserTest)
0057 
0058 #include "nlcoronacheckparsertest.moc"