File indexing completed on 2024-05-05 03:52:08

0001 /*
0002     SPDX-FileCopyrightText: 2013 Vishesh Handa <me@vhanda.in>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-or-later
0005 */
0006 
0007 #include "filemonitor.h"
0008 
0009 #include <memory>
0010 #include <QTest>
0011 #include <QSignalSpy>
0012 
0013 #include <QDBusConnection>
0014 #include <QDBusMessage>
0015 #include <QRandomGenerator>
0016 
0017 using namespace Baloo;
0018 
0019 class FileMonitorTest : public QObject
0020 {
0021     Q_OBJECT
0022 private Q_SLOTS:
0023     void test();
0024     void init();
0025     void cleanup();
0026     void testAddFileShouldReturnOneFileIfOneFileAdded();
0027     void testAddFileShouldReturnTwoFilesIfTwoFilesAdded();
0028     void testAddFileShouldRemoveTailingSlash();
0029     void testAddFileShouldNotAddNotLocalUrl();
0030     void testAddFileShouldAddLocalUrl();
0031     void testClearIfClearAfterOneFileAddedFilesShouldReturn0Items();
0032     void testSetFilesIfSetFilesWithOneElementFilesShouldReturn1Item();
0033 
0034 private:
0035     QString getRandomValidFilePath();
0036     QString getRandomValidWebUrl();
0037     QString getRandomString(int length) const;
0038     std::unique_ptr<FileMonitor> m_sut;
0039 };
0040 
0041 void FileMonitorTest::init()
0042 {
0043     m_sut = std::make_unique<FileMonitor>();
0044 }
0045 
0046 void FileMonitorTest::cleanup()
0047 {
0048     m_sut.reset();
0049 }
0050 
0051 void FileMonitorTest::test()
0052 {
0053     QString file = getRandomValidFilePath();
0054     m_sut->addFile(file);
0055 
0056     QSignalSpy spy(m_sut.get(), SIGNAL(fileMetaDataChanged(QString)));
0057 
0058     QDBusMessage message = QDBusMessage::createSignal(QStringLiteral("/files"),
0059                            QStringLiteral("org.kde"),
0060                            QStringLiteral("changed"));
0061 
0062     QList<QString> list;
0063     list << file;
0064 
0065     QVariantList vl;
0066     vl.reserve(1);
0067     vl << QVariant(list);
0068     message.setArguments(vl);
0069 
0070     QDBusConnection::sessionBus().send(message);
0071 
0072     QEventLoop loop;
0073     connect(m_sut.get(), &FileMonitor::fileMetaDataChanged, &loop, &QEventLoop::quit);
0074     loop.exec();
0075 
0076     QCOMPARE(spy.count(), 1);
0077 
0078     QList<QVariant> variantList = spy.at(0);
0079     QCOMPARE(variantList.size(), 1);
0080 
0081     QVariant var = variantList.front();
0082     QCOMPARE(var.typeId(), QMetaType::QString);
0083     QCOMPARE(var.toString(), file);
0084 }
0085 
0086 void FileMonitorTest::testAddFileShouldReturnOneFileIfOneFileAdded()
0087 {
0088     QString filePath = getRandomValidFilePath();
0089     m_sut->addFile(filePath);
0090 
0091     QStringList actualList = m_sut->files();
0092 
0093     QCOMPARE(actualList.count(), 1);
0094     QCOMPARE(actualList.first(), filePath);
0095 }
0096 
0097 void FileMonitorTest::testAddFileShouldReturnTwoFilesIfTwoFilesAdded()
0098 {
0099     QString filePath1 = getRandomValidFilePath();
0100     QString filePath2 = getRandomValidFilePath();
0101     m_sut->addFile(filePath1);
0102     m_sut->addFile(filePath2);
0103 
0104     QStringList actualList = m_sut->files();
0105 
0106     QCOMPARE(actualList.count(), 2);
0107     QVERIFY(actualList.contains(filePath1));
0108     QVERIFY(actualList.contains(filePath2));
0109 }
0110 
0111 void FileMonitorTest::testAddFileShouldRemoveTailingSlash()
0112 {
0113     QString expectedFilePath = getRandomValidFilePath();
0114     QString filePath(expectedFilePath);
0115     filePath.append(QLatin1Char('/'));
0116 
0117     m_sut->addFile(filePath);
0118 
0119     QStringList actualList = m_sut->files();
0120     QCOMPARE(actualList.first(), expectedFilePath);
0121 }
0122 
0123 void FileMonitorTest::testAddFileShouldNotAddNotLocalUrl()
0124 {
0125     QUrl fileUrl(getRandomValidWebUrl());
0126 
0127     m_sut->addFile(fileUrl);
0128     QStringList actualList = m_sut->files();
0129 
0130     QCOMPARE(actualList.count(), 0);
0131 }
0132 
0133 void FileMonitorTest::testAddFileShouldAddLocalUrl()
0134 {
0135     QUrl fileUrl(getRandomValidFilePath());
0136 
0137     m_sut->addFile(fileUrl);
0138     QStringList actualList = m_sut->files();
0139 
0140     QCOMPARE(actualList.count(), 0);
0141 }
0142 void FileMonitorTest::testClearIfClearAfterOneFileAddedFilesShouldReturn0Items()
0143 {
0144     QUrl fileUrl(getRandomValidFilePath());
0145 
0146     m_sut->addFile(fileUrl);
0147 
0148     QStringList actualList = m_sut->files();
0149 
0150     QCOMPARE(actualList.count(), 0);
0151 }
0152 void FileMonitorTest::testSetFilesIfSetFilesWithOneElementFilesShouldReturn1Item()
0153 {
0154     QStringList files = QStringList(getRandomValidFilePath());
0155 
0156     m_sut->setFiles(files);
0157     QStringList actualList = m_sut->files();
0158 
0159     QCOMPARE(actualList.count(), 1);
0160 }
0161 
0162 QString FileMonitorTest::getRandomValidWebUrl()
0163 {
0164     QString file = QStringLiteral("http://%1.com/%2").arg(getRandomString(4), getRandomString(4));
0165     return file;
0166 }
0167 
0168 QString FileMonitorTest::getRandomValidFilePath()
0169 {
0170     QString file(QStringLiteral("/tmp/"));
0171     file.append(getRandomString(8));
0172     return file;
0173 }
0174 
0175 QString FileMonitorTest::getRandomString(int length) const
0176 {
0177     const QString possibleCharacters(QStringLiteral("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"));
0178     // assuming you want random strings of 12 characters
0179 
0180     QString randomString;
0181     auto *generator = QRandomGenerator::global();
0182     for(int i=0; i<length; ++i)
0183     {
0184         int index = generator->bounded(possibleCharacters.length());
0185         QChar nextChar = possibleCharacters.at(index);
0186         randomString.append(nextChar);
0187     }
0188     return randomString;
0189 }
0190 
0191 QTEST_GUILESS_MAIN(FileMonitorTest)
0192 
0193 #include "filemonitortest.moc"