File indexing completed on 2025-05-04 04:59:01

0001 /*
0002   SPDX-FileCopyrightText: 2017 Sandro Knauß <sknauss@kde.org>
0003 
0004   SPDX-License-Identifier: GPL-2.0-only
0005 */
0006 
0007 #include "urlhandlermanagertest.h"
0008 
0009 #include "util.h"
0010 #include "viewer/urlhandlermanager_p.h"
0011 #include "viewer/viewer.h"
0012 #include "viewer/viewer_p.h"
0013 
0014 #include <MimeTreeParser/BodyPart>
0015 #include <MimeTreeParser/Enums>
0016 
0017 #include <MessageViewer/BodyPartURLHandler>
0018 
0019 #include <QTest>
0020 
0021 using namespace MessageViewer;
0022 
0023 class TestBodyPartURLHandler : public Interface::BodyPartURLHandler
0024 {
0025 public:
0026     [[nodiscard]] QString name() const override
0027     {
0028         return QStringLiteral("TestBodyPartURLHandler");
0029     }
0030 
0031     void testPath(const QString &path) const
0032     {
0033         QCOMPARE(path, mPath);
0034     }
0035 
0036     void testViewer(MessageViewer::Viewer *viewerInstance) const
0037     {
0038         QCOMPARE(viewerInstance, mViewerInstance);
0039     }
0040 
0041     void testContent(KMime::Content *content) const
0042     {
0043         QCOMPARE(content, mContent);
0044     }
0045 
0046     bool handleClick(MessageViewer::Viewer *viewerInstance, MimeTreeParser::Interface::BodyPart *part, const QString &path) const override
0047     {
0048         testContent(part->content());
0049         testViewer(viewerInstance);
0050         testPath(path);
0051         return mHandleClick;
0052     }
0053 
0054     bool handleContextMenuRequest(MimeTreeParser::Interface::BodyPart *part, const QString &path, const QPoint &p) const override
0055     {
0056         Q_UNUSED(p)
0057         testContent(part->content());
0058         testPath(path);
0059         return mHandleContextMenuRequest;
0060     }
0061 
0062     QString statusBarMessage(MimeTreeParser::Interface::BodyPart *part, const QString &path) const override
0063     {
0064         testContent(part->content());
0065         testPath(path);
0066         return mStatusBarMessageRet;
0067     }
0068 
0069     QString mPath;
0070     QString mStatusBarMessageRet;
0071     bool mHandleClick;
0072     bool mHandleContextMenuRequest;
0073     MessageViewer::Viewer *mViewerInstance;
0074     KMime::Content *mContent;
0075 };
0076 
0077 BodyPartUrlHandlerManagerTest::BodyPartUrlHandlerManagerTest(QObject *parent)
0078     : QObject(parent)
0079 {
0080 }
0081 
0082 void BodyPartUrlHandlerManagerTest::testHandleClick_data()
0083 {
0084     QTest::addColumn<QString>("url");
0085     QTest::addColumn<QString>("path");
0086     QTest::addColumn<KMime::ContentIndex>("index");
0087     QTest::addColumn<bool>("ret");
0088 
0089     QTest::newRow("completely_empty") << QString() << QString() << KMime::ContentIndex() << false;
0090     QTest::newRow("empty") << QStringLiteral("x-kmail:") << QString() << KMime::ContentIndex() << false;
0091     QTest::newRow("pgpkey") << QStringLiteral("x-kmail:/bodypart/1234/2/pgpkey") << QStringLiteral("pgpkey") << KMime::ContentIndex(QStringLiteral("2"))
0092                             << true;
0093     QTest::newRow("test") << QStringLiteral("x-kmail:/bodypart/1234/1/test") << QStringLiteral("test") << KMime::ContentIndex(QStringLiteral("1")) << true;
0094     QTest::newRow("test_with_arguments") << QStringLiteral("x-kmail:/bodypart/1234/1/test?foo=qua") << QStringLiteral("test?foo=qua")
0095                                          << KMime::ContentIndex(QStringLiteral("1")) << true;
0096 }
0097 
0098 void BodyPartUrlHandlerManagerTest::testHandleClick()
0099 {
0100     QFETCH(QString, url);
0101     QFETCH(QString, path);
0102     QFETCH(KMime::ContentIndex, index);
0103     QFETCH(bool, ret);
0104 
0105     BodyPartURLHandlerManager manager;
0106     TestBodyPartURLHandler handler;
0107 
0108     manager.registerHandler(&handler, QLatin1StringView(""));
0109     Viewer v(nullptr);
0110     ViewerPrivate vp(&v, nullptr, nullptr);
0111     const KMime::Message::Ptr msg(Test::readAndParseMail(QStringLiteral("encapsulated-with-attachment.mbox")));
0112     vp.setMessage(msg, MimeTreeParser::Delayed);
0113 
0114     handler.mViewerInstance = &v;
0115     handler.mPath = path;
0116     handler.mHandleClick = true;
0117     handler.mContent = msg->content(index);
0118 
0119     QCOMPARE(manager.handleClick(QUrl(url), &vp), ret);
0120     manager.unregisterHandler(&handler);
0121 }
0122 
0123 QTEST_MAIN(BodyPartUrlHandlerManagerTest)
0124 
0125 #include "moc_urlhandlermanagertest.cpp"