From a6f01349e889c720843edbeef8a6d501ff7a226b Mon Sep 17 00:00:00 2001 From: Bernhard Berg <34011017+Colfenor@users.noreply.github.com> Date: Sat, 12 Dec 2020 18:14:18 +0100 Subject: [PATCH] Redo 'delete entries no confirm' functionality & unit-tests (#5812) * Fixes #5232 --- src/core/Config.cpp | 1 + src/core/Config.h | 1 + src/gui/ApplicationSettingsWidget.cpp | 4 +++ src/gui/ApplicationSettingsWidgetSecurity.ui | 7 ++++ src/gui/DatabaseWidget.cpp | 2 ++ tests/gui/TestGui.cpp | 38 +++++++++++++------- 6 files changed, 41 insertions(+), 12 deletions(-) diff --git a/src/core/Config.cpp b/src/core/Config.cpp index ce575442..8b2b16cf 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -138,6 +138,7 @@ static const QHash configStrings = { {Config::Security_ResetTouchId, {QS("Security/ResetTouchId"), Roaming, false}}, {Config::Security_ResetTouchIdTimeout, {QS("Security/ResetTouchIdTimeout"), Roaming, 30}}, {Config::Security_ResetTouchIdScreenlock,{QS("Security/ResetTouchIdScreenlock"), Roaming, true}}, + {Config::Security_NoConfirmMoveEntryToRecycleBin,{QS("Security/NoConfirmMoveEntryToRecycleBin"), Roaming, true}}, // Browser {Config::Browser_Enabled, {QS("Browser/Enabled"), Roaming, false}}, diff --git a/src/core/Config.h b/src/core/Config.h index 55380469..8b9a02a5 100644 --- a/src/core/Config.h +++ b/src/core/Config.h @@ -119,6 +119,7 @@ public: Security_ResetTouchId, Security_ResetTouchIdTimeout, Security_ResetTouchIdScreenlock, + Security_NoConfirmMoveEntryToRecycleBin, Browser_Enabled, Browser_ShowNotification, diff --git a/src/gui/ApplicationSettingsWidget.cpp b/src/gui/ApplicationSettingsWidget.cpp index 09fb0515..182dcd05 100644 --- a/src/gui/ApplicationSettingsWidget.cpp +++ b/src/gui/ApplicationSettingsWidget.cpp @@ -280,6 +280,8 @@ void ApplicationSettingsWidget::loadSettings() m_secUi->passwordsRepeatVisibleCheckBox->setChecked( config()->get(Config::Security_PasswordsRepeatVisible).toBool()); m_secUi->hideNotesCheckBox->setChecked(config()->get(Config::Security_HideNotes).toBool()); + m_secUi->NoConfirmMoveEntryToRecycleBinCheckBox->setChecked( + config()->get(Config::Security_NoConfirmMoveEntryToRecycleBin).toBool()); m_secUi->touchIDResetCheckBox->setChecked(config()->get(Config::Security_ResetTouchId).toBool()); m_secUi->touchIDResetSpinBox->setValue(config()->get(Config::Security_ResetTouchIdTimeout).toInt()); @@ -379,6 +381,8 @@ void ApplicationSettingsWidget::saveSettings() config()->set(Config::Security_HidePasswordPreviewPanel, m_secUi->passwordPreviewCleartextCheckBox->isChecked()); config()->set(Config::Security_PasswordsRepeatVisible, m_secUi->passwordsRepeatVisibleCheckBox->isChecked()); config()->set(Config::Security_HideNotes, m_secUi->hideNotesCheckBox->isChecked()); + config()->set(Config::Security_NoConfirmMoveEntryToRecycleBin, + m_secUi->NoConfirmMoveEntryToRecycleBinCheckBox->isChecked()); config()->set(Config::Security_ResetTouchId, m_secUi->touchIDResetCheckBox->isChecked()); config()->set(Config::Security_ResetTouchIdTimeout, m_secUi->touchIDResetSpinBox->value()); diff --git a/src/gui/ApplicationSettingsWidgetSecurity.ui b/src/gui/ApplicationSettingsWidgetSecurity.ui index bd4af19f..b338ffa8 100644 --- a/src/gui/ApplicationSettingsWidgetSecurity.ui +++ b/src/gui/ApplicationSettingsWidgetSecurity.ui @@ -257,6 +257,13 @@ + + + + Move entries to recycle bin without confirmation + + + diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index c96b2a6b..ef1ed68e 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -571,6 +571,8 @@ bool DatabaseWidget::confirmDeleteEntries(QList entries, bool permanent) MessageBox::Cancel); return answer == MessageBox::Delete; + } else if (config()->get(Config::Security_NoConfirmMoveEntryToRecycleBin).toBool()) { + return true; } else { QString prompt; if (entries.size() == 1) { diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp index 68c1bfb2..1de3c6be 100644 --- a/tests/gui/TestGui.cpp +++ b/tests/gui/TestGui.cpp @@ -1013,26 +1013,40 @@ void TestGui::testDeleteEntry() QVERIFY(entryDeleteWidget->isEnabled()); QVERIFY(!m_db->metadata()->recycleBin()); - MessageBox::setNextAnswer(MessageBox::Move); - QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); + // Test with confirmation dialog + if (!config()->get(Config::Security_NoConfirmMoveEntryToRecycleBin).toBool()) { + MessageBox::setNextAnswer(MessageBox::Move); + QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); - QCOMPARE(entryView->model()->rowCount(), 3); - QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 1); + QCOMPARE(entryView->model()->rowCount(), 3); + QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 1); + } else { + // no confirm dialog + QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); + QCOMPARE(entryView->model()->rowCount(), 3); + QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 1); + } // Select multiple entries and move them to the recycling bin clickIndex(entryView->model()->index(1, 1), entryView, Qt::LeftButton); clickIndex(entryView->model()->index(2, 1), entryView, Qt::LeftButton, Qt::ControlModifier); QCOMPARE(entryView->selectionModel()->selectedRows().size(), 2); - MessageBox::setNextAnswer(MessageBox::Cancel); - QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); - QCOMPARE(entryView->model()->rowCount(), 3); - QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 1); + if (!config()->get(Config::Security_NoConfirmMoveEntryToRecycleBin).toBool()) { + MessageBox::setNextAnswer(MessageBox::Cancel); + QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); + QCOMPARE(entryView->model()->rowCount(), 3); + QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 1); - MessageBox::setNextAnswer(MessageBox::Move); - QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); - QCOMPARE(entryView->model()->rowCount(), 1); - QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 3); + MessageBox::setNextAnswer(MessageBox::Move); + QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); + QCOMPARE(entryView->model()->rowCount(), 1); + QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 3); + } else { + QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); + QCOMPARE(entryView->model()->rowCount(), 1); + QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 3); + } // Go to the recycling bin QCOMPARE(groupView->currentGroup(), m_db->rootGroup());