int nPUT = 0;
int nMOVE = 0;
int nDELETE = 0;
+ int nPROPFIND = 0;
+ int nMKCOL = 0;
void reset() { *this = {}; }
auto functor() {
return [&](QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *) {
- if (op == QNetworkAccessManager::GetOperation)
+ if (op == QNetworkAccessManager::GetOperation) {
++nGET;
- if (op == QNetworkAccessManager::PutOperation)
+ } else if (op == QNetworkAccessManager::PutOperation) {
++nPUT;
- if (op == QNetworkAccessManager::DeleteOperation)
+ } else if (op == QNetworkAccessManager::DeleteOperation) {
++nDELETE;
- if (req.attribute(QNetworkRequest::CustomVerbAttribute) == "MOVE")
+ } else if (req.attribute(QNetworkRequest::CustomVerbAttribute).toString() == "MOVE") {
++nMOVE;
+ } else if (req.attribute(QNetworkRequest::CustomVerbAttribute).toString() == "PROPFIND") {
+ ++nPROPFIND;
+ } else if (req.attribute(QNetworkRequest::CustomVerbAttribute).toString() == "MKCOL") {
+ ++nMKCOL;
+ }
return nullptr;
};
}
return false;
}
+static void setAllPerm(FileInfo *fi, OCC::RemotePermissions perm)
+{
+ fi->permissions = perm;
+ for (auto &subFi : fi->children)
+ setAllPerm(&subFi, perm);
+}
+
class TestSyncMove : public QObject
{
Q_OBJECT
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
}
+
+ void testBlockRenameTopFolderFromGroupFolder()
+ {
+ FakeFolder fakeFolder{{}};
+ fakeFolder.syncEngine().account()->setServerVersion("29.0.2.0");
+
+ fakeFolder.remoteModifier().mkdir("FolA");
+ auto groupFolderRoot = fakeFolder.remoteModifier().find("FolA");
+ groupFolderRoot->extraDavProperties = "<nc:is-mount-root>true</nc:is-mount-root>";
+ setAllPerm(groupFolderRoot, RemotePermissions::fromServerString("WDNVCKRM"));
+ fakeFolder.remoteModifier().mkdir("FolA/FolB");
+ fakeFolder.remoteModifier().mkdir("FolA/FolB/FolC");
+ fakeFolder.remoteModifier().mkdir("FolA/FolB/FolC/FolD");
+ fakeFolder.remoteModifier().mkdir("FolA/FolB/FolC/FolD/FolE");
+ fakeFolder.remoteModifier().insert("FolA/FileA.txt");
+ fakeFolder.remoteModifier().insert("FolA/FolB/FileB.txt");
+ fakeFolder.remoteModifier().insert("FolA/FolB/FolC/FileC.txt");
+ fakeFolder.remoteModifier().insert("FolA/FolB/FolC/FolD/FileD.txt");
+ fakeFolder.remoteModifier().insert("FolA/FolB/FolC/FolD/FolE/FileE.txt");
+ QVERIFY(fakeFolder.syncOnce());
+
+ OperationCounter counter;
+ fakeFolder.setServerOverride(counter.functor());
+
+ fakeFolder.localModifier().insert("FolA/FileA2.txt");
+ fakeFolder.localModifier().insert("FolA/FolB/FileB2.txt");
+ fakeFolder.localModifier().insert("FolA/FolB/FolC/FileC2.txt");
+ fakeFolder.localModifier().insert("FolA/FolB/FolC/FolD/FileD2.txt");
+ fakeFolder.localModifier().insert("FolA/FolB/FolC/FolD/FolE/FileE2.txt");
+ fakeFolder.localModifier().rename("FolA", "FolA_Renamed");
+ QVERIFY(fakeFolder.syncOnce());
+ QCOMPARE(counter.nDELETE, 0);
+ QCOMPARE(counter.nGET, 0);
+ QCOMPARE(counter.nPUT, 10);
+ QCOMPARE(counter.nMOVE, 0);
+ QCOMPARE(counter.nMKCOL, 5);
+ }
};
QTEST_GUILESS_MAIN(TestSyncMove)