File indexing completed on 2024-04-28 15:31:25

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 
0014 using namespace KUnitConversion;
0015 using namespace std::chrono_literals;
0016 
0017 void CategoryTest::initTestCase()
0018 {
0019     QStandardPaths::setTestModeEnabled(true);
0020 }
0021 
0022 void CategoryTest::testInfo()
0023 {
0024     UnitCategory cg = c.category(AreaCategory);
0025     QCOMPARE(cg.name(), QStringLiteral("Area"));
0026     QCOMPARE(cg.description(), QStringLiteral("Area"));
0027     QCOMPARE(cg.id(), AreaCategory);
0028 }
0029 
0030 void CategoryTest::testUnits()
0031 {
0032     UnitCategory cg = c.category(MassCategory);
0033     QCOMPARE(cg.defaultUnit().symbol(), QStringLiteral("kg"));
0034     QCOMPARE(cg.hasUnit(QStringLiteral("g")), true);
0035     QCOMPARE(cg.unit(QStringLiteral("g")).symbol(), QStringLiteral("g"));
0036     QCOMPARE(cg.unit(Kilogram).symbol(), QStringLiteral("kg"));
0037     QVERIFY(cg.units().size() > 0);
0038     QVERIFY(cg.allUnits().size() > 0);
0039 }
0040 
0041 void CategoryTest::testConvert()
0042 {
0043     UnitCategory cg = c.category(LengthCategory);
0044     Value v = cg.convert(Value(3.14, Kilometer), QStringLiteral("m"));
0045     QCOMPARE(v.number(), 3140.0);
0046     v = cg.convert(v, QStringLiteral("cm"));
0047     QCOMPARE(v.number(), 314000.0);
0048     v = cg.convert(v, cg.defaultUnit());
0049     QCOMPARE(v.number(), 3140.0);
0050 }
0051 
0052 void CategoryTest::testInvalid()
0053 {
0054     UnitCategory cg = c.category(CategoryId(99999));
0055     QCOMPARE(cg.name(), QString());
0056     cg = c.category(QStringLiteral("don't exist"));
0057     QCOMPARE(cg.name(), QString());
0058 }
0059 
0060 void CategoryTest::testCurrencyTableUpdate()
0061 {
0062     // Remove currency cache to force a download
0063     const QString cache = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QStringLiteral("/libkunitconversion/currency.xml");
0064     QFile::remove(cache);
0065     QVERIFY(Currency::lastConversionTableUpdate().isNull());
0066 
0067     UnitCategory category = c.category(CurrencyCategory);
0068     QCOMPARE(category.hasOnlineConversionTable(), true);
0069     {
0070         category.syncConversionTable(std::chrono::seconds::zero()); // no skip period = force update
0071         QVERIFY(!Currency::lastConversionTableUpdate().isNull());
0072         QDateTime lastUpdate = Currency::lastConversionTableUpdate();
0073         QVERIFY(lastUpdate.secsTo(QDateTime::currentDateTime()) < std::chrono::seconds(1h).count());
0074 
0075         category.syncConversionTable(1h);
0076         QVERIFY(!Currency::lastConversionTableUpdate().isNull());
0077         QDateTime newUpdate = Currency::lastConversionTableUpdate();
0078         QCOMPARE(newUpdate, lastUpdate);
0079     }
0080 }
0081 
0082 QTEST_MAIN(CategoryTest)
0083 
0084 #include "moc_categorytest.cpp"