diff options
Diffstat (limited to 'tests/test_mainwindow.cpp')
| -rw-r--r-- | tests/test_mainwindow.cpp | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/tests/test_mainwindow.cpp b/tests/test_mainwindow.cpp index 949b59e..38a8b08 100644 --- a/tests/test_mainwindow.cpp +++ b/tests/test_mainwindow.cpp @@ -169,6 +169,8 @@ private slots: void narrowingAnEmptyQueryBarIsAPlainSearch(); void aMalformedAccountIsReportedWithoutBlockingTheConstructor(); void aWorkerBackedWindowReturnsRealThreads(); + void aStartupAccountScopesTheStartupQuery(); + void aStartupAccountAlsoScopesASavedStartupQuery(); void aGeneratedStartupQueryActuallyRuns(); void everyBuiltinFilterButtonCarriesAnIconAndItsText(); void aQueryInTheMenuCanActuallyBeRun(); @@ -6382,6 +6384,93 @@ void TestMainWindow::aWorkerBackedWindowReturnsRealThreads() QTRY_VERIFY_WITH_TIMEOUT(model->rowCount(QModelIndex()) == 1, 15000); } +void TestMainWindow::aStartupAccountScopesTheStartupQuery() +{ + // "Start me in Work - Inbox rather than All accounts - Inbox." The account + // dropdown is set before the startup query runs, and because a built-in + // filter COMPOSES with the dropdown, the query it runs is scoped to that + // account without the filter knowing anything about startup. + QTemporaryDir dir; + QVERIFY(dir.isValid()); + const QString path = dir.filePath(QStringLiteral("qtmaildir.conf")); + { + QSettings s(path, QSettings::IniFormat); + // [general] keys are read WITHOUT the prefix, see writeSentConfig. + s.setValue(QStringLiteral("startup_query"), QStringLiteral("Inbox")); + s.setValue(QStringLiteral("startup_account"), QStringLiteral("work")); + s.beginGroup(QStringLiteral("account.work")); + s.setValue(QStringLiteral("maildir"), QStringLiteral("work")); + s.endGroup(); + s.beginGroup(QStringLiteral("account.personal")); + s.setValue(QStringLiteral("maildir"), QStringLiteral("personal")); + s.endGroup(); + s.sync(); + } + Config config; + config.load(path); + + MainWindow window(config); + + QCOMPARE(window.selectedAccountForTesting(), QStringLiteral("work")); + + auto *queryEdit = window.findChild<QLineEdit *>(QStringLiteral("queryEdit")); + QVERIFY(queryEdit); + QCOMPARE(queryEdit->text(), + QStringLiteral("path:\"work/**\" and (tag:inbox)")); + + // And the query that actually RAN carries the scope, not merely the text in + // the bar. runQuery() is told the filter is already scoped, so a mistake + // here would drop the scope rather than double it, and the bar would still + // look right. + // The exact string, not contains(): the double-scoped + // path:"work/**" and (path:"work/**" and (tag:inbox)) + // contains the scope too, returns exactly the right rows, and passed a + // contains() assertion while being the very thing item 93 exists to avoid. + QCOMPARE(window.lastRunQueryForTesting(), + QStringLiteral("path:\"work/**\" and (tag:inbox)")); +} + +void TestMainWindow::aStartupAccountAlsoScopesASavedStartupQuery() +{ + // The other half, and the one the scoping shortcut can silently drop. + // resolvedQuery(query, accountKey) ignores the account key for a SAVED + // query, because a saved query states its own scope. So the startup path + // gets back an unscoped string, and telling runQuery() the query is + // "already scoped" would leave it unscoped for good, with the dropdown + // sitting on Work and the list showing everything. + QTemporaryDir dir; + QVERIFY(dir.isValid()); + const QString path = dir.filePath(QStringLiteral("qtmaildir.conf")); + { + QSettings s(path, QSettings::IniFormat); + s.setValue(QStringLiteral("startup_query"), QStringLiteral("Mine")); + s.setValue(QStringLiteral("startup_account"), QStringLiteral("work")); + s.beginGroup(QStringLiteral("account.work")); + s.setValue(QStringLiteral("maildir"), QStringLiteral("work")); + s.endGroup(); + s.sync(); + } + QFile queries(dir.filePath(QStringLiteral("queries.json"))); + QVERIFY(queries.open(QIODevice::WriteOnly | QIODevice::Text)); + queries.write(QStringLiteral(R"({ + "version": 1, + "queries": [ { "name": "Mine", "query": "tag:todo" } ] + })").toUtf8()); + queries.close(); + + Config config; + config.load(path); + + MainWindow window(config); + + QCOMPARE(window.selectedAccountForTesting(), QStringLiteral("work")); + QVERIFY2(window.lastRunQueryForTesting() + == QStringLiteral("path:\"work/**\" and (tag:todo)"), + qPrintable(QStringLiteral("the dropdown says Work and the query " + "that ran was: ") + + window.lastRunQueryForTesting())); +} + void TestMainWindow::aGeneratedStartupQueryActuallyRuns() { // The second half of the startup defect. The constructor read |
