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"