summaryrefslogtreecommitdiffstats
path: root/tests/entitystoretest.cpp
blob: 90575a5d4496babe2a126ecdf0aa725ef50cd224 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <QtTest>

#include <QDebug>
#include <QString>

#include "common/storage/entitystore.h"
#include "common/adaptorfactoryregistry.h"
#include "common/definitions.h"
#include "testimplementations.h"

class EntityStoreTest : public QObject
{
    Q_OBJECT
private:
    QString resourceInstanceIdentifier{"resourceId"};

private slots:
    void initTestCase()
    {
        Sink::AdaptorFactoryRegistry::instance().registerFactory<Sink::ApplicationDomain::Mail, TestMailAdaptorFactory>("test");
    }

    void cleanup()
    {
        Sink::Storage::DataStore storage(Sink::storageLocation(), resourceInstanceIdentifier);
        storage.removeFromDisk();
    }

    void testCleanup()
    {
    }

    void readAll()
    {
        using namespace Sink;
        ResourceContext resourceContext{resourceInstanceIdentifier.toUtf8(), "dummy", AdaptorFactoryRegistry::instance().getFactories("test")};
        Storage::EntityStore store(resourceContext, {});

        auto mail = ApplicationDomain::ApplicationDomainType::createEntity<ApplicationDomain::Mail>("res1");
        mail.setExtractedMessageId("messageid");
        mail.setExtractedSubject("boo");

        auto mail2 = ApplicationDomain::ApplicationDomainType::createEntity<ApplicationDomain::Mail>("res1");
        mail2.setExtractedMessageId("messageid2");
        mail2.setExtractedSubject("foo");

        auto mail3 = ApplicationDomain::ApplicationDomainType::createEntity<ApplicationDomain::Mail>("res1");
        mail3.setExtractedMessageId("messageid2");
        mail3.setExtractedSubject("foo");

        store.startTransaction(Storage::DataStore::ReadWrite);
        store.add("mail", mail, false);
        store.add("mail", mail2, false);
        store.add("mail", mail3, false);

        mail.setExtractedSubject("foo");

        store.modify("mail", mail, QByteArrayList{}, false);
        store.remove("mail", mail3, false);
        store.commitTransaction();

        store.startTransaction(Storage::DataStore::ReadOnly);
        {
            //We get every uid once
            QList<QByteArray> uids;
            store.readAllUids("mail", [&] (const QByteArray &uid) {
                uids << uid;
            });
            QCOMPARE(uids.size(), 2);
        }

        {
            //We get the latest version of every entity once
            QList<QByteArray> uids;
            store.readAll("mail", [&] (const ApplicationDomain::ApplicationDomainType &entity) {
                //The first revision should be superseeded by the modification
                QCOMPARE(entity.getProperty(ApplicationDomain::Mail::Subject::name).toString(), QString::fromLatin1("foo"));
                uids << entity.identifier();
            });
            QCOMPARE(uids.size(), 2);
        }

        store.abortTransaction();

    }
};

QTEST_MAIN(EntityStoreTest)
#include "entitystoretest.moc"