1 /*
2  * SPDX-FileCopyrightText: 2015 Kevin Ottens <ervin@kde.org>
3  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
4  */
5 
6 
7 #ifndef TESTLIB_AKONADIFAKEDATA_H
8 #define TESTLIB_AKONADIFAKEDATA_H
9 
10 #include <QObject>
11 
12 #include <AkonadiCore/Akonadi/Collection>
13 #include <AkonadiCore/Akonadi/Item>
14 
15 #include "testlib/akonadifakestoragebehavior.h"
16 
17 namespace Akonadi {
18 class MonitorInterface;
19 class StorageInterface;
20 }
21 
22 namespace Utils {
23 class DependencyManager;
24 }
25 
26 namespace Testlib {
27 
28 class AkonadiFakeMonitor;
29 
30 class AkonadiFakeData
31 {
32 public:
33     AkonadiFakeData();
34     AkonadiFakeData(const AkonadiFakeData &other);
35     ~AkonadiFakeData();
36 
37     AkonadiFakeData &operator=(const AkonadiFakeData &other);
38 
39     Akonadi::Collection::List collections() const;
40     Akonadi::Collection::List childCollections(Akonadi::Collection::Id parentId) const;
41     Akonadi::Collection collection(Akonadi::Collection::Id id) const;
42     void createCollection(const Akonadi::Collection &collection);
43     void modifyCollection(const Akonadi::Collection &collection);
44     void removeCollection(const Akonadi::Collection &collection);
45 
46     QStringList contextsUids() const;
47     Akonadi::Item::List contexts() const;
48     Akonadi::Item contextItem(const QString &uid) const;
49     void createContext(const Akonadi::Item &item);
50     void modifyContext(const Akonadi::Item &item);
51     void removeContext(const Akonadi::Item &item);
52 
53     Akonadi::Item::List items() const;
54     Akonadi::Item::List childItems(Akonadi::Collection::Id parentId) const;
55     Akonadi::Item::List contextItems(const QString& contextUid) const;
56     Akonadi::Item item(Akonadi::Item::Id id) const;
57     void createItem(const Akonadi::Item &item);
58     void modifyItem(const Akonadi::Item &item);
59     void removeItem(const Akonadi::Item &item);
60 
61     Akonadi::MonitorInterface *createMonitor();
62     Akonadi::StorageInterface *createStorage();
63     std::unique_ptr<Utils::DependencyManager> createDependencies();
64 
65     Akonadi::Collection::Id maxCollectionId() const;
66     Akonadi::Item::Id maxItemId() const;
67 
68     Akonadi::Collection reconstructAncestors(const Akonadi::Collection &collection,
69                                              const Akonadi::Collection &root = Akonadi::Collection::root()) const;
70     Akonadi::Item reconstructItemDependencies(const Akonadi::Item &item,
71                                               const Akonadi::Collection &root = Akonadi::Collection::root()) const;
72 
73     const AkonadiFakeStorageBehavior &storageBehavior() const;
74     AkonadiFakeStorageBehavior &storageBehavior();
75 
76 private:
77     QHash<Akonadi::Collection::Id, Akonadi::Collection> m_collections;
78     QHash<Akonadi::Collection::Id, QList<Akonadi::Collection::Id>> m_childCollections;
79 
80     using ContextUid = QString;
81     QHash<ContextUid, Akonadi::Item> m_contexts;
82 
83     QHash<Akonadi::Item::Id, Akonadi::Item> m_items;
84     QHash<Akonadi::Collection::Id, QList<Akonadi::Item::Id>> m_childItems;
85     QHash<ContextUid, QList<Akonadi::Item::Id>> m_contextItems;
86 
87     QScopedPointer<AkonadiFakeMonitor> m_monitor;
88 
89     AkonadiFakeStorageBehavior m_storageBehavior;
90 };
91 
92 }
93 
94 #endif // TESTLIB_AKONADIFAKEDATA_H
95