2
* Copyright (C) 2012 Felix Geyer <debfx@fobos.de>
4
* This program is free software: you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation, either version 2 or (at your option)
7
* version 3 of the License.
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
14
* You should have received a copy of the GNU General Public License
15
* along with this program. If not, see <http://www.gnu.org/licenses/>.
18
#include "TestDeletedObjects.h"
20
#include "config-keepassx-tests.h"
21
#include "core/Group.h"
22
#include "crypto/Crypto.h"
23
#include "format/KdbxXmlReader.h"
24
#include "format/KeePass2.h"
27
QTEST_GUILESS_MAIN(TestDeletedObjects)
29
void TestDeletedObjects::initTestCase()
31
QVERIFY(Crypto::init());
34
void TestDeletedObjects::createAndDelete(QSharedPointer<Database> db, int delObjectsSize)
36
QCOMPARE(db->deletedObjects().size(), delObjectsSize);
37
Group* root = db->rootGroup();
38
int rootChildrenCount = root->children().size();
42
QUuid gUuid = QUuid::createUuid();
45
QCOMPARE(db->deletedObjects().size(), ++delObjectsSize);
46
QCOMPARE(db->deletedObjects().at(delObjectsSize - 1).uuid, gUuid);
47
QCOMPARE(rootChildrenCount, root->children().size());
49
auto g1 = new Group();
51
QUuid g1Uuid = QUuid::createUuid();
53
auto e1 = new Entry();
55
QUuid e1Uuid = QUuid::createUuid();
57
auto g2 = new Group();
59
QUuid g2Uuid = QUuid::createUuid();
61
auto e2 = new Entry();
63
QUuid e2Uuid = QUuid::createUuid();
69
QCOMPARE(db->deletedObjects().size(), delObjectsSize);
70
QCOMPARE(db->deletedObjects().at(delObjectsSize - 4).uuid, e1Uuid);
71
QCOMPARE(db->deletedObjects().at(delObjectsSize - 3).uuid, e2Uuid);
72
QCOMPARE(db->deletedObjects().at(delObjectsSize - 2).uuid, g2Uuid);
73
QCOMPARE(db->deletedObjects().at(delObjectsSize - 1).uuid, g1Uuid);
74
QCOMPARE(rootChildrenCount, root->children().size());
76
auto e3 = new Entry();
78
QUuid e3Uuid = QUuid::createUuid();
83
QCOMPARE(db->deletedObjects().size(), ++delObjectsSize);
84
QCOMPARE(db->deletedObjects().at(delObjectsSize - 1).uuid, e3Uuid);
85
QCOMPARE(rootChildrenCount, root->children().size());
88
void TestDeletedObjects::testDeletedObjectsFromFile()
90
KdbxXmlReader reader(KeePass2::FILE_VERSION_3_1);
91
reader.setStrictMode(true);
92
QString xmlFile = QString(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.xml");
93
auto db = reader.readDatabase(xmlFile);
95
createAndDelete(db, 2);
98
void TestDeletedObjects::testDeletedObjectsFromNewDb()
100
auto db = QSharedPointer<Database>::create();
101
createAndDelete(db, 0);
104
void TestDeletedObjects::testDatabaseChange()
106
auto db = QSharedPointer<Database>::create();
107
Group* root = db->rootGroup();
108
int delObjectsSize = 0;
109
auto db2 = QSharedPointer<Database>::create();
110
Group* root2 = db2->rootGroup();
111
int delObjectsSize2 = 0;
113
auto* e = new Entry();
116
QCOMPARE(db->deletedObjects().size(), delObjectsSize);
117
QCOMPARE(db2->deletedObjects().size(), delObjectsSize2);
121
QCOMPARE(db->deletedObjects().size(), ++delObjectsSize);
122
QCOMPARE(db2->deletedObjects().size(), delObjectsSize2);
126
QCOMPARE(db->deletedObjects().size(), delObjectsSize);
127
QCOMPARE(db2->deletedObjects().size(), ++delObjectsSize2);
129
auto* g1 = new Group();
131
QUuid g1Uuid = QUuid::createUuid();
133
auto* e1 = new Entry();
135
QUuid e1Uuid = QUuid::createUuid();
137
g1->setParent(root2);
140
QCOMPARE(db->deletedObjects().size(), delObjectsSize);
141
QCOMPARE(db2->deletedObjects().size(), delObjectsSize2);
142
QCOMPARE(db->deletedObjects().at(delObjectsSize - 2).uuid, e1Uuid);
143
QCOMPARE(db->deletedObjects().at(delObjectsSize - 1).uuid, g1Uuid);
145
auto* group = new Group();
146
auto* entry = new Entry();
147
entry->setGroup(group);
148
entry->setGroup(root);
150
QCOMPARE(db->deletedObjects().size(), delObjectsSize);
151
QCOMPARE(db2->deletedObjects().size(), delObjectsSize2);
156
void TestDeletedObjects::testCustomIconDeletion()
159
QCOMPARE(db.deletedObjects().size(), 0);
161
QUuid uuid = QUuid::createUuid();
162
db.metadata()->addCustomIcon(uuid, QByteArray());
163
db.metadata()->removeCustomIcon(uuid);
164
QCOMPARE(db.deletedObjects().size(), 1);
165
QCOMPARE(db.deletedObjects().at(0).uuid, uuid);