diff options
Diffstat (limited to 'tests/test_mainwindow.cpp')
| -rw-r--r-- | tests/test_mainwindow.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/test_mainwindow.cpp b/tests/test_mainwindow.cpp index 4887647..918fe00 100644 --- a/tests/test_mainwindow.cpp +++ b/tests/test_mainwindow.cpp @@ -299,6 +299,7 @@ private slots: void aWorkerBackedWindowReturnsRealThreads(); void aWriteSaysItIsApplyingUntilTheWorkerHasRunIt(); void applyingARuleConfirmsWithTheCountAndUndoesExactly(); + void aSilentWriteDoesNotStealTheNextConfirmation(); void aPurgeTakesTheRowsOutOfTheViewWithoutARefresh(); void theDashboardFollowsAWriteToTheConversationItShows(); void anEditHeldByASyncSaysSoInsteadOfClaimingItLanded(); @@ -10020,6 +10021,35 @@ void TestMainWindow::applyingARuleConfirmsWithTheCountAndUndoesExactly() QStringLiteral("1")); } +void TestMainWindow::aSilentWriteDoesNotStealTheNextConfirmation() +{ + // Items 176 and 212. A rule is written one tag at a time, each operation + // its own armed command. If the first moves nothing (another writer got + // there between the count and the write), the worker stays silent for it, + // and the second operation's confirmation must not be credited to the + // first: its undo would then invert `+x` on messages that only lost `y`. + const Config config; + MainWindow window(config); + + const QList<const TagCommand *> commands = window.armTagCommandsForTesting( + { { { QStringLiteral("x") }, {} }, + { {}, { QStringLiteral("y") } } }); + QCOMPARE(commands.size(), 2); + + // Only the SECOND operation's confirmation arrives. + TagChange change; + change.messageIds = { QStringLiteral("moved@example.org") }; + change.removed = { QStringLiteral("y") }; + change.description = QStringLiteral("Apply rule"); + QVERIFY(QMetaObject::invokeMethod(&window, "onTagsApplied", + Q_ARG(TagChange, change))); + + QVERIFY2(commands.at(0)->changedMessageIds().isEmpty(), + qPrintable(commands.at(0)->changedMessageIds().join(u','))); + QCOMPARE(commands.at(1)->changedMessageIds(), + QStringList{ QStringLiteral("moved@example.org") }); +} + /// Item 181, from the user: "the thread dashboard doesn't update live with the /// modifications applied to the list pane. If I mark the thread as read, the /// dash still reports N unread". |
