if (_childModified && _dirItem->_instruction == CSYNC_INSTRUCTION_REMOVE) {
// re-create directory that has modified contents
_dirItem->_instruction = CSYNC_INSTRUCTION_NEW;
+ _dirItem->_direction = _dirItem->_direction == SyncFileItem::Up ? SyncFileItem::Down : SyncFileItem::Up;
}
if (_childModified && _dirItem->_instruction == CSYNC_INSTRUCTION_TYPE_CHANGE && !_dirItem->isDirectory()) {
// Replacing a directory by a file is a conflict, if the directory had modified children
nextcloud_add_test(SyncEngine "syncenginetestutils.h")
nextcloud_add_test(SyncVirtualFiles "syncenginetestutils.h")
nextcloud_add_test(SyncMove "syncenginetestutils.h")
+nextcloud_add_test(SyncDelete "syncenginetestutils.h")
nextcloud_add_test(SyncConflict "syncenginetestutils.h")
nextcloud_add_test(SyncFileStatusTracker "syncenginetestutils.h")
nextcloud_add_test(Download "syncenginetestutils.h")
--- /dev/null
+/*
+ * This software is in the public domain, furnished "as is", without technical
+ * support, and with no warranty, express or implied, as to its usefulness for
+ * any purpose.
+ *
+ */
+
+#include <QtTest>
+#include "syncenginetestutils.h"
+#include <syncengine.h>
+
+using namespace OCC;
+
+class TestSyncDelete : public QObject
+{
+ Q_OBJECT
+
+private slots:
+
+ void testDeleteDirectoryWithNewFile()
+ {
+ FakeFolder fakeFolder{ FileInfo::A12_B12_C12_S12() };
+
+ // Remove a directory on the server with new files on the client
+ fakeFolder.remoteModifier().remove("A");
+ fakeFolder.localModifier().insert("A/hello.txt");
+
+ // Symetry
+ fakeFolder.localModifier().remove("B");
+ fakeFolder.remoteModifier().insert("B/hello.txt");
+
+ QVERIFY(fakeFolder.syncOnce());
+
+ // A/a1 must be gone because the directory was removed on the server, but hello.txt must be there
+ QVERIFY(!fakeFolder.currentRemoteState().find("A/a1"));
+ QVERIFY(fakeFolder.currentRemoteState().find("A/hello.txt"));
+
+ // Symetry
+ QVERIFY(!fakeFolder.currentRemoteState().find("B/b1"));
+ QVERIFY(fakeFolder.currentRemoteState().find("B/hello.txt"));
+
+ QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+ }
+};
+
+QTEST_GUILESS_MAIN(TestSyncDelete)
+#include "testsyncdelete.moc"