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

0001 /*
0002     SPDX-FileCopyrightText: 2022 Volker Krause <vkrause@kde.org>
0003     SPDX-License-Identifier: LGPL-2.0-or-later
0004 */
0005 
0006 #include <QFile>
0007 #include <QJsonDocument>
0008 #include <QTest>
0009 
0010 #include <KHealthCertificateParser>
0011 #include <KTestCertificate>
0012 #include <KVaccinationCertificate>
0013 
0014 void initLocale()
0015 {
0016     qputenv("LC_ALL", "en_US.utf-8");
0017     qputenv("TZ", "UTC");
0018 }
0019 
0020 Q_CONSTRUCTOR_FUNCTION(initLocale)
0021 
0022 class IcaoVdsParserTest : public QObject
0023 {
0024     Q_OBJECT
0025 private:
0026     QByteArray readFile(QStringView fileName) const
0027     {
0028         QFile f(QLatin1String(SOURCE_DIR "/data/") + fileName);
0029         if (!f.open(QFile::ReadOnly)) {
0030             qCritical() << f.errorString() << f.fileName();
0031         }
0032         return f.readAll();
0033     }
0034 
0035 private Q_SLOTS:
0036     void testVaccinationCertificate()
0037     {
0038         auto cert = KHealthCertificateParser::parse(readFile(u"icao/single-vaccine.txt"));
0039         QCOMPARE(cert.userType(), qMetaTypeId<KVaccinationCertificate>());
0040         auto vac = cert.value<KVaccinationCertificate>();
0041         QCOMPARE(vac.name(), QLatin1String("Smith Bill"));
0042         QCOMPARE(vac.dateOfBirth(), QDate(1990, 1, 2));
0043         QCOMPARE(vac.country(), QLatin1String("AU"));
0044         QCOMPARE(vac.dose(), 1);
0045         QCOMPARE(vac.totalDoses(), 0);
0046         QCOMPARE(vac.date(), QDate(2021, 3, 3));
0047         QCOMPARE(vac.disease(), QLatin1String("COVID-19"));
0048         QCOMPARE(vac.vaccine(), QLatin1String("Comirnaty"));
0049         QCOMPARE(vac.vaccineType(), QLatin1String("COVID-19 vaccines"));
0050         QCOMPARE(vac.manufacturer(), QString());
0051         QCOMPARE(vac.certificateIssuer(), QString());
0052         QCOMPARE(vac.certificateId(), QLatin1String("U32870"));
0053         QCOMPARE(vac.certificateIssueDate(), QDateTime());
0054         QCOMPARE(vac.signatureState(), KHealthCertificate::InvalidSignature);
0055         QCOMPARE(vac.validationState(), KHealthCertificate::Invalid);
0056         QCOMPARE(vac.vaccinationState(), KVaccinationCertificate::Vaccinated);
0057         QCOMPARE(vac.rawData(), readFile(u"icao/single-vaccine.txt"));
0058 
0059         cert = KHealthCertificateParser::parse(readFile(u"icao/jpn-triple-vaccine.txt"));
0060         QCOMPARE(cert.userType(), qMetaTypeId<KVaccinationCertificate>());
0061         vac = cert.value<KVaccinationCertificate>();
0062         QCOMPARE(vac.name(), QLatin1String("MIYAKE SHOTA"));
0063         QCOMPARE(vac.dateOfBirth(), QDate(1991, 2, 18));
0064         QCOMPARE(vac.country(), QLatin1String("JP"));
0065         QCOMPARE(vac.dose(), 3);
0066         QCOMPARE(vac.totalDoses(), 0);
0067         QCOMPARE(vac.date(), QDate(2021, 12, 1));
0068         QCOMPARE(vac.disease(), QLatin1String("COVID-19"));
0069         QCOMPARE(vac.vaccine(), QLatin1String("COMIRNATY"));
0070         QCOMPARE(vac.vaccineType(), QLatin1String("COVID-19 vaccine, RNA based"));
0071         QCOMPARE(vac.manufacturer(), QString());
0072         QCOMPARE(vac.certificateIssuer(), QString());
0073         QCOMPARE(vac.certificateId(), QLatin1String("6U5RSWMBASG2"));
0074         QCOMPARE(vac.certificateIssueDate(), QDateTime());
0075         QCOMPARE(vac.signatureState(), KHealthCertificate::ValidSignature);
0076         QCOMPARE(vac.validationState(), KHealthCertificate::Valid);
0077         QCOMPARE(vac.vaccinationState(), KVaccinationCertificate::Vaccinated);
0078         QCOMPARE(vac.rawData(), QJsonDocument::fromJson(readFile(u"icao/jpn-triple-vaccine.txt")).toJson(QJsonDocument::Compact));
0079     }
0080 
0081     void testTestCertificate()
0082     {
0083         auto cert = KHealthCertificateParser::parse(readFile(u"icao/test.txt"));
0084         QCOMPARE(cert.userType(), qMetaTypeId<KTestCertificate>());
0085         auto test = cert.value<KTestCertificate>();
0086         QCOMPARE(test.name(), QLatin1String("Cook Gerald"));
0087         QCOMPARE(test.dateOfBirth(), QDate(1990, 1, 29));
0088         QCOMPARE(test.country(), QLatin1String("AU"));
0089         QCOMPARE(test.testCenter(), QLatin1String("General Hospital"));
0090         QCOMPARE(test.date(), QDate(2020, 12, 12));
0091         QCOMPARE(test.result(), KTestCertificate::Negative);
0092         QCOMPARE(test.resultString(), QLatin1String("negative"));
0093         QCOMPARE(test.testType(), QLatin1String("molecular(PCR)"));
0094         QCOMPARE(test.certificateIssuer(), QString());
0095         QCOMPARE(test.certificateId(), QLatin1String("U01932"));
0096         QCOMPARE(test.certificateIssueDate(), QDateTime());
0097         QCOMPARE(test.signatureState(), KHealthCertificate::InvalidSignature);
0098         QCOMPARE(test.rawData(), readFile(u"icao/test.txt"));
0099     }
0100 };
0101 
0102 QTEST_APPLESS_MAIN(IcaoVdsParserTest)
0103 
0104 #include "icaovdsparsertest.moc"