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"