mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-04-19 23:35:57 -04:00
Add and adjust test-cases
This commit is contained in:
parent
ffb9b111fd
commit
9a7db370bf
@ -168,7 +168,7 @@ if(WITH_XC_SSHAGENT)
|
||||
endif()
|
||||
|
||||
add_unit_test(NAME testentry SOURCES TestEntry.cpp
|
||||
LIBS ${TEST_LIBRARIES})
|
||||
LIBS testsupport ${TEST_LIBRARIES})
|
||||
|
||||
add_unit_test(NAME testmerge SOURCES TestMerge.cpp
|
||||
LIBS testsupport ${TEST_LIBRARIES})
|
||||
|
@ -25,13 +25,34 @@
|
||||
#include "core/TimeInfo.h"
|
||||
#include "crypto/Crypto.h"
|
||||
|
||||
#include "mock/MockClock.h"
|
||||
|
||||
QTEST_GUILESS_MAIN(TestEntry)
|
||||
|
||||
namespace
|
||||
{
|
||||
MockClock* m_clock = nullptr;
|
||||
}
|
||||
|
||||
void TestEntry::initTestCase()
|
||||
{
|
||||
QVERIFY(Crypto::init());
|
||||
}
|
||||
|
||||
void TestEntry::init()
|
||||
{
|
||||
Q_ASSERT(m_clock == nullptr);
|
||||
m_clock = new MockClock(2010, 5, 5, 10, 30, 10);
|
||||
MockClock::setup(m_clock);
|
||||
}
|
||||
|
||||
void TestEntry::cleanup()
|
||||
{
|
||||
MockClock::teardown();
|
||||
m_clock = nullptr;
|
||||
}
|
||||
|
||||
|
||||
void TestEntry::testHistoryItemDeletion()
|
||||
{
|
||||
QScopedPointer<Entry> entry(new Entry());
|
||||
@ -109,6 +130,8 @@ void TestEntry::testClone()
|
||||
QCOMPARE(entryCloneNewUuid->timeInfo().creationTime(), entryOrg->timeInfo().creationTime());
|
||||
|
||||
// Reset modification time
|
||||
entryOrgTime.setLastAccessTime(Clock::datetimeUtc(60));
|
||||
entryOrgTime.setLocationChanged(Clock::datetimeUtc(60));
|
||||
entryOrgTime.setLastModificationTime(Clock::datetimeUtc(60));
|
||||
entryOrg->setTimeInfo(entryOrgTime);
|
||||
|
||||
@ -122,7 +145,10 @@ void TestEntry::testClone()
|
||||
QCOMPARE(entryCloneResetTime->uuid(), entryOrg->uuid());
|
||||
QCOMPARE(entryCloneResetTime->title(), QString("New Title"));
|
||||
QCOMPARE(entryCloneResetTime->historyItems().size(), 0);
|
||||
// Cloning with CloneResetTimeInfo should affect the CreationTime, LocationChanged, LastAccessTime
|
||||
QVERIFY(entryCloneResetTime->timeInfo().creationTime() != entryOrg->timeInfo().creationTime());
|
||||
QVERIFY(entryCloneResetTime->timeInfo().locationChanged() != entryOrg->timeInfo().locationChanged());
|
||||
QVERIFY(entryCloneResetTime->timeInfo().lastAccessTime() != entryOrg->timeInfo().lastAccessTime());
|
||||
// Cloning with CloneResetTimeInfo should not affect the LastModificationTime
|
||||
QCOMPARE(entryCloneResetTime->timeInfo().lastModificationTime(), entryOrg->timeInfo().lastModificationTime());
|
||||
|
||||
@ -770,3 +796,33 @@ void TestEntry::testPreviousParentGroup()
|
||||
QVERIFY(entry->previousParentGroupUuid() == group1->uuid());
|
||||
QVERIFY(entry->previousParentGroup() == group1);
|
||||
}
|
||||
|
||||
void TestEntry::testTimeinfoChanges()
|
||||
{
|
||||
Database db;
|
||||
auto* root = db.rootGroup();
|
||||
auto* subgroup = new Group();
|
||||
subgroup->setUuid(QUuid::createUuid());
|
||||
subgroup->setParent(root);
|
||||
QDateTime startTime = Clock::currentDateTimeUtc();
|
||||
TimeInfo startTimeinfo;
|
||||
startTimeinfo.setCreationTime(startTime);
|
||||
startTimeinfo.setLastModificationTime(startTime);
|
||||
startTimeinfo.setLocationChanged(startTime);
|
||||
startTimeinfo.setLastAccessTime(startTime);
|
||||
m_clock->advanceMinute(1);
|
||||
|
||||
QScopedPointer<Entry> entry(new Entry());
|
||||
entry->setUuid(QUuid::createUuid());
|
||||
entry->setGroup(root);
|
||||
entry->setTimeInfo(startTimeinfo);
|
||||
entry->setPreviousParentGroup(subgroup);
|
||||
// setting previous parent group should not affect the LastModificationTime
|
||||
QCOMPARE(entry->timeInfo().lastModificationTime(), startTime);
|
||||
entry->setGroup(subgroup);
|
||||
// changing group should not affect LastModicationTime, CreationTime
|
||||
QCOMPARE(entry->timeInfo().creationTime(), startTime);
|
||||
QCOMPARE(entry->timeInfo().lastModificationTime(), startTime);
|
||||
// changing group should affect the LocationChanged time
|
||||
QCOMPARE(entry->timeInfo().locationChanged(), Clock::currentDateTimeUtc());
|
||||
}
|
||||
|
@ -28,6 +28,8 @@ class TestEntry : public QObject
|
||||
|
||||
private slots:
|
||||
void initTestCase();
|
||||
void init();
|
||||
void cleanup();
|
||||
void testHistoryItemDeletion();
|
||||
void testCopyDataFrom();
|
||||
void testClone();
|
||||
@ -40,6 +42,7 @@ private slots:
|
||||
void testIsRecycled();
|
||||
void testMoveUpDown();
|
||||
void testPreviousParentGroup();
|
||||
void testTimeinfoChanges();
|
||||
};
|
||||
|
||||
#endif // KEEPASSX_TESTENTRY_H
|
||||
|
@ -382,18 +382,21 @@ void TestGroup::testClone()
|
||||
QCOMPARE(clonedGroup->iconNumber(), 42);
|
||||
QCOMPARE(clonedGroup->children().size(), 1);
|
||||
QCOMPARE(clonedGroup->entries().size(), 1);
|
||||
QCOMPARE(clonedGroup->timeInfo(), originalGroup->timeInfo());
|
||||
|
||||
Entry* clonedGroupEntry = clonedGroup->entries().at(0);
|
||||
QVERIFY(clonedGroupEntry->uuid() != originalGroupEntry->uuid());
|
||||
QCOMPARE(clonedGroupEntry->title(), QString("GroupEntry"));
|
||||
QCOMPARE(clonedGroupEntry->iconNumber(), 43);
|
||||
QCOMPARE(clonedGroupEntry->historyItems().size(), 0);
|
||||
QCOMPARE(clonedGroupEntry->timeInfo(), originalGroupEntry->timeInfo());
|
||||
|
||||
Group* clonedSubGroup = clonedGroup->children().at(0);
|
||||
QVERIFY(clonedSubGroup->uuid() != subGroup->uuid());
|
||||
QCOMPARE(clonedSubGroup->name(), QString("SubGroup"));
|
||||
QCOMPARE(clonedSubGroup->children().size(), 0);
|
||||
QCOMPARE(clonedSubGroup->entries().size(), 1);
|
||||
QCOMPARE(clonedSubGroup->timeInfo(), subGroup->timeInfo());
|
||||
|
||||
Entry* clonedSubGroupEntry = clonedSubGroup->entries().at(0);
|
||||
QVERIFY(clonedSubGroupEntry->uuid() != subGroupEntry->uuid());
|
||||
@ -411,15 +414,17 @@ void TestGroup::testClone()
|
||||
QCOMPARE(clonedGroupNewUuid->entries().size(), 0);
|
||||
QVERIFY(clonedGroupNewUuid->uuid() != originalGroup->uuid());
|
||||
|
||||
// Making sure the new modification date is not the same.
|
||||
// Verify Timeinfo modifications for CloneResetTimeInfo
|
||||
m_clock->advanceSecond(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());
|
||||
QVERIFY(clonedGroupResetTimeInfo->timeInfo().creationTime() != originalGroup->timeInfo().creationTime());
|
||||
QVERIFY(clonedGroupResetTimeInfo->timeInfo().lastAccessTime() != originalGroup->timeInfo().lastAccessTime());
|
||||
QVERIFY(clonedGroupResetTimeInfo->timeInfo().locationChanged() != originalGroup->timeInfo().locationChanged());
|
||||
QCOMPARE(clonedGroupResetTimeInfo->timeInfo().lastModificationTime(), originalGroup->timeInfo().lastModificationTime());
|
||||
}
|
||||
|
||||
void TestGroup::testCopyCustomIcons()
|
||||
@ -1319,3 +1324,47 @@ void TestGroup::testAutoTypeState()
|
||||
QVERIFY(!entry1->groupAutoTypeEnabled());
|
||||
QVERIFY(entry2->groupAutoTypeEnabled());
|
||||
}
|
||||
|
||||
void TestGroup::testTimeinfoChanges()
|
||||
{
|
||||
Database db, db2;
|
||||
auto* root = db.rootGroup();
|
||||
auto* subgroup1 = new Group();
|
||||
auto* subgroup2 = new Group();
|
||||
subgroup1->setUuid(QUuid::createUuid());
|
||||
subgroup1->setParent(root);
|
||||
subgroup2->setUuid(QUuid::createUuid());
|
||||
subgroup2->setParent(root);
|
||||
QDateTime startTime = Clock::currentDateTimeUtc();
|
||||
TimeInfo startTimeinfo;
|
||||
startTimeinfo.setCreationTime(startTime);
|
||||
startTimeinfo.setLastModificationTime(startTime);
|
||||
startTimeinfo.setLocationChanged(startTime);
|
||||
startTimeinfo.setLastAccessTime(startTime);
|
||||
m_clock->advanceMinute(1);
|
||||
root->setTimeInfo(startTimeinfo);
|
||||
subgroup1->setTimeInfo(startTimeinfo);
|
||||
subgroup2->setTimeInfo(startTimeinfo);
|
||||
|
||||
subgroup2->setPreviousParentGroup(subgroup1);
|
||||
// setting previous parent group should not affect the LastModificationTime
|
||||
QCOMPARE(subgroup2->timeInfo().lastModificationTime(), startTime);
|
||||
subgroup2->setPreviousParentGroup(nullptr);
|
||||
subgroup2->setParent(subgroup1);
|
||||
QCOMPARE(root->timeInfo(), startTimeinfo);
|
||||
QCOMPARE(subgroup1->timeInfo(), startTimeinfo);
|
||||
// changing group should not affect LastModificationTime, CreationTime
|
||||
QCOMPARE(subgroup2->timeInfo().creationTime(), startTime);
|
||||
QCOMPARE(subgroup2->timeInfo().lastModificationTime(), startTime);
|
||||
// changing group should affect the LocationChanged time
|
||||
QCOMPARE(subgroup2->timeInfo().locationChanged(), Clock::currentDateTimeUtc());
|
||||
|
||||
// cross-db move
|
||||
db2.rootGroup()->setTimeInfo(startTimeinfo);
|
||||
m_clock->advanceMinute(1);
|
||||
subgroup2->setParent(db2.rootGroup());
|
||||
QCOMPARE(subgroup2->timeInfo().creationTime(), startTime);
|
||||
QCOMPARE(subgroup2->timeInfo().lastModificationTime(), startTime);
|
||||
QCOMPARE(subgroup2->timeInfo().locationChanged(), Clock::currentDateTimeUtc());
|
||||
QCOMPARE(db2.rootGroup()->timeInfo(), startTimeinfo);
|
||||
}
|
||||
|
@ -50,6 +50,7 @@ private slots:
|
||||
void testMoveUpDown();
|
||||
void testPreviousParentGroup();
|
||||
void testAutoTypeState();
|
||||
void testTimeinfoChanges();
|
||||
};
|
||||
|
||||
#endif // KEEPASSX_TESTGROUP_H
|
||||
|
Loading…
x
Reference in New Issue
Block a user