]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
add test to check the order of actions when uploading new files
authorMatthieu Gallien <matthieu.gallien@nextcloud.com>
Thu, 9 Sep 2021 12:29:06 +0000 (14:29 +0200)
committerMatthieu Gallien <matthieu.gallien@nextcloud.com>
Tue, 26 Oct 2021 10:45:15 +0000 (12:45 +0200)
should allow to check that uploads are delayed after directories are
created

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
test/syncenginetestutils.cpp
test/syncenginetestutils.h
test/testsyncengine.cpp

index dcf641aa881f729087cc75dbcdb9e0bf1ae8247a..262e12e3309e0b55ffc816010eedacfbc38fc54f 100644 (file)
@@ -1059,6 +1059,16 @@ OCC::SyncFileItemPtr ItemCompletedSpy::findItem(const QString &path) const
     return OCC::SyncFileItemPtr::create();
 }
 
+OCC::SyncFileItemPtr ItemCompletedSpy::findItemWithExpectedRank(const QString &path, int rank) const
+{
+    auto item = (*this)[rank][0].value<OCC::SyncFileItemPtr>();
+    if (item->destination() == path) {
+        return item;
+    } else {
+        return OCC::SyncFileItemPtr::create();
+    }
+}
+
 FakeReply::FakeReply(QObject *parent)
     : QNetworkReply(parent)
 {
index e5624cd3cd42d24bfdf260809ff6eac0d4e19b62..0fdfb22dffe60210054ffebdc05ad88bd11ce2f2 100644 (file)
@@ -516,6 +516,8 @@ struct ItemCompletedSpy : QSignalSpy {
     {}
 
     OCC::SyncFileItemPtr findItem(const QString &path) const;
+
+    OCC::SyncFileItemPtr findItemWithExpectedRank(const QString &path, int rank) const;
 };
 
 // QTest::toString overloads
index 0d3ffeb40b3b0156b2ce169928404c1886ee1729..7e1fc36c46ea0f3eaf9c093f579364a174fa2b63 100644 (file)
@@ -33,6 +33,14 @@ bool itemDidCompleteSuccessfully(const ItemCompletedSpy &spy, const QString &pat
     return false;
 }
 
+bool itemDidCompleteSuccessfullyWithExpectedRank(const ItemCompletedSpy &spy, const QString &path, int rank)
+{
+    if (auto item = spy.findItemWithExpectedRank(path, rank)) {
+        return item->_status == SyncFileItem::Success;
+    }
+    return false;
+}
+
 class TestSyncEngine : public QObject
 {
     Q_OBJECT
@@ -82,6 +90,29 @@ private slots:
         QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
     }
 
+    void testDirUploadWithDelayedAlgorithm() {
+        FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()};
+        ItemCompletedSpy completeSpy(fakeFolder);
+        fakeFolder.localModifier().mkdir("Y");
+        fakeFolder.localModifier().insert("Y/d0");
+        fakeFolder.localModifier().mkdir("Z");
+        fakeFolder.localModifier().insert("Z/d0");
+        fakeFolder.localModifier().insert("A/a0");
+        fakeFolder.localModifier().insert("B/b0");
+        fakeFolder.localModifier().insert("r0");
+        fakeFolder.localModifier().insert("r1");
+        fakeFolder.syncOnce();
+        QVERIFY(itemDidCompleteSuccessfullyWithExpectedRank(completeSpy, "Y", 0));
+        QVERIFY(itemDidCompleteSuccessfullyWithExpectedRank(completeSpy, "Z", 1));
+        QVERIFY(itemDidCompleteSuccessfullyWithExpectedRank(completeSpy, "Y/d0", 2));
+        QVERIFY(itemDidCompleteSuccessfullyWithExpectedRank(completeSpy, "Z/d0", 3));
+        QVERIFY(itemDidCompleteSuccessfullyWithExpectedRank(completeSpy, "A/a0", 4));
+        QVERIFY(itemDidCompleteSuccessfullyWithExpectedRank(completeSpy, "B/b0", 5));
+        QVERIFY(itemDidCompleteSuccessfullyWithExpectedRank(completeSpy, "r0", 6));
+        QVERIFY(itemDidCompleteSuccessfullyWithExpectedRank(completeSpy, "r1", 7));
+        QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+    }
+
     void testLocalDelete() {
         FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()};
         ItemCompletedSpy completeSpy(fakeFolder);