diff --git a/src/gui/reports/ReportsWidgetHealthcheck.cpp b/src/gui/reports/ReportsWidgetHealthcheck.cpp index 4cd9b64e6..b3dd6f5e8 100644 --- a/src/gui/reports/ReportsWidgetHealthcheck.cpp +++ b/src/gui/reports/ReportsWidgetHealthcheck.cpp @@ -304,6 +304,8 @@ void ReportsWidgetHealthcheck::calculateHealth() // Only show the "show excluded" checkbox if there are any excluded entries in the database m_ui->showExcluded->setVisible(health->anyExcludedEntries()); + + emit tablePopulated(); } void ReportsWidgetHealthcheck::emitEntryActivated(const QModelIndex& index) diff --git a/src/gui/reports/ReportsWidgetHealthcheck.h b/src/gui/reports/ReportsWidgetHealthcheck.h index 9a46b36b1..f5a27d678 100644 --- a/src/gui/reports/ReportsWidgetHealthcheck.h +++ b/src/gui/reports/ReportsWidgetHealthcheck.h @@ -48,6 +48,7 @@ protected: signals: void entryActivated(Entry*); + void tablePopulated(); public slots: void calculateHealth(); diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp index 96c8b0703..3dde7edeb 100644 --- a/tests/gui/TestGui.cpp +++ b/tests/gui/TestGui.cpp @@ -62,6 +62,8 @@ #include "gui/group/GroupModel.h" #include "gui/group/GroupView.h" #include "gui/remote/RemoteHandler.h" +#include "gui/reports/ReportsWidgetHealthcheck.h" +#include "gui/reports/ReportsDialog.h" #include "gui/tag/TagsEdit.h" #include "gui/wizard/NewDatabaseWizard.h" #include "keys/FileKey.h" @@ -2464,6 +2466,68 @@ void TestGui::testMenuActionStates() QVERIFY(isActionEnabled("actionPasswordGenerator")); } +void TestGui::testDatabaseReports() +{ + addGroup("Finance"); + addGroup("Entertainment"); + + addEntry("Finance", "Chase", "user1", "password"); + addEntry("Finance", "Amex", "user1", "password123"); + addEntry("Finance", "Capital One", "user1", "lasdjfi309q23i8u2wjei"); + + addEntry("Entertainment", "Netflix", "user1", "password"); + addEntry("Entertainment", "Hulu", "user1", "jwafh783jiwaef"); + addEntry("Entertainment", "Apple TV", "user1", "21983yr2weuajfduiwife;j"); + + Group* entertainmentGroup = m_dbWidget->currentGroup()->findChildByName("Entertainment"); + QCOMPARE(entertainmentGroup->entries().size(), 3); + + Group* financeGroup = m_dbWidget->currentGroup()->findChildByName("Finance"); + QCOMPARE(financeGroup->entries().size(), 3); + + auto *actionReports = m_mainWindow->findChild("actionReports"); + QVERIFY(actionReports->isEnabled()); + + auto* toolBar = m_mainWindow->findChild("toolBar"); + QVERIFY(toolBar); + + QWidget* actionReportsWidget = toolBar->widgetForAction(actionReports); + QVERIFY(actionReportsWidget); + QVERIFY(actionReportsWidget->isVisible()); + QVERIFY(actionReportsWidget->isEnabled()); + + QTest::mouseClick(actionReportsWidget, Qt::LeftButton); + + auto *reportsDialog = m_dbWidget->findChild("reportsDialog"); + QVERIFY(reportsDialog); + + CategoryListWidget *categoryList = reportsDialog->findChild("categoryList"); + categoryList->setCurrentCategory(1); + + QStackedWidget *stackedWidget = reportsDialog->findChild("stackedWidget"); + QVERIFY(stackedWidget); + stackedWidget->setCurrentIndex(1); + + ReportsWidgetHealthcheck* healthCheckWidget = reportsDialog->findChild(); + QVERIFY(healthCheckWidget); + + QTest::mouseClick(healthCheckWidget, Qt::LeftButton); + QTableView *healthTable = healthCheckWidget->findChild("healthcheckTableView"); + QVERIFY(healthTable); + + QSignalSpy healthCheckWidgetSpy(healthCheckWidget, &ReportsWidgetHealthcheck::tablePopulated); + + QAbstractItemModel *healthModel = healthTable->model(); + QVERIFY(healthModel); + + QTRY_COMPARE(healthCheckWidgetSpy.count(), 1); + QCOMPARE(healthModel->rowCount(), 6); + + auto *reportsDialogButtonBox = reportsDialog->findChild("buttonBox"); + QTest::mouseClick(reportsDialogButtonBox->button(QDialogButtonBox::Close), Qt::LeftButton); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::ViewMode); +} + void TestGui::addCannedEntries() { // Find buttons @@ -2494,6 +2558,51 @@ void TestGui::addCannedEntries() QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); } +void TestGui::addGroup(const QString &name) +{ + // Find buttons for group creation + auto* editGroupWidget = m_dbWidget->findChild("editGroupWidget"); + auto* nameEdit = editGroupWidget->findChild("editName"); + auto* editGroupWidgetButtonBox = editGroupWidget->findChild("buttonBox"); + + // Add group with specified name + Group *rootGroup = m_db->rootGroup(); + m_dbWidget->groupView()->setCurrentGroup(rootGroup); // Add group on root level + m_dbWidget->createGroup(); + QTest::keyClicks(nameEdit, name); + QTest::mouseClick(editGroupWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); + m_dbWidget->groupView()->setCurrentGroup(rootGroup); // Reset to root level +} + +void TestGui::addEntry(const QString &groupName, const QString &title, const QString &username, const QString &password) +{ + // Find buttons + auto* toolBar = m_mainWindow->findChild("toolBar"); + QWidget* entryNewWidget = toolBar->widgetForAction(m_mainWindow->findChild("actionEntryNew")); + auto* editEntryWidget = m_dbWidget->findChild("editEntryWidget"); + auto* titleEdit = editEntryWidget->findChild("titleEdit"); + auto* usernameComboBox = editEntryWidget->findChild("usernameComboBox"); + auto* passwordEdit = + editEntryWidget->findChild("passwordEdit")->findChild("passwordEdit"); + auto* editEntryWidgetButtonBox = editEntryWidget->findChild("buttonBox"); + + // Add entry to specified group + QVERIFY(m_dbWidget->currentGroup()); + Group* group = m_dbWidget->currentGroup()->findChildByName(groupName); + m_dbWidget->groupView()->setCurrentGroup(group); + + QTest::mouseClick(entryNewWidget, Qt::LeftButton); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::EditEntryMode); + + QTest::keyClicks(titleEdit, title); + QTest::keyClicks(usernameComboBox, username); + QTest::keyClicks(passwordEdit, password); + QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); + + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::Mode::ViewMode); + m_dbWidget->groupView()->setCurrentGroup(m_db->rootGroup()); +} + void TestGui::checkDatabase(const QString& filePath, const QString& expectedDbName) { auto key = QSharedPointer::create(); diff --git a/tests/gui/TestGui.h b/tests/gui/TestGui.h index 514f7ce95..1ff48d5c6 100644 --- a/tests/gui/TestGui.h +++ b/tests/gui/TestGui.h @@ -71,9 +71,12 @@ private slots: void testTrayRestoreHide(); void testShortcutConfig(); void testMenuActionStates(); + void testExcludeGroupFromReports(); private: void addCannedEntries(); + void addGroup(const QString &name); + void addEntry(const QString &groupName, const QString &title, const QString &username, const QString &password); void checkDatabase(const QString& filePath, const QString& expectedDbName); void checkDatabase(const QString& filePath = {}); void triggerAction(const QString& name);