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

0001 /*
0002     SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include <QFile>
0008 #include <QTest>
0009 
0010 #include <KHealthCertificateParser>
0011 #include <KVaccinationCertificate>
0012 
0013 void initLocale()
0014 {
0015     qputenv("LC_ALL", "en_US.utf-8");
0016     qputenv("TZ", "UTC");
0017 }
0018 
0019 Q_CONSTRUCTOR_FUNCTION(initLocale)
0020 
0021 class DivocParserTest : 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 testVaccinationCertificate()
0036     {
0037         auto cert = KHealthCertificateParser::parse(readFile(u"divoc/partial-vaccination.bin"));
0038         QCOMPARE(cert.userType(), qMetaTypeId<KVaccinationCertificate>());
0039         auto vac = cert.value<KVaccinationCertificate>();
0040         QCOMPARE(vac.name(), QLatin1String("Katie Dragon"));
0041         QCOMPARE(vac.country(), QLatin1String("IN"));
0042         QCOMPARE(vac.dose(), 1);
0043         QCOMPARE(vac.totalDoses(), 2);
0044         QCOMPARE(vac.date(), QDate(2021, 7, 16));
0045         QCOMPARE(vac.vaccine(), QLatin1String("COVISHIELD"));
0046         QCOMPARE(vac.certificateIssuer(), QLatin1String("https://cowin.gov.in/"));
0047         QCOMPARE(vac.certificateId(), QLatin1String("987654321098"));
0048         QCOMPARE(vac.certificateIssueDate(), QDateTime({2021, 7, 16}, {19, 40}));
0049         QCOMPARE(vac.signatureState(), KHealthCertificate::InvalidSignature);
0050         QCOMPARE(vac.validationState(), KHealthCertificate::Invalid); // due to invalid signature
0051         QCOMPARE(vac.vaccinationState(), KVaccinationCertificate::PartiallyVaccinated);
0052         QCOMPARE(vac.rawData(), readFile(u"divoc/partial-vaccination.bin"));
0053         QCOMPARE(KHealthCertificate::relevantUntil(vac), QDateTime({2022, 7, 16}, {0, 0}));
0054     }
0055 };
0056 
0057 QTEST_APPLESS_MAIN(DivocParserTest)
0058 
0059 #include "divocparsertest.moc"