diff options
Diffstat (limited to 'tests/entitystoretest.cpp')
-rw-r--r-- | tests/entitystoretest.cpp | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/tests/entitystoretest.cpp b/tests/entitystoretest.cpp new file mode 100644 index 0000000..90575a5 --- /dev/null +++ b/tests/entitystoretest.cpp | |||
@@ -0,0 +1,89 @@ | |||
1 | #include <QtTest> | ||
2 | |||
3 | #include <QDebug> | ||
4 | #include <QString> | ||
5 | |||
6 | #include "common/storage/entitystore.h" | ||
7 | #include "common/adaptorfactoryregistry.h" | ||
8 | #include "common/definitions.h" | ||
9 | #include "testimplementations.h" | ||
10 | |||
11 | class EntityStoreTest : public QObject | ||
12 | { | ||
13 | Q_OBJECT | ||
14 | private: | ||
15 | QString resourceInstanceIdentifier{"resourceId"}; | ||
16 | |||
17 | private slots: | ||
18 | void initTestCase() | ||
19 | { | ||
20 | Sink::AdaptorFactoryRegistry::instance().registerFactory<Sink::ApplicationDomain::Mail, TestMailAdaptorFactory>("test"); | ||
21 | } | ||
22 | |||
23 | void cleanup() | ||
24 | { | ||
25 | Sink::Storage::DataStore storage(Sink::storageLocation(), resourceInstanceIdentifier); | ||
26 | storage.removeFromDisk(); | ||
27 | } | ||
28 | |||
29 | void testCleanup() | ||
30 | { | ||
31 | } | ||
32 | |||
33 | void readAll() | ||
34 | { | ||
35 | using namespace Sink; | ||
36 | ResourceContext resourceContext{resourceInstanceIdentifier.toUtf8(), "dummy", AdaptorFactoryRegistry::instance().getFactories("test")}; | ||
37 | Storage::EntityStore store(resourceContext, {}); | ||
38 | |||
39 | auto mail = ApplicationDomain::ApplicationDomainType::createEntity<ApplicationDomain::Mail>("res1"); | ||
40 | mail.setExtractedMessageId("messageid"); | ||
41 | mail.setExtractedSubject("boo"); | ||
42 | |||
43 | auto mail2 = ApplicationDomain::ApplicationDomainType::createEntity<ApplicationDomain::Mail>("res1"); | ||
44 | mail2.setExtractedMessageId("messageid2"); | ||
45 | mail2.setExtractedSubject("foo"); | ||
46 | |||
47 | auto mail3 = ApplicationDomain::ApplicationDomainType::createEntity<ApplicationDomain::Mail>("res1"); | ||
48 | mail3.setExtractedMessageId("messageid2"); | ||
49 | mail3.setExtractedSubject("foo"); | ||
50 | |||
51 | store.startTransaction(Storage::DataStore::ReadWrite); | ||
52 | store.add("mail", mail, false); | ||
53 | store.add("mail", mail2, false); | ||
54 | store.add("mail", mail3, false); | ||
55 | |||
56 | mail.setExtractedSubject("foo"); | ||
57 | |||
58 | store.modify("mail", mail, QByteArrayList{}, false); | ||
59 | store.remove("mail", mail3, false); | ||
60 | store.commitTransaction(); | ||
61 | |||
62 | store.startTransaction(Storage::DataStore::ReadOnly); | ||
63 | { | ||
64 | //We get every uid once | ||
65 | QList<QByteArray> uids; | ||
66 | store.readAllUids("mail", [&] (const QByteArray &uid) { | ||
67 | uids << uid; | ||
68 | }); | ||
69 | QCOMPARE(uids.size(), 2); | ||
70 | } | ||
71 | |||
72 | { | ||
73 | //We get the latest version of every entity once | ||
74 | QList<QByteArray> uids; | ||
75 | store.readAll("mail", [&] (const ApplicationDomain::ApplicationDomainType &entity) { | ||
76 | //The first revision should be superseeded by the modification | ||
77 | QCOMPARE(entity.getProperty(ApplicationDomain::Mail::Subject::name).toString(), QString::fromLatin1("foo")); | ||
78 | uids << entity.identifier(); | ||
79 | }); | ||
80 | QCOMPARE(uids.size(), 2); | ||
81 | } | ||
82 | |||
83 | store.abortTransaction(); | ||
84 | |||
85 | } | ||
86 | }; | ||
87 | |||
88 | QTEST_MAIN(EntityStoreTest) | ||
89 | #include "entitystoretest.moc" | ||