/* * Copyright (C) 2013 Felix Geyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestEntry.h" #include "config-keepassx-tests.h" #include #include "core/Entry.h" #include "crypto/Crypto.h" QTEST_GUILESS_MAIN(TestEntry) void TestEntry::initTestCase() { QVERIFY(Crypto::init()); } void TestEntry::testHistoryItemDeletion() { Entry* entry = new Entry(); QPointer historyEntry = new Entry(); entry->addHistoryItem(historyEntry); QCOMPARE(entry->historyItems().size(), 1); QList historyEntriesToRemove; historyEntriesToRemove.append(historyEntry); entry->removeHistoryItems(historyEntriesToRemove); QCOMPARE(entry->historyItems().size(), 0); QVERIFY(historyEntry.isNull()); delete entry; } void TestEntry::testCopyDataFrom() { Entry* entry = new Entry(); entry->setTitle("testtitle"); entry->attributes()->set("attr1", "abc"); entry->attributes()->set("attr2", "def"); entry->attachments()->set("test", "123"); entry->attachments()->set("test2", "456"); AutoTypeAssociations::Association assoc; assoc.window = "1"; assoc.sequence = "2"; entry->autoTypeAssociations()->add(assoc); assoc.window = "3"; assoc.sequence = "4"; entry->autoTypeAssociations()->add(assoc); Entry* entry2 = new Entry(); entry2->copyDataFrom(entry); delete entry; QCOMPARE(entry2->title(), QString("testtitle")); QCOMPARE(entry2->attributes()->value("attr1"), QString("abc")); QCOMPARE(entry2->attributes()->value("attr2"), QString("def")); QCOMPARE(entry2->attachments()->keys().size(), 2); QCOMPARE(entry2->attachments()->value("test"), QByteArray("123")); QCOMPARE(entry2->attachments()->value("test2"), QByteArray("456")); QCOMPARE(entry2->autoTypeAssociations()->size(), 2); QCOMPARE(entry2->autoTypeAssociations()->get(0).window, QString("1")); QCOMPARE(entry2->autoTypeAssociations()->get(1).window, QString("3")); delete entry2; } void TestEntry::testClone() { Entry* entryOrg = new Entry(); entryOrg->setUuid(Uuid::random()); entryOrg->setTitle("Original Title"); entryOrg->beginUpdate(); entryOrg->setTitle("New Title"); entryOrg->endUpdate(); TimeInfo entryOrgTime = entryOrg->timeInfo(); QDateTime dateTime; dateTime.setTimeSpec(Qt::UTC); dateTime.setTime_t(60); entryOrgTime.setCreationTime(dateTime); entryOrg->setTimeInfo(entryOrgTime); Entry* entryCloneNone = entryOrg->clone(Entry::CloneNoFlags); QCOMPARE(entryCloneNone->uuid(), entryOrg->uuid()); QCOMPARE(entryCloneNone->title(), QString("New Title")); QCOMPARE(entryCloneNone->historyItems().size(), 0); QCOMPARE(entryCloneNone->timeInfo().creationTime(), entryOrg->timeInfo().creationTime()); delete entryCloneNone; Entry* entryCloneNewUuid = entryOrg->clone(Entry::CloneNewUuid); QVERIFY(entryCloneNewUuid->uuid() != entryOrg->uuid()); QVERIFY(!entryCloneNewUuid->uuid().isNull()); QCOMPARE(entryCloneNewUuid->title(), QString("New Title")); QCOMPARE(entryCloneNewUuid->historyItems().size(), 0); QCOMPARE(entryCloneNewUuid->timeInfo().creationTime(), entryOrg->timeInfo().creationTime()); delete entryCloneNewUuid; Entry* entryCloneResetTime = entryOrg->clone(Entry::CloneResetTimeInfo); QCOMPARE(entryCloneResetTime->uuid(), entryOrg->uuid()); QCOMPARE(entryCloneResetTime->title(), QString("New Title")); QCOMPARE(entryCloneResetTime->historyItems().size(), 0); QVERIFY(entryCloneResetTime->timeInfo().creationTime() != entryOrg->timeInfo().creationTime()); delete entryCloneResetTime; Entry* entryCloneHistory = entryOrg->clone(Entry::CloneIncludeHistory); QCOMPARE(entryCloneHistory->uuid(), entryOrg->uuid()); QCOMPARE(entryCloneHistory->title(), QString("New Title")); QCOMPARE(entryCloneHistory->historyItems().size(), 1); QCOMPARE(entryCloneHistory->historyItems().at(0)->title(), QString("Original Title")); QCOMPARE(entryCloneHistory->timeInfo().creationTime(), entryOrg->timeInfo().creationTime()); delete entryCloneHistory; delete entryOrg; } void TestEntry::testResolveUrl() { Entry* entry = new Entry(); QString testUrl("www.google.com"); QString testCmd("cmd://firefox " + testUrl); QString testComplexCmd("cmd://firefox --start-now --url 'http://" + testUrl + "' --quit"); QString nonHttpUrl("ftp://google.com"); QString noUrl("random text inserted here"); // Test standard URL's QCOMPARE(entry->resolveUrl(""), QString("")); QCOMPARE(entry->resolveUrl(testUrl), "https://" + testUrl); QCOMPARE(entry->resolveUrl("http://" + testUrl), "http://" + testUrl); // Test cmd:// with no URL QCOMPARE(entry->resolveUrl("cmd://firefox"), QString("")); QCOMPARE(entry->resolveUrl("cmd://firefox --no-url"), QString("")); // Test cmd:// with URL's QCOMPARE(entry->resolveUrl(testCmd), "https://" + testUrl); QCOMPARE(entry->resolveUrl(testComplexCmd), "http://" + testUrl); // Test non-http URL QCOMPARE(entry->resolveUrl(nonHttpUrl), QString("")); // Test no URL QCOMPARE(entry->resolveUrl(noUrl), QString("")); delete entry; }