File indexing completed on 2024-04-21 03:58:29

0001 /*
0002  *   SPDX-FileCopyrightText: 2009 Petri Damstén <damu@iki.fi>
0003  *
0004  *   SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #include "categorytest.h"
0008 #include <QStandardPaths>
0009 #include <chrono>
0010 #include <currency_p.h>
0011 #include <kunitconversion/unitcategory.h>
0012 #include <unitcategory_p.h>
0013 #include <QSignalSpy>
0014 
0015 using namespace KUnitConversion;
0016 using namespace std::chrono_literals;
0017 
0018 void CategoryTest::initTestCase()
0019 {
0020     QStandardPaths::setTestModeEnabled(true);
0021 }
0022 
0023 void CategoryTest::testInfo()
0024 {
0025     UnitCategory cg = c.category(AreaCategory);
0026     QCOMPARE(cg.name(), QStringLiteral("Area"));
0027     QCOMPARE(cg.description(), QStringLiteral("Area"));
0028     QCOMPARE(cg.id(), AreaCategory);
0029 }
0030 
0031 void CategoryTest::testUnits()
0032 {
0033     UnitCategory cg = c.category(MassCategory);
0034     QCOMPARE(cg.defaultUnit().symbol(), QStringLiteral("kg"));
0035     QCOMPARE(cg.hasUnit(QStringLiteral("g")), true);
0036     QCOMPARE(cg.unit(QStringLiteral("g")).symbol(), QStringLiteral("g"));
0037     QCOMPARE(cg.unit(Kilogram).symbol(), QStringLiteral("kg"));
0038     QVERIFY(cg.units().size() > 0);
0039     QVERIFY(cg.allUnits().size() > 0);
0040 }
0041 
0042 void CategoryTest::testConvert()
0043 {
0044     UnitCategory cg = c.category(LengthCategory);
0045     Value v = cg.convert(Value(3.14, Kilometer), QStringLiteral("m"));
0046     QCOMPARE(v.number(), 3140.0);
0047     v = cg.convert(v, QStringLiteral("cm"));
0048     QCOMPARE(v.number(), 314000.0);
0049     v = cg.convert(v, cg.defaultUnit());
0050     QCOMPARE(v.number(), 3140.0);
0051 }
0052 
0053 void CategoryTest::testInvalid()
0054 {
0055     UnitCategory cg = c.category(CategoryId(99999));
0056     QCOMPARE(cg.name(), QString());
0057     cg = c.category(QStringLiteral("don't exist"));
0058     QCOMPARE(cg.name(), QString());
0059 }
0060 
0061 void CategoryTest::testCurrencyTableUpdate()
0062 {
0063     // Remove currency cache to force a download
0064     const QString cache = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QStringLiteral("/libkunitconversion/currency.xml");
0065     QFile::remove(cache);
0066     QVERIFY(Currency::lastConversionTableUpdate().isNull());
0067 
0068     UnitCategory category = c.category(CurrencyCategory);
0069     QCOMPARE(category.hasOnlineConversionTable(), true);
0070     {
0071         auto job = category.syncConversionTable(std::chrono::seconds::zero()); // no skip period = force update
0072         QSignalSpy finishedSpy(job, &UpdateJob::finished);
0073         finishedSpy.wait();
0074 
0075         QVERIFY(!Currency::lastConversionTableUpdate().isNull());
0076         QDateTime lastUpdate = Currency::lastConversionTableUpdate();
0077         QVERIFY(lastUpdate.secsTo(QDateTime::currentDateTime()) < std::chrono::seconds(1h).count());
0078 
0079         QCOMPARE(category.syncConversionTable(1h), nullptr);
0080         QVERIFY(!Currency::lastConversionTableUpdate().isNull());
0081         QDateTime newUpdate = Currency::lastConversionTableUpdate();
0082         QCOMPARE(newUpdate, lastUpdate);
0083     }
0084 }
0085 
0086 QTEST_MAIN(CategoryTest)
0087 
0088 #include "moc_categorytest.cpp"