From 400b9fa93c73d1554e51413fe6525a0446131121 Mon Sep 17 00:00:00 2001 From: evgeny Date: Sat, 10 Oct 2026 01:39:43 +0200 Subject: [PATCH] Adapt browser regressions to asynchronous batch completion --- .../tests/test_member_files_browser.cpp | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/tools/chatgui/tests/test_member_files_browser.cpp b/tools/chatgui/tests/test_member_files_browser.cpp index e991ac2c..8138aaef 100644 --- a/tools/chatgui/tests/test_member_files_browser.cpp +++ b/tools/chatgui/tests/test_member_files_browser.cpp @@ -37,6 +37,7 @@ static QList transfers; static QList cancelled; static bool ready = true; static std::function transferStarted; +static std::function requestStarted; extern "C" int gui_bridge_is_uasync_ready(void) { return ready; } extern "C" UTUN_INSTANCE* gui_bridge_get_inst(void) { return nullptr; } extern "C" void gui_bridge_post_uasync_fn(void (*function)(void*), void* arg) { @@ -44,6 +45,7 @@ extern "C" void gui_bridge_post_uasync_fn(void (*function)(void*), void* arg) { auto* request = (mf_gui_request*)arg; if (request->message.command == MF_QUOTA) quotaCaptured = *request; else captured = *request; + if (requestStarted) requestStarted(*request); } if (function == member_files_gui_transfer) { auto request = *(mf_transfer_request*)arg; transfers.append(request); @@ -100,7 +102,7 @@ private slots: debug_set_category_level(DEBUG_CATEGORY_DEBUG, DEBUG_LEVEL_DEBUG); debug_set_category_level(DEBUG_CATEGORY_MEDIA, DEBUG_LEVEL_INFO); } - void init() { transfers.clear(); cancelled.clear(); ready = true; transferStarted = {}; } + void init() { transfers.clear(); cancelled.clear(); ready = true; transferStarted = {}; requestStarted = {}; } void deleteAndParentShortcuts() { sqlite3* sql = nullptr; QCOMPARE(sqlite3_open(":memory:", &sql), SQLITE_OK); @@ -124,9 +126,11 @@ private slots: // Offscreen не восстанавливает активное окно после закрытия модального диалога. browser.activateWindow(); QTRY_VERIFY(browser.isActiveWindow()); QTRY_VERIFY(tree->hasFocus()); answerDialog(QMessageBox::Yes); QTest::keyClick(tree, Qt::Key_Delete); + QCOMPARE(captured.message.command, uint8_t(MF_STAT)); respond(browser, captured, MF_OK); QCOMPARE(captured.message.command, uint8_t(MF_REMOVE_PATH)); QCOMPARE(captured.message.owner, 22ULL); QCOMPARE(QString::fromUtf8(captured.message.path), QString("documents/nested/remote.txt")); QCOMPARE(QByteArray((const char*)captured.message.version, 16), QByteArray(16, '\7')); + respond(browser, captured, MF_OK); QTRY_VERIFY(!cancelButton(browser)->isEnabled()); browser.activateWindow(); QTRY_VERIFY(browser.isActiveWindow()); location->setFocus(); location->setText("abc"); location->setCursorPosition(1); previous = captured.message.request_id; @@ -196,16 +200,17 @@ private slots: exported = QString::fromUtf8(request.local); { QFile file(exported); QVERIFY(file.open(QIODevice::WriteOnly)); QCOMPARE(file.write("downloaded bytes"), 16LL); } complete(browser, request); + QTRY_VERIFY(copy->isEnabled()); const auto* mime = QApplication::clipboard()->mimeData(); QVERIFY(mime->hasUrls()); QCOMPARE(mime->urls(), QList{QUrl::fromLocalFile(exported)}); QVERIFY(mime->data("x-special/gnome-copied-files").startsWith("copy\n")); - copy->trigger(); QCOMPARE(transfers.size(), 1); // Готовая версия не скачивается повторно. item->setData(0, Qt::UserRole + 2, QByteArray(16, '\10')); QApplication::clipboard()->setText("keep on error"); copy->trigger(); QTRY_COMPARE(transfers.size(), 2); - complete(browser, transfers.last(), MF_IO_ERROR); QCOMPARE(QApplication::clipboard()->text(), QString("keep on error")); + complete(browser, transfers.last(), MF_IO_ERROR); QTRY_VERIFY(copy->isEnabled()); + QCOMPARE(QApplication::clipboard()->text(), QString("keep on error")); copy->trigger(); QTRY_COMPARE(transfers.size(), 3); auto cancelledRequest = transfers.last(); - cancelButton(browser)->click(); complete(browser, cancelledRequest, MF_CANCELLED); + cancelButton(browser)->click(); complete(browser, cancelledRequest, MF_CANCELLED); QTRY_VERIFY(copy->isEnabled()); QCOMPARE(QApplication::clipboard()->text(), QString("keep on error")); bool committed = false, received = false; @@ -278,7 +283,7 @@ private slots: QCOMPARE(QString::fromUtf8(captured.message.path), QString("documents/dropped.txt")); int count = transfers.size(); respond(browser, captured, MF_NOT_FOUND); QCOMPARE(transfers.size(), count + 1); QCOMPARE(QString::fromUtf8(transfers.last().remote), QString("documents/dropped.txt")); - complete(browser, transfers.last()); + complete(browser, transfers.last()); QTRY_VERIFY(!cancel->isEnabled()); } browser.setChannel("42", 11); QDragEnterEvent other(QPoint(3, 3), Qt::CopyAction, &mime, Qt::LeftButton, Qt::NoModifier); @@ -358,12 +363,12 @@ private slots: QCOMPARE(QString::fromUtf8(transfers[0].remote), QString("a.txt")); QCOMPARE(transfers[0].owner, 22ULL); QCOMPARE(QString::fromUtf8(transfers[0].local), paths[0]); QCOMPARE(transfers[0].group, 42ULL); QCOMPARE(QByteArray((const char*)transfers[0].version, 16), QByteArray(16, '\0')); - complete(browser, transfers[0]); QCOMPARE(QString::fromUtf8(captured.message.path), QString("b.txt")); + complete(browser, transfers[0]); QTRY_COMPARE(QString::fromUtf8(captured.message.path), QString("b.txt")); answerDialog(QMessageBox::No); respond(browser, captured, MF_OK); - QCOMPARE(transfers.size(), 1); QCOMPARE(QString::fromUtf8(captured.message.path), QString("c.txt")); + QCOMPARE(transfers.size(), 1); QTRY_COMPARE(QString::fromUtf8(captured.message.path), QString("c.txt")); answerDialog(QMessageBox::Yes); respond(browser, captured, MF_OK); QCOMPARE(transfers.size(), 2); QCOMPARE(QByteArray((const char*)transfers[1].version, 16), QByteArray(16, '\7')); - complete(browser, transfers[1]); QVERIFY(status->text().contains("2 uploaded, 1 skipped")); QVERIFY(!cancel->isEnabled()); + complete(browser, transfers[1]); QTRY_VERIFY(!cancel->isEnabled()); QVERIFY(status->text().contains("Completed: 2, skipped: 1")); for (const auto& path : paths) QVERIFY(QFile::exists(path)); answerDialog(QDialog::Accepted); browser.uploadOwnFiles("42", paths); @@ -380,10 +385,11 @@ private slots: answerDialog(QDialog::Accepted); browser.uploadOwnFiles("42", paths); QTRY_COMPARE(captured.message.command, uint8_t(MF_STAT)); respond(browser, captured, MF_NOT_FOUND); QCOMPARE(transfers.size(), 4); complete(browser, transfers.last(), MF_NO_SPACE); - QVERIFY(status->text().contains("Upload stopped: a.txt")); QVERIFY(!cancel->isEnabled()); QCOMPARE(transfers.size(), 4); + QVERIFY(status->text().contains("a.txt")); QVERIFY(!cancel->isEnabled()); QCOMPARE(transfers.size(), 4); + QString invalid = dir.filePath(".unsupported"); { QFile file(invalid); QVERIFY(file.open(QIODevice::WriteOnly)); } answerDialog(QDialog::Accepted); browser.uploadOwnFiles("42", {dir.path()}); - QTRY_VERIFY(status->text().contains("not folders or links")); QVERIFY(!cancel->isEnabled()); QCOMPARE(transfers.size(), 4); + QTRY_VERIFY(status->text().contains("Cannot copy this path")); QVERIFY(!cancel->isEnabled()); QCOMPARE(transfers.size(), 4); QCOMPARE(sqlite3_exec(sql, "DELETE FROM peers_42 WHERE node_id=33", nullptr, nullptr, nullptr), SQLITE_OK); answerDialog(QMessageBox::Ok); browser.uploadOwnFiles("42", paths); QVERIFY(!cancel->isEnabled()); QCOMPARE(transfers.size(), 4);