File indexing completed on 2024-05-12 05:22:07

0001 /*
0002  * SPDX-FileCopyrightText: 2018 Daniel Vrátil <dvratil@kde.org>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005  */
0006 
0007 #include <QObject>
0008 #include <QTest>
0009 
0010 #include "drivetestutils.h"
0011 #include "fakenetworkaccessmanagerfactory.h"
0012 #include "testutils.h"
0013 
0014 #include "account.h"
0015 #include "file.h"
0016 #include "filecopyjob.h"
0017 #include "types.h"
0018 
0019 using namespace KGAPI2;
0020 
0021 Q_DECLARE_METATYPE(QList<FakeNetworkAccessManager::Scenario>)
0022 Q_DECLARE_METATYPE(KGAPI2::Drive::FilesList)
0023 
0024 class FileCopyJobTest : public QObject
0025 {
0026     Q_OBJECT
0027 private Q_SLOTS:
0028     void initTestCase()
0029     {
0030         NetworkAccessManagerFactory::setFactory(new FakeNetworkAccessManagerFactory);
0031     }
0032 
0033     void testCopy_data()
0034     {
0035         QTest::addColumn<QList<FakeNetworkAccessManager::Scenario>>("scenarios");
0036         QTest::addColumn<Drive::FilesList>("sourceFiles");
0037         QTest::addColumn<Drive::FilesList>("destinationFiles");
0038         QTest::addColumn<Drive::FilesList>("expectedCopies");
0039 
0040         QTest::newRow("simple file") << QList<FakeNetworkAccessManager::Scenario>{scenarioFromFile(QFINDTESTDATA("data/file1_copy_request.txt"),
0041                                                                                                    QFINDTESTDATA("data/file1_copy_response.txt"))}
0042                                      << Drive::FilesList{fileFromFile(QFINDTESTDATA("data/file1.json"))}
0043                                      << Drive::FilesList{fileFromFile(QFINDTESTDATA("data/file1_copy.json"))}
0044                                      << Drive::FilesList{fileFromFile(QFINDTESTDATA("data/file1_copy.json"))};
0045 
0046         // NOTE: The scenarios are reversed due use of QMap, which orders the files
0047         // by ID
0048         QTest::newRow("batch copy") << QList<FakeNetworkAccessManager::Scenario>{scenarioFromFile(QFINDTESTDATA("data/file2_copy_request.txt"),
0049                                                                                                   QFINDTESTDATA("data/file2_copy_response.txt")),
0050                                                                                  scenarioFromFile(QFINDTESTDATA("data/file1_copy_request.txt"),
0051                                                                                                   QFINDTESTDATA("data/file1_copy_response.txt"))}
0052                                     << Drive::FilesList{fileFromFile(QFINDTESTDATA("data/file1.json")), fileFromFile(QFINDTESTDATA("data/file2.json"))}
0053                                     << Drive::FilesList{fileFromFile(QFINDTESTDATA("data/file1_copy.json")),
0054                                                         fileFromFile(QFINDTESTDATA("data/file2_copy.json"))}
0055                                     << Drive::FilesList{fileFromFile(QFINDTESTDATA("data/file2_copy.json")),
0056                                                         fileFromFile(QFINDTESTDATA("data/file1_copy.json"))};
0057     }
0058 
0059     void testCopy()
0060     {
0061         QFETCH(QList<FakeNetworkAccessManager::Scenario>, scenarios);
0062         QFETCH(Drive::FilesList, sourceFiles);
0063         QFETCH(Drive::FilesList, destinationFiles);
0064         QFETCH(Drive::FilesList, expectedCopies);
0065 
0066         FakeNetworkAccessManagerFactory::get()->setScenarios(scenarios);
0067 
0068         auto account = AccountPtr::create(QStringLiteral("MockAccount"), QStringLiteral("MockToken"));
0069         Drive::FileCopyJob *job = nullptr;
0070         if (sourceFiles.count() == 1) {
0071             job = new Drive::FileCopyJob(sourceFiles.at(0), destinationFiles.at(0), account);
0072         } else {
0073             QMap<Drive::FilePtr, Drive::FilePtr> map;
0074             for (auto it1 = sourceFiles.cbegin(), it2 = destinationFiles.cbegin(), end = sourceFiles.cend(); it1 != end; ++it1, ++it2) {
0075                 map.insert(*it1, *it2);
0076             }
0077             job = new Drive::FileCopyJob(map, account);
0078         }
0079         QVERIFY(execJob(job));
0080         const auto items = job->files();
0081         QCOMPARE(items.count(), expectedCopies.count());
0082         for (int i = 0; i < expectedCopies.count(); ++i) {
0083             QVERIFY(items.at(i));
0084             QCOMPARE(*items.at(i), *expectedCopies.at(i));
0085         }
0086     }
0087 };
0088 
0089 QTEST_GUILESS_MAIN(FileCopyJobTest)
0090 
0091 #include "filecopyjobtest.moc"