summaryrefslogtreecommitdiffstats
path: root/tests/test_config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_config.cpp')
-rw-r--r--tests/test_config.cpp123
1 files changed, 123 insertions, 0 deletions
diff --git a/tests/test_config.cpp b/tests/test_config.cpp
index e492480..24f6afb 100644
--- a/tests/test_config.cpp
+++ b/tests/test_config.cpp
@@ -34,6 +34,11 @@ private slots:
void brokenSyncCommandIsAProblem();
void malformedAccountIsAProblem();
void validConfigHasNoProblems();
+ void startupQueryDefaultsToUnread();
+ void startupQueryHonoursTheConfiguredName();
+ void unknownStartupQueryFallsBackAndReports();
+ void generalSectionKeysAreActuallyRead();
+ void messageZoomDefaultsAndValidates();
};
static QString writeIni(const QTemporaryDir &dir, const QString &body)
@@ -222,5 +227,123 @@ void TestConfig::validConfigHasNoProblems()
QVERIFY(config.warnings().isEmpty());
}
+void TestConfig::startupQueryDefaultsToUnread()
+{
+ // [queries] is read through childKeys(), which sorts alphabetically, so
+ // savedQueries().first() is "Flagged" here. The startup query must be
+ // chosen by name, not by sort order.
+ QTemporaryDir dir;
+ Config config;
+ config.load(writeIni(dir, QStringLiteral(
+ "[queries]\n"
+ "Inbox=tag:inbox\n"
+ "Unread=tag:unread\n"
+ "Flagged=tag:flagged\n")));
+
+ QCOMPARE(config.savedQueries().first().name, QStringLiteral("Flagged"));
+ QCOMPARE(config.startupSavedQuery().name, QStringLiteral("Unread"));
+ QCOMPARE(config.startupSavedQuery().query, QStringLiteral("tag:unread"));
+ QVERIFY(config.problems().isEmpty());
+}
+
+void TestConfig::startupQueryHonoursTheConfiguredName()
+{
+ QTemporaryDir dir;
+ Config config;
+ config.load(writeIni(dir, QStringLiteral(
+ "[general]\n"
+ "startup_query=Flagged\n"
+ "\n"
+ "[queries]\n"
+ "Inbox=tag:inbox\n"
+ "Unread=tag:unread\n"
+ "Flagged=tag:flagged\n")));
+
+ QCOMPARE(config.startupSavedQuery().name, QStringLiteral("Flagged"));
+ QVERIFY(config.problems().isEmpty());
+}
+
+void TestConfig::unknownStartupQueryFallsBackAndReports()
+{
+ // A name the user wrote that matches nothing is a problem: they asked for
+ // something and are not getting it. Startup still works, on the fallback.
+ QTemporaryDir dir;
+ Config config;
+ config.load(writeIni(dir, QStringLiteral(
+ "[general]\n"
+ "startup_query=Nonexistent\n"
+ "\n"
+ "[queries]\n"
+ "Inbox=tag:inbox\n")));
+
+ QCOMPARE(config.startupSavedQuery().name, QStringLiteral("Inbox"));
+ QCOMPARE(config.problems().size(), 1);
+
+ // The built-in default naming a query the user never created is NOT a
+ // problem: they did not get it wrong, they simply have no Unread entry.
+ QTemporaryDir quiet;
+ Config silent;
+ silent.load(writeIni(quiet, QStringLiteral(
+ "[queries]\n"
+ "Inbox=tag:inbox\n")));
+
+ QCOMPARE(silent.startupSavedQuery().name, QStringLiteral("Inbox"));
+ QVERIFY(silent.problems().isEmpty());
+}
+
+void TestConfig::generalSectionKeysAreActuallyRead()
+{
+ // QSettings' INI backend treats a section literally named [general] as its
+ // own fallback section and strips the prefix, so a "general/<key>" lookup
+ // matches nothing. notmuch_config was read that way and had never worked.
+ QTemporaryDir dir;
+ Config config;
+ config.load(writeIni(dir, QStringLiteral(
+ "[general]\n"
+ "notmuch_config=/somewhere/notmuch-config\n"
+ "\n"
+ "[sync]\n"
+ "command=/bin/true\n")));
+
+ QCOMPARE(config.notmuchConfig(),
+ QStringLiteral("/somewhere/notmuch-config"));
+}
+
+void TestConfig::messageZoomDefaultsAndValidates()
+{
+ // A QTemporaryDir per case, not one shared: writeIni() always uses the
+ // same file name, and QSettings caches by path, so a second load of the
+ // same path would return the first case's contents.
+
+ // Absent: 1.0, silently. Nothing the user asked for is being ignored.
+ {
+ QTemporaryDir dir;
+ Config config;
+ config.load(writeIni(dir, QStringLiteral("[general]\n")));
+ QCOMPARE(config.messageZoom(), 1.0);
+ QVERIFY(config.problems().isEmpty());
+ }
+
+ {
+ QTemporaryDir dir;
+ Config config;
+ config.load(writeIni(dir, QStringLiteral("[general]\n"
+ "message_zoom=1.25\n")));
+ QCOMPARE(config.messageZoom(), 1.25);
+ QVERIFY(config.problems().isEmpty());
+ }
+
+ // Present but unparseable is a problem: the user asked for something and
+ // is not getting it, which is the line addProblem() draws.
+ {
+ QTemporaryDir dir;
+ Config config;
+ config.load(writeIni(dir, QStringLiteral("[general]\n"
+ "message_zoom=huge\n")));
+ QCOMPARE(config.messageZoom(), 1.0);
+ QCOMPARE(config.problems().size(), 1);
+ }
+}
+
QTEST_MAIN(TestConfig)
#include "test_config.moc"