add test for DB creation

This commit is contained in:
thez3ro 2017-10-29 15:04:46 +01:00
parent c8911c0dfd
commit c3c67f18b8
No known key found for this signature in database
GPG Key ID: F628F9E41DD7C073
6 changed files with 64 additions and 26 deletions

View File

@ -63,6 +63,7 @@ DatabaseWidget::DatabaseWidget(Database* db, QWidget* parent)
, m_newGroup(nullptr) , m_newGroup(nullptr)
, m_newEntry(nullptr) , m_newEntry(nullptr)
, m_newParent(nullptr) , m_newParent(nullptr)
, m_importingCsv(false)
{ {
m_mainWidget = new QWidget(this); m_mainWidget = new QWidget(this);
@ -137,13 +138,14 @@ DatabaseWidget::DatabaseWidget(Database* db, QWidget* parent)
m_editGroupWidget = new EditGroupWidget(); m_editGroupWidget = new EditGroupWidget();
m_editGroupWidget->setObjectName("editGroupWidget"); m_editGroupWidget->setObjectName("editGroupWidget");
m_changeMasterKeyWidget = new ChangeMasterKeyWidget(); m_changeMasterKeyWidget = new ChangeMasterKeyWidget();
m_changeMasterKeyWidget->setObjectName("changeMasterKeyWidget");
m_changeMasterKeyWidget->headlineLabel()->setText(tr("Change master key")); m_changeMasterKeyWidget->headlineLabel()->setText(tr("Change master key"));
m_csvImportWizard = new CsvImportWizard();
m_csvImportWizard->setObjectName("csvImportWizard");
QFont headlineLabelFont = m_changeMasterKeyWidget->headlineLabel()->font(); QFont headlineLabelFont = m_changeMasterKeyWidget->headlineLabel()->font();
headlineLabelFont.setBold(true); headlineLabelFont.setBold(true);
headlineLabelFont.setPointSize(headlineLabelFont.pointSize() + 2); headlineLabelFont.setPointSize(headlineLabelFont.pointSize() + 2);
m_changeMasterKeyWidget->headlineLabel()->setFont(headlineLabelFont); m_changeMasterKeyWidget->headlineLabel()->setFont(headlineLabelFont);
m_csvImportWizard = new CsvImportWizard();
m_csvImportWizard->setObjectName("csvImportWizard");
m_databaseSettingsWidget = new DatabaseSettingsWidget(); m_databaseSettingsWidget = new DatabaseSettingsWidget();
m_databaseSettingsWidget->setObjectName("databaseSettingsWidget"); m_databaseSettingsWidget->setObjectName("databaseSettingsWidget");
m_databaseOpenWidget = new DatabaseOpenWidget(); m_databaseOpenWidget = new DatabaseOpenWidget();
@ -782,6 +784,12 @@ void DatabaseWidget::switchToGroupEdit(Group* group, bool create)
void DatabaseWidget::updateMasterKey(bool accepted) void DatabaseWidget::updateMasterKey(bool accepted)
{ {
if (m_importingCsv) {
setCurrentWidget(m_csvImportWizard);
m_csvImportWizard->keyFinished(accepted, m_changeMasterKeyWidget->newMasterKey());
return;
}
if (accepted) { if (accepted) {
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
bool result = m_db->setKey(m_changeMasterKeyWidget->newMasterKey()); bool result = m_db->setKey(m_changeMasterKeyWidget->newMasterKey());
@ -915,6 +923,7 @@ void DatabaseWidget::switchToMasterKeyChange(bool disableCancel)
m_changeMasterKeyWidget->clearForms(); m_changeMasterKeyWidget->clearForms();
m_changeMasterKeyWidget->setCancelEnabled(!disableCancel); m_changeMasterKeyWidget->setCancelEnabled(!disableCancel);
setCurrentWidget(m_changeMasterKeyWidget); setCurrentWidget(m_changeMasterKeyWidget);
m_importingCsv = false;
} }
void DatabaseWidget::switchToDatabaseSettings() void DatabaseWidget::switchToDatabaseSettings()
@ -941,9 +950,11 @@ void DatabaseWidget::switchToOpenDatabase(const QString& fileName, const QString
void DatabaseWidget::switchToImportCsv(const QString& fileName) void DatabaseWidget::switchToImportCsv(const QString& fileName)
{ {
updateFilename(fileName); updateFilename(fileName);
switchToMasterKeyChange();
m_csvImportWizard->load(fileName, m_db); m_csvImportWizard->load(fileName, m_db);
setCurrentWidget(m_csvImportWizard); m_changeMasterKeyWidget->clearForms();
m_changeMasterKeyWidget->setCancelEnabled(false);
setCurrentWidget(m_changeMasterKeyWidget);
m_importingCsv = true;
} }
void DatabaseWidget::switchToOpenMergeDatabase(const QString& fileName) void DatabaseWidget::switchToOpenMergeDatabase(const QString& fileName)

View File

@ -236,6 +236,9 @@ private:
bool m_searchCaseSensitive; bool m_searchCaseSensitive;
bool m_searchLimitGroup; bool m_searchLimitGroup;
// CSV import state
bool m_importingCsv;
// Autoreload // Autoreload
QFileSystemWatcher m_fileWatcher; QFileSystemWatcher m_fileWatcher;
QTimer m_fileWatchTimer; QTimer m_fileWatchTimer;

View File

@ -28,19 +28,9 @@ CsvImportWizard::CsvImportWizard(QWidget *parent)
: DialogyWidget(parent) : DialogyWidget(parent)
{ {
m_layout = new QGridLayout(this); m_layout = new QGridLayout(this);
m_pages = new QStackedWidget(parent); m_layout->addWidget(m_parse = new CsvImportWidget(this), 0, 0);
m_layout->addWidget(m_pages, 0, 0);
m_pages->addWidget(key = new ChangeMasterKeyWidget(m_pages)); connect(m_parse, SIGNAL(editFinished(bool)), this, SLOT(parseFinished(bool)));
m_pages->addWidget(parse = new CsvImportWidget(m_pages));
key->headlineLabel()->setText(tr("Import CSV file"));
QFont headLineFont = key->headlineLabel()->font();
headLineFont.setBold(true);
headLineFont.setPointSize(headLineFont.pointSize() + 2);
key->headlineLabel()->setFont(headLineFont);
connect(key, SIGNAL(editFinished(bool)), this, SLOT(keyFinished(bool)));
connect(parse, SIGNAL(editFinished(bool)), this, SLOT(parseFinished(bool)));
} }
CsvImportWizard::~CsvImportWizard() CsvImportWizard::~CsvImportWizard()
@ -49,21 +39,18 @@ CsvImportWizard::~CsvImportWizard()
void CsvImportWizard::load(const QString& filename, Database* database) void CsvImportWizard::load(const QString& filename, Database* database)
{ {
m_db = database; m_db = database;
parse->load(filename, database); m_parse->load(filename, database);
key->clearForms();
} }
void CsvImportWizard::keyFinished(bool accepted) void CsvImportWizard::keyFinished(bool accepted, CompositeKey key)
{ {
if (!accepted) { if (!accepted) {
emit importFinished(false); emit importFinished(false);
return; return;
} }
m_pages->setCurrentIndex(m_pages->currentIndex()+1);
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
bool result = m_db->setKey(key->newMasterKey()); bool result = m_db->setKey(key);
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
if (!result) { if (!result) {

View File

@ -38,19 +38,17 @@ public:
explicit CsvImportWizard(QWidget *parent = nullptr); explicit CsvImportWizard(QWidget *parent = nullptr);
~CsvImportWizard(); ~CsvImportWizard();
void load(const QString& filename, Database *database); void load(const QString& filename, Database *database);
void keyFinished(bool accepted, CompositeKey key);
signals: signals:
void importFinished(bool accepted); void importFinished(bool accepted);
private slots: private slots:
void keyFinished(bool accepted);
void parseFinished(bool accepted); void parseFinished(bool accepted);
private: private:
Database* m_db; Database* m_db;
CsvImportWidget* parse; CsvImportWidget* m_parse;
ChangeMasterKeyWidget* key;
QStackedWidget *m_pages;
QGridLayout *m_layout; QGridLayout *m_layout;
}; };

View File

@ -49,6 +49,7 @@
#include "gui/DatabaseTabWidget.h" #include "gui/DatabaseTabWidget.h"
#include "gui/DatabaseWidget.h" #include "gui/DatabaseWidget.h"
#include "gui/CloneDialog.h" #include "gui/CloneDialog.h"
#include "gui/PasswordEdit.h"
#include "gui/TotpDialog.h" #include "gui/TotpDialog.h"
#include "gui/SetupTotpDialog.h" #include "gui/SetupTotpDialog.h"
#include "gui/FileDialog.h" #include "gui/FileDialog.h"
@ -119,6 +120,43 @@ void TestGui::cleanup()
m_dbWidget = nullptr; m_dbWidget = nullptr;
} }
void TestGui::testCreateDatabase()
{
fileDialog()->setNextFileName(QString(KEEPASSX_TEST_DATA_DIR).append("/NewTestDatabase.kdbx"));
triggerAction("actionDatabaseNew");
DatabaseWidget* dbWidget = m_tabWidget->currentDatabaseWidget();
QWidget* databaseNewWidget = dbWidget->findChild<QWidget*>("changeMasterKeyWidget");
QList<QWidget*> databaseNewWidgets = dbWidget->findChildren<QWidget*>("changeMasterKeyWidget");
PasswordEdit* editPassword = databaseNewWidget->findChild<PasswordEdit*>("enterPasswordEdit");
QVERIFY(editPassword->isVisible());
QLineEdit* editPasswordRepeat = databaseNewWidget->findChild<QLineEdit*>("repeatPasswordEdit");
QVERIFY(editPasswordRepeat->isVisible());
m_tabWidget->currentDatabaseWidget()->setCurrentWidget(databaseNewWidget);
QTest::keyClicks(editPassword, "test");
QTest::keyClicks(editPasswordRepeat, "test");
QTest::keyClick(editPasswordRepeat, Qt::Key_Enter);
QTRY_VERIFY(m_tabWidget->tabText(m_tabWidget->currentIndex()).contains("*"));
m_db = m_tabWidget->currentDatabaseWidget()->database();
// there is a new empty db
QCOMPARE(m_db->rootGroup()->children().size(), 0);
// clean
MessageBox::setNextAnswer(QMessageBox::No);
triggerAction("actionDatabaseClose");
Tools::wait(100);
QFile dbfile(QString(KEEPASSX_TEST_DATA_DIR).append("/NewTestDatabase.kdbx"));
dbfile.remove();
}
void TestGui::testMergeDatabase() void TestGui::testMergeDatabase()
{ {
// It is safe to ignore the warning this line produces // It is safe to ignore the warning this line produces

View File

@ -40,6 +40,7 @@ private slots:
void cleanup(); void cleanup();
void cleanupTestCase(); void cleanupTestCase();
void testCreateDatabase();
void testMergeDatabase(); void testMergeDatabase();
void testAutoreloadDatabase(); void testAutoreloadDatabase();
void testTabs(); void testTabs();