Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'tests/TestGroup.cpp')
-rw-r--r--tests/TestGroup.cpp255
1 files changed, 134 insertions, 121 deletions
diff --git a/tests/TestGroup.cpp b/tests/TestGroup.cpp
index dfccf5d0b..d9eb2c765 100644
--- a/tests/TestGroup.cpp
+++ b/tests/TestGroup.cpp
@@ -17,15 +17,10 @@
*/
#include "TestGroup.h"
+#include "TestGlobal.h"
-#include <QDebug>
-#include <QPointer>
-#include <QScopedPointer>
#include <QSignalSpy>
-#include <QTest>
-#include "core/Database.h"
-#include "core/Group.h"
#include "core/Metadata.h"
#include "crypto/Crypto.h"
@@ -384,6 +379,23 @@ void TestGroup::testClone()
QScopedPointer<Group> clonedGroupKeepUuid(originalGroup->clone(Entry::CloneNoFlags));
QCOMPARE(clonedGroupKeepUuid->entries().at(0)->uuid(), originalGroupEntry->uuid());
QCOMPARE(clonedGroupKeepUuid->children().at(0)->entries().at(0)->uuid(), subGroupEntry->uuid());
+
+ QScopedPointer<Group> clonedGroupNoFlags(originalGroup->clone(Entry::CloneNoFlags, Group::CloneNoFlags));
+ QCOMPARE(clonedGroupNoFlags->entries().size(), 0);
+ QVERIFY(clonedGroupNoFlags->uuid() == originalGroup->uuid());
+
+ QScopedPointer<Group> clonedGroupNewUuid(originalGroup->clone(Entry::CloneNoFlags, Group::CloneNewUuid));
+ QCOMPARE(clonedGroupNewUuid->entries().size(), 0);
+ QVERIFY(clonedGroupNewUuid->uuid() != originalGroup->uuid());
+
+ // Making sure the new modification date is not the same.
+ QTest::qSleep(1);
+
+ QScopedPointer<Group> clonedGroupResetTimeInfo(originalGroup->clone(Entry::CloneNoFlags,
+ Group::CloneNewUuid | Group::CloneResetTimeInfo));
+ QCOMPARE(clonedGroupResetTimeInfo->entries().size(), 0);
+ QVERIFY(clonedGroupResetTimeInfo->uuid() != originalGroup->uuid());
+ QVERIFY(clonedGroupResetTimeInfo->timeInfo().lastModificationTime() != originalGroup->timeInfo().lastModificationTime());
}
void TestGroup::testCopyCustomIcons()
@@ -439,114 +451,6 @@ void TestGroup::testCopyCustomIcons()
QCOMPARE(metaTarget->customIcon(group2Icon).pixel(0, 0), qRgb(4, 5, 6));
}
-void TestGroup::testMerge()
-{
- QScopedPointer<Group> group1(new Group());
- group1->setName("group 1");
- QScopedPointer<Group> group2(new Group());
- group2->setName("group 2");
-
- QScopedPointer<Entry> entry1(new Entry());
- QScopedPointer<Entry> entry2(new Entry());
-
- entry1->setGroup(group1.data());
- entry1->setUuid(Uuid::random());
- entry2->setGroup(group1.data());
- entry2->setUuid(Uuid::random());
-
- group2->merge(group1.data());
-
- QCOMPARE(group1->entries().size(), 2);
- QCOMPARE(group2->entries().size(), 2);
-}
-
-void TestGroup::testMergeDatabase()
-{
- QScopedPointer<Database> dbSource(createMergeTestDatabase());
- QScopedPointer<Database> dbDest(new Database());
-
- dbDest->merge(dbSource.data());
-
- QCOMPARE(dbDest->rootGroup()->children().size(), 2);
- QCOMPARE(dbDest->rootGroup()->children().at(0)->entries().size(), 2);
-}
-
-void TestGroup::testMergeConflict()
-{
- QScopedPointer<Database> dbSource(createMergeTestDatabase());
-
- // test merging updated entries
- // falls back to KeepBoth mode
- QScopedPointer<Database> dbCopy(new Database());
- dbCopy->setRootGroup(dbSource->rootGroup()->clone(Entry::CloneNoFlags));
-
- // sanity check
- QCOMPARE(dbCopy->rootGroup()->children().at(0)->entries().size(), 2);
-
- // make this entry newer than in original db
- Entry* updatedEntry = dbCopy->rootGroup()->children().at(0)->entries().at(0);
- TimeInfo updatedTimeInfo = updatedEntry->timeInfo();
- updatedTimeInfo.setLastModificationTime(updatedTimeInfo.lastModificationTime().addYears(1));
- updatedEntry->setTimeInfo(updatedTimeInfo);
-
- dbCopy->merge(dbSource.data());
-
- // one entry is duplicated because of mode
- QCOMPARE(dbCopy->rootGroup()->children().at(0)->entries().size(), 2);
-}
-
-void TestGroup::testMergeConflictKeepBoth()
-{
- QScopedPointer<Database> dbSource(createMergeTestDatabase());
-
- // test merging updated entries
- // falls back to KeepBoth mode
- QScopedPointer<Database> dbCopy(new Database());
- dbCopy->setRootGroup(dbSource->rootGroup()->clone(Entry::CloneNoFlags));
-
- // sanity check
- QCOMPARE(dbCopy->rootGroup()->children().at(0)->entries().size(), 2);
-
- // make this entry newer than in original db
- Entry* updatedEntry = dbCopy->rootGroup()->children().at(0)->entries().at(0);
- TimeInfo updatedTimeInfo = updatedEntry->timeInfo();
- updatedTimeInfo.setLastModificationTime(updatedTimeInfo.lastModificationTime().addYears(1));
- updatedEntry->setTimeInfo(updatedTimeInfo);
-
- dbCopy->rootGroup()->setMergeMode(Group::MergeMode::KeepBoth);
-
- dbCopy->merge(dbSource.data());
-
- // one entry is duplicated because of mode
- QCOMPARE(dbCopy->rootGroup()->children().at(0)->entries().size(), 3);
- // the older entry was merged from the other db as last in the group
- Entry* olderEntry = dbCopy->rootGroup()->children().at(0)->entries().at(2);
- QVERIFY2(olderEntry->attributes()->hasKey("merged"), "older entry is marked with an attribute \"merged\"");
-}
-
-Database* TestGroup::createMergeTestDatabase()
-{
- QScopedPointer<Database> db(new Database());
-
- Group* group1 = new Group();
- group1->setName("group 1");
- Group* group2 = new Group();
- group2->setName("group 2");
-
- Entry* entry1 = new Entry();
- Entry* entry2 = new Entry();
-
- entry1->setGroup(group1);
- entry1->setUuid(Uuid::random());
- entry2->setGroup(group1);
- entry2->setUuid(Uuid::random());
-
- group1->setParent(db->rootGroup());
- group2->setParent(db->rootGroup());
-
- return db.take();
-}
-
void TestGroup::testFindEntry()
{
QScopedPointer<Database> db(new Database());
@@ -702,9 +606,6 @@ void TestGroup::testPrint()
output = db->rootGroup()->print();
QCOMPARE(output, QString("entry1\n"));
- output = db->rootGroup()->print(true);
- QCOMPARE(output, QString("entry1 " + entry1->uuid().toHex() + "\n"));
-
Group* group1 = new Group();
group1->setName("group1");
@@ -719,10 +620,122 @@ void TestGroup::testPrint()
output = db->rootGroup()->print();
QVERIFY(output.contains(QString("entry1\n")));
QVERIFY(output.contains(QString("group1/\n")));
- QVERIFY(output.contains(QString(" entry2\n")));
+ QVERIFY(!output.contains(QString(" entry2\n")));
output = db->rootGroup()->print(true);
- QVERIFY(output.contains(QString("entry1 " + entry1->uuid().toHex() + "\n")));
- QVERIFY(output.contains(QString("group1/ " + group1->uuid().toHex() + "\n")));
- QVERIFY(output.contains(QString(" entry2 " + entry2->uuid().toHex() + "\n")));
+ QVERIFY(output.contains(QString("entry1\n")));
+ QVERIFY(output.contains(QString("group1/\n")));
+ QVERIFY(output.contains(QString(" entry2\n")));
+
+ output = group1->print();
+ QVERIFY(!output.contains(QString("group1/\n")));
+ QVERIFY(output.contains(QString("entry2\n")));
+}
+
+void TestGroup::testLocate()
+{
+ Database* db = new Database();
+
+ Entry* entry1 = new Entry();
+ entry1->setTitle("entry1");
+ entry1->setGroup(db->rootGroup());
+
+ Entry* entry2 = new Entry();
+ entry2->setTitle("entry2");
+ entry2->setGroup(db->rootGroup());
+
+ Group* group1 = new Group();
+ group1->setName("group1");
+ group1->setParent(db->rootGroup());
+
+ Group* group2 = new Group();
+ group2->setName("group2");
+ group2->setParent(group1);
+
+ Entry* entry3 = new Entry();
+ entry3->setTitle("entry3");
+ entry3->setGroup(group1);
+
+ Entry* entry43 = new Entry();
+ entry43->setTitle("entry43");
+ entry43->setGroup(group1);
+
+ Entry* google = new Entry();
+ google->setTitle("Google");
+ google->setGroup(group2);
+
+ QStringList results = db->rootGroup()->locate("entry");
+ QVERIFY(results.size() == 4);
+ QVERIFY(results.contains("/group1/entry43"));
+
+ results = db->rootGroup()->locate("entry1");
+ QVERIFY(results.size() == 1);
+ QVERIFY(results.contains("/entry1"));
+
+ results = db->rootGroup()->locate("Entry1");
+ QVERIFY(results.size() == 1);
+ QVERIFY(results.contains("/entry1"));
+
+ results = db->rootGroup()->locate("invalid");
+ QVERIFY(results.size() == 0);
+
+ results = db->rootGroup()->locate("google");
+ QVERIFY(results.size() == 1);
+ QVERIFY(results.contains("/group1/group2/Google"));
+
+ results = db->rootGroup()->locate("group1");
+ QVERIFY(results.size() == 3);
+ QVERIFY(results.contains("/group1/entry3"));
+ QVERIFY(results.contains("/group1/entry43"));
+ QVERIFY(results.contains("/group1/group2/Google"));
+
+ delete db;
+}
+
+void TestGroup::testAddEntryWithPath()
+{
+ Database* db = new Database();
+
+ Group* group1 = new Group();
+ group1->setName("group1");
+ group1->setParent(db->rootGroup());
+
+ Group* group2 = new Group();
+ group2->setName("group2");
+ group2->setParent(group1);
+
+ Entry* entry = db->rootGroup()->addEntryWithPath("entry1");
+ QVERIFY(entry != nullptr);
+ QVERIFY(!entry->uuid().isNull());
+
+ entry = db->rootGroup()->addEntryWithPath("entry1");
+ QVERIFY(entry == nullptr);
+
+ entry = db->rootGroup()->addEntryWithPath("/entry1");
+ QVERIFY(entry == nullptr);
+
+ entry = db->rootGroup()->addEntryWithPath("entry2");
+ QVERIFY(entry != nullptr);
+ QVERIFY(entry->title() == "entry2");
+ QVERIFY(!entry->uuid().isNull());
+
+ entry = db->rootGroup()->addEntryWithPath("/entry3");
+ QVERIFY(entry != nullptr);
+ QVERIFY(entry->title() == "entry3");
+ QVERIFY(!entry->uuid().isNull());
+
+ entry = db->rootGroup()->addEntryWithPath("/group1/entry4");
+ QVERIFY(entry != nullptr);
+ QVERIFY(entry->title() == "entry4");
+ QVERIFY(!entry->uuid().isNull());
+
+ entry = db->rootGroup()->addEntryWithPath("/group1/group2/entry5");
+ QVERIFY(entry != nullptr);
+ QVERIFY(entry->title() == "entry5");
+ QVERIFY(!entry->uuid().isNull());
+
+ entry = db->rootGroup()->addEntryWithPath("/group1/invalid_group/entry6");
+ QVERIFY(entry == nullptr);
+
+ delete db;
}