Add test to detect file renames in external storage.
authorCamila Ayres <hello@camilasan.com>
Wed, 5 Jun 2024 18:31:41 +0000 (20:31 +0200)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Fri, 5 Jul 2024 11:57:23 +0000 (11:57 +0000)
Signed-off-by: Camila Ayres <hello@camilasan.com>
test/testsyncmove.cpp

index 47d3e955af780d8eabb976307776b00a18475f96..05b0ce0342e080d14365d6fef7b720c40c8b476a 100644 (file)
@@ -318,6 +318,49 @@ private slots:
         QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(remoteInfo));
     }
 
+    void testLocalExternalStorageRenameDetection()
+    {
+        FakeFolder fakeFolder { FileInfo { QString(), { FileInfo { QStringLiteral("external") } } }};
+
+        int nPUT = 0;
+        int nDELETE = 0;
+        fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &, QIODevice *) {
+            if (op == QNetworkAccessManager::PutOperation) {
+                ++nPUT;
+            }
+
+            if (op == QNetworkAccessManager::DeleteOperation) {
+                ++nDELETE;
+            }
+            return nullptr;
+        });
+
+        fakeFolder.remoteModifier().permissions.setPermission(OCC::RemotePermissions::IsMounted);
+        fakeFolder.remoteModifier().permissions.setPermission(OCC::RemotePermissions::CanMove);
+        fakeFolder.remoteModifier().permissions.setPermission(OCC::RemotePermissions::CanWrite);
+        QVERIFY(fakeFolder.syncOnce());
+        QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.remoteModifier());
+
+        fakeFolder.localModifier().insert("external/file", 100);
+        QVERIFY(fakeFolder.syncOnce());
+        QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+        QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(fakeFolder.remoteModifier()));
+        QCOMPARE(nPUT, 1);
+
+        fakeFolder.localModifier().rename("external/file", "external/file2");
+        fakeFolder.localModifier().rename("external/file2", "external/file3");
+        QVERIFY(fakeFolder.syncOnce());
+        QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+        QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(fakeFolder.remoteModifier()));
+        QCOMPARE(fakeFolder.remoteModifier().children.size(), 1);
+
+        QCOMPARE(fakeFolder.remoteModifier().children.size(), 1);
+        QCOMPARE(fakeFolder.remoteModifier().children.value("external").children.size(), 1);
+        QCOMPARE(fakeFolder.remoteModifier().children.value("external").children.value("file3").name, QStringLiteral("file3"));
+        QCOMPARE(nPUT, 1);
+        QCOMPARE(nDELETE, 0);
+    }
+
     void testDuplicateFileId_data()
     {
         QTest::addColumn<QString>("prefix");