File indexing completed on 2024-05-19 05:00:38

0001 /*
0002  * SPDX-FileCopyrightText: 2016 Elvis Angelaccio <elvis.angelaccio@kde.org>
0003  * SPDX-FileCopyrightText: 2019 David Barchiesi <david@barchie.si>
0004  *
0005  * SPDX-License-Identifier: GPL-2.0-or-later
0006  *
0007  */
0008 
0009 #include "../src/gdriveurl.h"
0010 
0011 #include <QTest>
0012 
0013 class UrlTest : public QObject
0014 {
0015     Q_OBJECT
0016 
0017 private Q_SLOTS:
0018     void testGDriveUrl_data();
0019     void testGDriveUrl();
0020 };
0021 
0022 QTEST_GUILESS_MAIN(UrlTest)
0023 
0024 void UrlTest::testGDriveUrl_data()
0025 {
0026     const auto gdriveUrl = [](const QString &path) {
0027         QUrl url;
0028         url.setScheme(GDriveUrl::Scheme);
0029         url.setPath(path);
0030         return url;
0031     };
0032 
0033     QTest::addColumn<QUrl>("url");
0034     QTest::addColumn<QString>("expectedToString");
0035     QTest::addColumn<QString>("expectedAccount");
0036     QTest::addColumn<QString>("expectedParentPath");
0037     QTest::addColumn<bool>("expectedIsTrashed");
0038     QTest::addColumn<bool>("expectedIsTopLevel");
0039     QTest::addColumn<bool>("expectedIsRoot");
0040     QTest::addColumn<bool>("expectedIsAccountRoot");
0041     QTest::addColumn<bool>("expectedIsSharedWithMeRoot");
0042     QTest::addColumn<bool>("expectedIsSharedWithMeTopLevel");
0043     QTest::addColumn<bool>("expectedIsSharedWithMe");
0044     QTest::addColumn<bool>("expectedIsSharedDrivesRoot");
0045     QTest::addColumn<bool>("expectedIsSharedDrive");
0046     QTest::addColumn<bool>("expectedIsNewAccountPath");
0047     QTest::addColumn<bool>("expectedIsTrashDir");
0048     QTest::addColumn<QStringList>("expectedPathComponents");
0049     QTest::addColumn<QString>("expectedFilename");
0050 
0051     // clang-format off
0052     QTest::newRow("root url")
0053             << gdriveUrl(QStringLiteral("/"))
0054             << QStringLiteral("gdrive:/")
0055             << QString()
0056             << QString()
0057             << false // expectedIsTrashed
0058             << false // expectedIsTopLevel
0059             << true  // expectedIsRoot
0060             << false // expectedIsAccountRoot
0061             << false // expectedIsSharedWithMeRoot
0062             << false // expectedIsSharedWithMeTopLevel
0063             << false // expectedIsSharedWithMe
0064             << false // expectedIsSharedDrivesRoot
0065             << false // expectedIsSharedDrive
0066             << false // expectedIsNewAccountPath
0067             << false // expectedIsTrashDir
0068             << QStringList()
0069             << "";
0070 
0071     QTest::newRow("account root url")
0072             << gdriveUrl(QStringLiteral("/foo@gmail.com"))
0073             << QStringLiteral("gdrive:/foo@gmail.com")
0074             << QStringLiteral("foo@gmail.com")
0075             << QStringLiteral("/")
0076             << false // expectedIsTrashed
0077             << false // expectedIsTopLevel
0078             << false // expectedIsRoot
0079             << true  // expectedIsAccountRoot
0080             << false // expectedIsSharedWithMeRoot
0081             << false // expectedIsSharedWithMeTopLevel
0082             << false // expectedIsSharedWithMe
0083             << false // expectedIsSharedDrivesRoot
0084             << false // expectedIsSharedDrive
0085             << false // expectedIsNewAccountPath
0086             << false // expectedIsTrashDir
0087             << QStringList {QStringLiteral("foo@gmail.com")}
0088             << QStringLiteral("foo@gmail.com");
0089 
0090     QTest::newRow("account trash url")
0091             << gdriveUrl(QStringLiteral("/foo@gmail.com/") + GDriveUrl::TrashDir)
0092             << QStringLiteral("gdrive:/foo@gmail.com/") + GDriveUrl::TrashDir
0093             << QStringLiteral("foo@gmail.com")
0094             << QStringLiteral("/foo@gmail.com")
0095             << false // expectedIsTrashed
0096             << true  // expectedIsTopLevel
0097             << false // expectedIsRoot
0098             << false // expectedIsAccountRoot
0099             << false // expectedIsSharedWithMeRoot
0100             << false // expectedIsSharedWithMeTopLevel
0101             << false // expectedIsSharedWithMe
0102             << false // expectedIsSharedDrivesRoot
0103             << false // expectedIsSharedDrive
0104             << false // expectedIsNewAccountPath
0105             << true  // expectedIsTrashDir
0106             << QStringList {QStringLiteral("foo@gmail.com"), GDriveUrl::TrashDir}
0107             << GDriveUrl::TrashDir;
0108 
0109     QTest::newRow("file in trash")
0110             << gdriveUrl(QStringLiteral("/foo@gmail.com/") + GDriveUrl::TrashDir + QStringLiteral("/baz.txt"))
0111             << QStringLiteral("gdrive:/foo@gmail.com/") + GDriveUrl::TrashDir + QStringLiteral("/baz.txt")
0112             << QStringLiteral("foo@gmail.com")
0113             << QStringLiteral("/foo@gmail.com/") + GDriveUrl::TrashDir
0114             << true  // expectedIsTrashed
0115             << false // expectedIsTopLevel
0116             << false // expectedIsRoot
0117             << false // expectedIsAccountRoot
0118             << false // expectedIsSharedWithMeRoot
0119             << false // expectedIsSharedWithMeTopLevel
0120             << false // expectedIsSharedWithMe
0121             << false // expectedIsSharedDrivesRoot
0122             << false // expectedIsSharedDrive
0123             << false // expectedIsNewAccountPath
0124             << false // expectedIsTrashDir
0125             << QStringList {QStringLiteral("foo@gmail.com"), GDriveUrl::TrashDir, QStringLiteral("baz.txt")}
0126             << QStringLiteral("baz.txt");
0127 
0128     QTest::newRow("account shared drives url")
0129             << gdriveUrl(QStringLiteral("/foo@gmail.com/") + GDriveUrl::SharedDrivesDir)
0130             << QStringLiteral("gdrive:/foo@gmail.com/") + GDriveUrl::SharedDrivesDir
0131             << QStringLiteral("foo@gmail.com")
0132             << QStringLiteral("/foo@gmail.com")
0133             << false // expectedIsTrashed
0134             << true  // expectedIsTopLevel
0135             << false // expectedIsRoot
0136             << false // expectedIsAccountRoot
0137             << false // expectedIsSharedWithMeRoot
0138             << false // expectedIsSharedWithMeTopLevel
0139             << false // expectedIsSharedWithMe
0140             << true  // expectedIsSharedDrivesRoot
0141             << false // expectedIsSharedDrive
0142             << false // expectedIsNewAccountPath
0143             << false // expectedIsTrashDir
0144             << QStringList {QStringLiteral("foo@gmail.com"), GDriveUrl::SharedDrivesDir}
0145             << GDriveUrl::SharedDrivesDir;
0146 
0147     QTest::newRow("file in account root")
0148             << gdriveUrl(QStringLiteral("/foo@gmail.com/bar.txt"))
0149             << QStringLiteral("gdrive:/foo@gmail.com/bar.txt")
0150             << QStringLiteral("foo@gmail.com")
0151             << QStringLiteral("/foo@gmail.com")
0152             << false // expectedIsTrashed
0153             << true  // expectedIsTopLevel
0154             << false // expectedIsRoot
0155             << false // expectedIsAccountRoot
0156             << false // expectedIsSharedWithMeRoot
0157             << false // expectedIsSharedWithMeTopLevel
0158             << false // expectedIsSharedWithMe
0159             << false // expectedIsSharedDrivesRoot
0160             << false // expectedIsSharedDrive
0161             << false // expectedIsNewAccountPath
0162             << false // expectedIsTrashDir
0163             << QStringList {QStringLiteral("foo@gmail.com"), QStringLiteral("bar.txt")}
0164             << QStringLiteral("bar.txt");
0165 
0166     QTest::newRow("folder in account root - no trailing slash")
0167             << gdriveUrl(QStringLiteral("/foo@gmail.com/bar"))
0168             << QStringLiteral("gdrive:/foo@gmail.com/bar")
0169             << QStringLiteral("foo@gmail.com")
0170             << QStringLiteral("/foo@gmail.com")
0171             << false // expectedIsTrashed
0172             << true  // expectedIsTopLevel
0173             << false // expectedIsRoot
0174             << false // expectedIsAccountRoot
0175             << false // expectedIsSharedWithMeRoot
0176             << false // expectedIsSharedWithMeTopLevel
0177             << false // expectedIsSharedWithMe
0178             << false // expectedIsSharedDrivesRoot
0179             << false // expectedIsSharedDrive
0180             << false // expectedIsNewAccountPath
0181             << false // expectedIsTrashDir
0182             << QStringList {QStringLiteral("foo@gmail.com"), QStringLiteral("bar")}
0183             << QStringLiteral("bar");
0184 
0185     QTest::newRow("folder in account root - trailing slash")
0186             << gdriveUrl(QStringLiteral("/foo@gmail.com/bar/"))
0187             << QStringLiteral("gdrive:/foo@gmail.com/bar/")
0188             << QStringLiteral("foo@gmail.com")
0189             << QStringLiteral("/foo@gmail.com")
0190             << false // expectedIsTrashed
0191             << true  // expectedIsTopLevel
0192             << false // expectedIsRoot
0193             << false // expectedIsAccountRoot
0194             << false // expectedIsSharedWithMeRoot
0195             << false // expectedIsSharedWithMeTopLevel
0196             << false // expectedIsSharedWithMe
0197             << false // expectedIsSharedDrivesRoot
0198             << false // expectedIsSharedDrive
0199             << false // expectedIsNewAccountPath
0200             << false // expectedIsTrashDir
0201             << QStringList {QStringLiteral("foo@gmail.com"), QStringLiteral("bar")}
0202             << QStringLiteral("bar");
0203 
0204     QTest::newRow("file in subfolder")
0205             << gdriveUrl(QStringLiteral("/foo@gmail.com/bar/baz.txt"))
0206             << QStringLiteral("gdrive:/foo@gmail.com/bar/baz.txt")
0207             << QStringLiteral("foo@gmail.com")
0208             << QStringLiteral("/foo@gmail.com/bar")
0209             << false // expectedIsTrashed
0210             << false // expectedIsTopLevel
0211             << false // expectedIsRoot
0212             << false // expectedIsAccountRoot
0213             << false // expectedIsSharedWithMeRoot
0214             << false // expectedIsSharedWithMeTopLevel
0215             << false // expectedIsSharedWithMe
0216             << false // expectedIsSharedDrivesRoot
0217             << false // expectedIsSharedDrive
0218             << false // expectedIsNewAccountPath
0219             << false // expectedIsTrashDir
0220             << QStringList {QStringLiteral("foo@gmail.com"), QStringLiteral("bar"), QStringLiteral("baz.txt")}
0221             << QStringLiteral("baz.txt");
0222 
0223     QTest::newRow("account shared with me root")
0224             << gdriveUrl(QStringLiteral("/foo@gmail.com/") + GDriveUrl::SharedWithMeDir)
0225             << QStringLiteral("gdrive:/foo@gmail.com/") + GDriveUrl::SharedWithMeDir
0226             << QStringLiteral("foo@gmail.com")
0227             << QStringLiteral("/foo@gmail.com")
0228             << false // expectedIsTrashed
0229             << true  // expectedIsTopLevel
0230             << false // expectedIsRoot
0231             << false // expectedIsAccountRoot
0232             << true  // expectedIsSharedWithMeRoot
0233             << false // expectedIsSharedWithMeTopLevel
0234             << false // expectedIsSharedWithMe
0235             << false // expectedIsSharedDrivesRoot
0236             << false // expectedIsSharedDrive
0237             << false // expectedIsNewAccountPath
0238             << false // expectedIsTrashDir
0239             << QStringList {QStringLiteral("foo@gmail.com"), GDriveUrl::SharedWithMeDir}
0240             << GDriveUrl::SharedWithMeDir;
0241 
0242     QTest::newRow("shared with me top-level file")
0243             << gdriveUrl(QStringLiteral("/foo@gmail.com/%1/baz.txt").arg(GDriveUrl::SharedWithMeDir))
0244             << QStringLiteral("gdrive:/foo@gmail.com/%1/baz.txt").arg(GDriveUrl::SharedWithMeDir)
0245             << QStringLiteral("foo@gmail.com")
0246             << QStringLiteral("/foo@gmail.com/") + GDriveUrl::SharedWithMeDir
0247             << false // expectedIsTrashed
0248             << false // expectedIsTopLevel
0249             << false // expectedIsRoot
0250             << false // expectedIsAccountRoot
0251             << false // expectedIsSharedWithMeRoot
0252             << true  // expectedIsSharedWithMeTopLevel
0253             << true  // expectedIsSharedWithMe
0254             << false // expectedIsSharedDrivesRoot
0255             << false // expectedIsSharedDrive
0256             << false // expectedIsNewAccountPath
0257             << false // expectedIsTrashDir
0258             << QStringList {QStringLiteral("foo@gmail.com"), GDriveUrl::SharedWithMeDir, QStringLiteral("baz.txt")}
0259             << QStringLiteral("baz.txt");
0260 
0261     QTest::newRow("shared with me top-level folder")
0262             << gdriveUrl(QStringLiteral("/foo@gmail.com/%1/bar/").arg(GDriveUrl::SharedWithMeDir))
0263             << QStringLiteral("gdrive:/foo@gmail.com/%1/bar/").arg(GDriveUrl::SharedWithMeDir)
0264             << QStringLiteral("foo@gmail.com")
0265             << QStringLiteral("/foo@gmail.com/") + GDriveUrl::SharedWithMeDir
0266             << false // expectedIsTrashed
0267             << false // expectedIsTopLevel
0268             << false // expectedIsRoot
0269             << false // expectedIsAccountRoot
0270             << false // expectedIsSharedWithMeRoot
0271             << true  // expectedIsSharedWithMeTopLevel
0272             << true  // expectedIsSharedWithMe
0273             << false // expectedIsSharedDrivesRoot
0274             << false // expectedIsSharedDrive
0275             << false // expectedIsNewAccountPath
0276             << false // expectedIsTrashDir
0277             << QStringList {QStringLiteral("foo@gmail.com"), GDriveUrl::SharedWithMeDir, QStringLiteral("bar")}
0278             << QStringLiteral("bar");
0279 
0280     QTest::newRow("shared with me inner file")
0281             << gdriveUrl(QStringLiteral("/foo@gmail.com/%1/bar/baz.txt").arg(GDriveUrl::SharedWithMeDir))
0282             << QStringLiteral("gdrive:/foo@gmail.com/%1/bar/baz.txt").arg(GDriveUrl::SharedWithMeDir)
0283             << QStringLiteral("foo@gmail.com")
0284             << QStringLiteral("/foo@gmail.com/") + GDriveUrl::SharedWithMeDir + QStringLiteral("/bar")
0285             << false // expectedIsTrashed
0286             << false // expectedIsTopLevel
0287             << false // expectedIsRoot
0288             << false // expectedIsAccountRoot
0289             << false // expectedIsSharedWithMeRoot
0290             << false // expectedIsSharedWithMeTopLevel
0291             << true  // expectedIsSharedWithMe
0292             << false // expectedIsSharedDrivesRoot
0293             << false // expectedIsSharedDrive
0294             << false // expectedIsNewAccountPath
0295             << false // expectedIsTrashDir
0296             << QStringList {QStringLiteral("foo@gmail.com"), GDriveUrl::SharedWithMeDir, QStringLiteral("bar"), QStringLiteral("baz.txt")}
0297             << QStringLiteral("baz.txt");
0298 
0299     QTest::newRow("shared with me inner folder")
0300             << gdriveUrl(QStringLiteral("/foo@gmail.com/%1/bar/baz/").arg(GDriveUrl::SharedWithMeDir))
0301             << QStringLiteral("gdrive:/foo@gmail.com/%1/bar/baz/").arg(GDriveUrl::SharedWithMeDir)
0302             << QStringLiteral("foo@gmail.com")
0303             << QStringLiteral("/foo@gmail.com/") + GDriveUrl::SharedWithMeDir + QStringLiteral("/bar")
0304             << false // expectedIsTrashed
0305             << false // expectedIsTopLevel
0306             << false // expectedIsRoot
0307             << false // expectedIsAccountRoot
0308             << false // expectedIsSharedWithMeRoot
0309             << false // expectedIsSharedWithMeTopLevel
0310             << true  // expectedIsSharedWithMe
0311             << false // expectedIsSharedDrivesRoot
0312             << false // expectedIsSharedDrive
0313             << false // expectedIsNewAccountPath
0314             << false // expectedIsTrashDir
0315             << QStringList {QStringLiteral("foo@gmail.com"), GDriveUrl::SharedWithMeDir, QStringLiteral("bar"), QStringLiteral("baz")}
0316             << QStringLiteral("baz");
0317     // clang-format on
0318 }
0319 
0320 void UrlTest::testGDriveUrl()
0321 {
0322     QFETCH(QUrl, url);
0323     const auto gdriveUrl = GDriveUrl(url);
0324 
0325     QFETCH(QString, expectedToString);
0326     QCOMPARE(gdriveUrl.url(), QUrl(expectedToString));
0327 
0328     QFETCH(QString, expectedAccount);
0329     QFETCH(QString, expectedParentPath);
0330     QFETCH(bool, expectedIsTrashed);
0331     QFETCH(bool, expectedIsTopLevel);
0332     QFETCH(bool, expectedIsRoot);
0333     QFETCH(bool, expectedIsAccountRoot);
0334     QFETCH(bool, expectedIsSharedWithMeRoot);
0335     QFETCH(bool, expectedIsSharedWithMeTopLevel);
0336     QFETCH(bool, expectedIsSharedWithMe);
0337     QFETCH(bool, expectedIsSharedDrivesRoot);
0338     QFETCH(bool, expectedIsSharedDrive);
0339     QFETCH(bool, expectedIsNewAccountPath);
0340     QFETCH(bool, expectedIsTrashDir);
0341     QFETCH(QStringList, expectedPathComponents);
0342     QFETCH(QString, expectedFilename);
0343 
0344     QCOMPARE(gdriveUrl.account(), expectedAccount);
0345     QCOMPARE(gdriveUrl.parentPath(), expectedParentPath);
0346     QCOMPARE(gdriveUrl.pathComponents(), expectedPathComponents);
0347     QCOMPARE(gdriveUrl.isTrashed(), expectedIsTrashed);
0348     QCOMPARE(gdriveUrl.isTopLevel(), expectedIsTopLevel);
0349     QCOMPARE(gdriveUrl.isRoot(), expectedIsRoot);
0350     QCOMPARE(gdriveUrl.isAccountRoot(), expectedIsAccountRoot);
0351     QCOMPARE(gdriveUrl.isSharedWithMeRoot(), expectedIsSharedWithMeRoot);
0352     QCOMPARE(gdriveUrl.isSharedWithMeTopLevel(), expectedIsSharedWithMeTopLevel);
0353     QCOMPARE(gdriveUrl.isSharedWithMe(), expectedIsSharedWithMe);
0354     QCOMPARE(gdriveUrl.isSharedDrivesRoot(), expectedIsSharedDrivesRoot);
0355     QCOMPARE(gdriveUrl.isSharedDrive(), expectedIsSharedDrive);
0356     QCOMPARE(gdriveUrl.isNewAccountPath(), expectedIsNewAccountPath);
0357     QCOMPARE(gdriveUrl.isTrashDir(), expectedIsTrashDir);
0358     QCOMPARE(gdriveUrl.filename(), expectedFilename);
0359 
0360     if (expectedPathComponents.isEmpty()) {
0361         QVERIFY(gdriveUrl.isRoot());
0362     } else if (expectedPathComponents.count() == 1) {
0363         QVERIFY(gdriveUrl.isAccountRoot());
0364     }
0365 }
0366 
0367 #include "urltest.moc"