aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_notmuchworker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_notmuchworker.cpp')
-rw-r--r--tests/test_notmuchworker.cpp34
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"));