diff options
| author | Danilo M. <danix@danix.xyz> | 2026-10-31 11:44:55 +0100 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-10-31 11:44:55 +0100 |
| commit | 7ef382f7c1ea2dda38f81d007be29ae49612b95f (patch) | |
| tree | 85e511cd312e932a741c6aeb72db3717db7e35cb /tests | |
| parent | 519ee49584bbbf44b2fb132b598d3dd006056116 (diff) | |
| download | qtmaildir-7ef382f7c1ea2dda38f81d007be29ae49612b95f.tar.gz qtmaildir-7ef382f7c1ea2dda38f81d007be29ae49612b95f.zip | |
feat: apply a tag change to every message a query would move
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_notmuchworker.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/test_notmuchworker.cpp b/tests/test_notmuchworker.cpp index 10f8dbc..9b64f8e 100644 --- a/tests/test_notmuchworker.cpp +++ b/tests/test_notmuchworker.cpp @@ -59,6 +59,7 @@ private slots: void aThreadCarriesItsCardMessagesOwnTags(); void applyTagsToThreadsTagsEveryMessage(); + void applyTagsToQueryWritesOnlyWhatWouldChange(); void applyTagsToThreadsSpansMultipleThreads(); void applyTagsToThreadsWithNoThreadsDoesNothing(); @@ -1290,6 +1291,39 @@ void TestNotmuchWorker::applyTagsToThreadsTagsEveryMessage() restore.applyTags(emitted.inverted()); } +void TestNotmuchWorker::applyTagsToQueryWritesOnlyWhatWouldChange() +{ + // Item 212. Two messages in OPPOSITE states (item 87's lesson): a1 + // already carries the tag, a2 does not. Only a2 may be reported, or the + // undo would strip the tag from a message that had it before. + const QString threadId = threadIdOf(QStringLiteral("Release notes")); + QVERIFY(!threadId.isEmpty()); + + NotmuchWorker setup(m_fixture.configPath()); + setup.applyTags(TagChange{ { QStringLiteral("a1@example.org") }, + { QStringLiteral("backfill") }, {}, + QStringLiteral("seed") }); + + NotmuchWorker worker(m_fixture.configPath()); + QSignalSpy applied(&worker, &NotmuchWorker::tagsApplied); + worker.applyTagsToQuery(QStringLiteral("thread:%1").arg(threadId), + { QStringLiteral("backfill") }, {}, + QStringLiteral("Apply rule")); + + QCOMPARE(applied.size(), 1); + const TagChange emitted = applied.first().at(0).value<TagChange>(); + QCOMPARE(emitted.messageIds, QStringList{ QStringLiteral("a2@example.org") }); + QCOMPARE(emitted.description, QStringLiteral("Apply rule")); + QVERIFY(tagsOf(QStringLiteral("a2@example.org")) + .contains(QStringLiteral("backfill"))); + + NotmuchWorker restore(m_fixture.configPath()); + restore.applyTags(TagChange{ { QStringLiteral("a1@example.org"), + QStringLiteral("a2@example.org") }, + {}, { QStringLiteral("backfill") }, + QStringLiteral("restore") }); +} + void TestNotmuchWorker::applyTagsToThreadsSpansMultipleThreads() { const QString threadA = threadIdOf(QStringLiteral("Release notes")); |
