diff options
author | louib <L0U13@protonmail.com> | 2019-06-19 04:45:24 +0300 |
---|---|---|
committer | Jonathan White <support@dmapps.us> | 2019-06-19 04:45:24 +0300 |
commit | 84eec03cb78a47f4677d189cdb00df882336147c (patch) | |
tree | 43e7aeef91a95678bd295f185facb32880d093a5 /tests/TestCli.cpp | |
parent | 9e06dc0d5c68e1c0f3ffd3793d28a2f75806535b (diff) |
Add CLI --dry-run option for merge (#3254)
Diffstat (limited to 'tests/TestCli.cpp')
-rw-r--r-- | tests/TestCli.cpp | 67 |
1 files changed, 58 insertions, 9 deletions
diff --git a/tests/TestCli.cpp b/tests/TestCli.cpp index 530e1eabe..a7bb067c8 100644 --- a/tests/TestCli.cpp +++ b/tests/TestCli.cpp @@ -965,23 +965,27 @@ void TestCli::testMerge() Kdbx4Writer writer; Kdbx4Reader reader; - // load test database and save a copy + // load test database and save copies auto db = readTestDatabase(); QVERIFY(db); TemporaryFile targetFile1; targetFile1.open(); writer.writeDatabase(&targetFile1, db.data()); targetFile1.close(); - - // save another copy with a different password TemporaryFile targetFile2; targetFile2.open(); + writer.writeDatabase(&targetFile2, db.data()); + targetFile2.close(); + + // save another copy with a different password + TemporaryFile targetFile3; + targetFile3.open(); auto oldKey = db->key(); auto key = QSharedPointer<CompositeKey>::create(); key->addKey(QSharedPointer<PasswordKey>::create("b")); db->setKey(key); - writer.writeDatabase(&targetFile2, db.data()); - targetFile2.close(); + writer.writeDatabase(&targetFile3, db.data()); + targetFile3.close(); db->setKey(oldKey); // then add a new entry to the in-memory database and save another copy @@ -1003,7 +1007,11 @@ void TestCli::testMerge() m_stdoutFile->seek(pos); m_stdoutFile->readLine(); m_stderrFile->reset(); - QCOMPARE(m_stdoutFile->readAll(), QByteArray("Successfully merged the database files.\n")); + QList<QByteArray> outLines1 = m_stdoutFile->readAll().split('\n'); + QCOMPARE(outLines1.at(0).split('[').at(0), QByteArray("\tOverwriting Internet ")); + QCOMPARE(outLines1.at(1).split('[').at(0), QByteArray("\tCreating missing Some Website ")); + QCOMPARE(outLines1.at(2), + QString("Successfully merged %1 into %2.").arg(sourceFile.fileName(), targetFile1.fileName()).toUtf8()); QFile readBack(targetFile1.fileName()); readBack.open(QIODevice::ReadOnly); @@ -1016,17 +1024,58 @@ void TestCli::testMerge() QCOMPARE(entry1->title(), QString("Some Website")); QCOMPARE(entry1->password(), QString("secretsecretsecret")); + // the dry run option should not modify the target database. + pos = m_stdoutFile->pos(); + Utils::Test::setNextPassword("a"); + mergeCmd.execute({"merge", "--dry-run", "-s", targetFile2.fileName(), sourceFile.fileName()}); + m_stdoutFile->seek(pos); + m_stdoutFile->readLine(); + m_stderrFile->reset(); + QList<QByteArray> outLines2 = m_stdoutFile->readAll().split('\n'); + QCOMPARE(outLines2.at(0).split('[').at(0), QByteArray("\tOverwriting Internet ")); + QCOMPARE(outLines2.at(1).split('[').at(0), QByteArray("\tCreating missing Some Website ")); + QCOMPARE(outLines2.at(2), QByteArray("Database was not modified by merge operation.")); + + QFile readBack2(targetFile2.fileName()); + readBack2.open(QIODevice::ReadOnly); + mergedDb = QSharedPointer<Database>::create(); + reader.readDatabase(&readBack2, oldKey, mergedDb.data()); + readBack2.close(); + QVERIFY(mergedDb); + entry1 = mergedDb->rootGroup()->findEntryByPath("/Internet/Some Website"); + QVERIFY(!entry1); + + // the dry run option can be used with the quiet option + pos = m_stdoutFile->pos(); + Utils::Test::setNextPassword("a"); + mergeCmd.execute({"merge", "--dry-run", "-s", "-q", targetFile2.fileName(), sourceFile.fileName()}); + m_stdoutFile->seek(pos); + m_stdoutFile->readLine(); + m_stderrFile->reset(); + QCOMPARE(m_stdoutFile->readAll(), QByteArray("")); + + readBack2.setFileName(targetFile2.fileName()); + readBack2.open(QIODevice::ReadOnly); + mergedDb = QSharedPointer<Database>::create(); + reader.readDatabase(&readBack2, oldKey, mergedDb.data()); + readBack2.close(); + QVERIFY(mergedDb); + entry1 = mergedDb->rootGroup()->findEntryByPath("/Internet/Some Website"); + QVERIFY(!entry1); + // try again with different passwords for both files pos = m_stdoutFile->pos(); Utils::Test::setNextPassword("b"); Utils::Test::setNextPassword("a"); - mergeCmd.execute({"merge", targetFile2.fileName(), sourceFile.fileName()}); + mergeCmd.execute({"merge", targetFile3.fileName(), sourceFile.fileName()}); m_stdoutFile->seek(pos); m_stdoutFile->readLine(); m_stdoutFile->readLine(); - QCOMPARE(m_stdoutFile->readAll(), QByteArray("Successfully merged the database files.\n")); + QList<QByteArray> outLines3 = m_stdoutFile->readAll().split('\n'); + QCOMPARE(outLines3.at(2), + QString("Successfully merged %1 into %2.").arg(sourceFile.fileName(), targetFile3.fileName()).toUtf8()); - readBack.setFileName(targetFile2.fileName()); + readBack.setFileName(targetFile3.fileName()); readBack.open(QIODevice::ReadOnly); mergedDb = QSharedPointer<Database>::create(); reader.readDatabase(&readBack, key, mergedDb.data()); |