File indexing completed on 2024-12-01 04:35:26

0001 /*
0002    SPDX-FileCopyrightText: 2024 Laurent Montel <montel.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "previewurlcachemanagertest.h"
0008 #include "previewurlcachemanager.h"
0009 #include <QStandardPaths>
0010 #include <QTemporaryDir>
0011 #include <QTest>
0012 QTEST_GUILESS_MAIN(PreviewUrlCacheManagerTest)
0013 
0014 PreviewUrlCacheManagerTest::PreviewUrlCacheManagerTest(QObject *parent)
0015     : QObject{parent}
0016 {
0017     QStandardPaths::setTestModeEnabled(true);
0018 }
0019 
0020 void PreviewUrlCacheManagerTest::shouldHaveDefaultValues()
0021 {
0022     PreviewUrlCacheManager w(nullptr);
0023     QCOMPARE(w.embedCacheExpirationDays(), -1);
0024     QVERIFY(w.cachePath().isEmpty());
0025 }
0026 
0027 void PreviewUrlCacheManagerTest::shouldTestRemoveOldFiles()
0028 {
0029     // Test 1: need to clean cache 1 file! 1 file to remove
0030     {
0031         QTemporaryDir accountFileTmp;
0032         const QString cachePath{accountFileTmp.path()};
0033         QFile file(cachePath + QStringLiteral("/foo1"));
0034         if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
0035             qWarning() << " Impossible to create file";
0036         }
0037         if (!file.setFileTime(QDateTime(QDate(2024, 1, 1), QTime(1, 1, 1)), QFileDevice::FileModificationTime)) {
0038             qWarning() << " Impossible to change modification date";
0039         }
0040         file.close();
0041 
0042         QDir dir(cachePath);
0043         const QFileInfoList infoLists = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files);
0044         // qDebug() << "current infoLists " << infoLists.count() << infoLists;
0045         QCOMPARE(infoLists.count(), 1);
0046 
0047         PreviewUrlCacheManager w(nullptr);
0048         w.setCachePath(cachePath);
0049         w.setEmbedCacheExpirationDays(2);
0050 
0051         QDir dir2(cachePath);
0052         const QFileInfoList infoLists2 = dir2.entryInfoList(QDir::NoDotAndDotDot | QDir::Files);
0053         // qDebug() << "after clean infoLists2 " << infoLists2.count();
0054         QVERIFY(infoLists2.isEmpty());
0055     }
0056     // Test 2: 10 files not necessary to clean them.
0057     {
0058         QTemporaryDir accountFileTmp;
0059         const QString cachePath{accountFileTmp.path()};
0060         QStringList firstList;
0061         for (int i = 0; i < 10; ++i) {
0062             QFile file(cachePath + QStringLiteral("/foo%1").arg(QString::number(i)));
0063             if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
0064                 qWarning() << " Impossible to create file";
0065             }
0066             if (!file.setFileTime(QDateTime(QDate(2024, 1, i + 1), QTime(1, 1, 1)), QFileDevice::FileModificationTime)) {
0067                 qWarning() << " Impossible to change modification date" << i;
0068             }
0069             firstList.append(QFileInfo(file).fileName());
0070             file.close();
0071         }
0072 
0073         QDir dir(cachePath);
0074         const QFileInfoList infoLists = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files);
0075         // qDebug() << "current infoLists " << infoLists.count() << infoLists;
0076         QCOMPARE(infoLists.count(), 10);
0077 
0078         PreviewUrlCacheManager w(nullptr);
0079         w.setCachePath(cachePath);
0080         w.setEmbedCacheExpirationDays(5555); // 5555 days. It will not have pb :)
0081 
0082         QDir dir2(cachePath);
0083         const QFileInfoList infoLists2 = dir2.entryInfoList(QDir::NoDotAndDotDot | QDir::Files);
0084         QStringList lst;
0085         for (const QFileInfo &info : infoLists2) {
0086             lst.append(info.fileName());
0087         }
0088         // qDebug() << "after clean infoLists2 " << infoLists2.count();
0089         QVERIFY(!infoLists2.isEmpty());
0090         QCOMPARE(infoLists2.count(), 10);
0091         QCOMPARE(firstList, lst);
0092     }
0093     // Test 3: 10 files => 5 we need to delete
0094     {
0095         QTemporaryDir accountFileTmp;
0096         const QString cachePath{accountFileTmp.path()};
0097         QStringList firstList;
0098         for (int i = 0; i < 10; ++i) {
0099             QFile file(cachePath + QStringLiteral("/foo%1").arg(QString::number(i)));
0100             if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
0101                 qWarning() << " Impossible to create file";
0102             }
0103             if (!file.setFileTime(QDateTime(QDate(2024, 1, i + 1), QTime(1, 1, 1)), QFileDevice::FileModificationTime)) {
0104                 qWarning() << " Impossible to change modification date" << i;
0105             }
0106             firstList.append(QFileInfo(file).fileName());
0107             file.close();
0108         }
0109 
0110         QDir dir(cachePath);
0111         const QFileInfoList infoLists = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files);
0112         // qDebug() << "current infoLists " << infoLists.count() << infoLists;
0113         QCOMPARE(infoLists.count(), 10);
0114 
0115         PreviewUrlCacheManager w(nullptr);
0116         w.setCachePath(cachePath);
0117         w.setCurrentDate(QDate(2024, 1, 11));
0118         w.setEmbedCacheExpirationDays(5); // 5555 days. It will not have pb :)
0119 
0120         QDir dir2(cachePath);
0121         const QFileInfoList infoLists2 = dir2.entryInfoList(QDir::NoDotAndDotDot | QDir::Files);
0122         QStringList lst;
0123         lst.append(QStringLiteral("foo6"));
0124         lst.append(QStringLiteral("foo7"));
0125         lst.append(QStringLiteral("foo8"));
0126         lst.append(QStringLiteral("foo9"));
0127         lst.append(QStringLiteral("foo10"));
0128         // qDebug() << "after clean infoLists2 " << infoLists2.count();
0129         QVERIFY(!infoLists2.isEmpty());
0130         QCOMPARE(infoLists2.count(), 5);
0131     }
0132 }
0133 
0134 #include "moc_previewurlcachemanagertest.cpp"