Unit testing for emulated and native partial save with QContactTrackerEngine
[qtcontacts-tracker:astojiljs-qtcontacts-tracker.git] / tests / ut_qtcontacts_trackerplugin / ut_qtcontacts_trackerplugin.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
6 **
7 ** This file is part of the Qt Mobility Components.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
14 ** this package.
15 **
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file.  Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23 **
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27 **
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
30 **
31 **
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #ifndef UT_QTCONTACTS_TRACKERPLUGIN_H
43 #define UT_QTCONTACTS_TRACKERPLUGIN_H
44
45 #include "ut_qtcontacts_trackerplugin_common.h"
46
47 // FIXME: This type name doesn't fit anything!!!
48 struct editStruct;
49
50 /*!
51  * \class QContactTrackerEngineEmulatedV2
52  * \brief Uses emulated partial save on top of QContactTrackerEngine
53  */
54 class QContactTrackerEngineEmulatedV2 : public QContactTrackerEngine, public QContactManagerEngineV2 {
55 public:
56     QContactTrackerEngineEmulatedV2() :
57         QContactTrackerEngine(QMap<QString, QString>())
58     {
59         finishDetailDefinitions(0);
60     }
61
62     QString managerName() const {
63         return QContactTrackerEngine::managerName();
64     }
65
66     int managerVersion() const {
67         return QContactTrackerEngine::managerVersion();
68     }
69
70     bool saveContacts(QList<QContact>* contacts, QMap<int, QContactManager::Error>* errorMap, QContactManager::Error* error) {
71         return QContactTrackerEngine::saveContacts(contacts, errorMap, error);
72     }
73
74     QContact contact(const QContactLocalId& contactId, const QContactFetchHint& fetchHint, QContactManager::Error* error) const {
75         return QContactTrackerEngine::contact(contactId,fetchHint,error);
76     }
77 };
78
79
80 /**
81  * QtContacts Tracker plugin unittests
82  */
83 class ut_qtcontacts_trackerplugin : public ut_qtcontacts_trackerplugin_common
84 {
85     Q_OBJECT;
86
87 public:
88     ut_qtcontacts_trackerplugin(QObject *parent = 0);
89
90 private slots:
91     void initTestCase();
92     void cleanupTestCase();
93     void cleanup();
94
95     void testFetchAll();
96
97     void testSaveNothing();
98     void testSavePhoneNumber_data();
99     void testSavePhoneNumber();
100     void testPhoneNumberContext();
101     void testWritingOnlyWorkMobile();
102     void testContacts();
103     void testContact();
104     void testAvatar();
105     void testDateDetail_data();
106     void testDateDetail();
107
108     void testSaveEmailAddress();
109     void testSaveFullname();
110     void testSaveName();
111     void testSaveNameUnique();
112     void testSaveAddress();
113     void testSaveOrganization();
114     void testSaveCustomValues();
115
116     void testRemoveContact();
117     void testSaveContacts();
118     void testRemoveContacts();
119     void testUrl();
120     void testOrganization();
121     void testUniqueDetails_data();
122     void testUniqueDetails();
123     void testCustomDetails();
124
125     void testRemoveSubType_data();
126     void testRemoveSubType();
127     void testTags();
128
129 //    void testGroups();
130 //    void testGroup();
131 //    void testSaveGroup();
132 //    void testRemoveGroup();
133 //    void testDetailDefinitions();
134 //    void testDetailDefinition();
135 //    void testSaveDetailDefinition();
136 //    void testRemoveDetailDefinition();
137     void testSyncContactManagerContactsAddedSince();
138     void testSyncTrackerEngineContactsIdsAddedSince();
139     void testSyncContactManagerContactIdsAddedSince();
140     void testContactsAddedSince();
141     void testContactsModifiedSince();
142     void testContactsRemovedSince();
143 //    void testGroupsAddedSince();
144 //    void testGroupsModifiedSince();
145 //    void testGroupsRemovedSince();
146     void testNcoTypes();
147     void testClassHierarchy();
148     void testMergeTwoOnlineContacts();
149     void testQRelationshipAndMergingContacts();
150     void testAsyncReadContacts();
151
152     void testSortContacts();
153
154     void testFilterContacts();
155     void testFilterContactsEndsWithAndPhoneNumber();
156     void testFilterTwoNameFields();
157     void testLocalIdFilterManyIds_data();
158     void testLocalIdFilterManyIds();
159     void testContactFilter_data();
160     void testContactFilter();
161     void testFilterOnSubTypesByClass();
162     void testFilterOnSubTypesByProperty();
163     void testFilterOnSubTypesByNaoProperty();
164
165     void testIMContactsAndMetacontactMasterPresence();
166     void testIMContactsFiltering();
167     void testContactsWithoutMeContact();
168     void testDefinitionNames();
169     void testMeContact();
170
171     void testDisplayLabelSynthesized();
172     void testDisplayLabelFetchDefault();
173     void testDisplayLabelFetchWithHints();
174     void testDisplayLabelSynthesizedWithNameOrders_data();
175     void testDisplayLabelSynthesizedWithNameOrders();
176
177 // NB#161788 and its dependant bugs
178     void testEditCombinations_email();
179     void testEditCombinations_url();
180     void testEditCombinations_address();
181     void testEditCombinations_phone();
182 // end NB#161788
183
184 // NB#173388
185     void testSaveThumbnail_data();
186     void testSaveThumbnail();
187 // end NB#173388
188
189     void testVCardsAndSync_data();
190     void testVCardsAndSync();
191     void testCreateUuid();
192     void testPreserveUID();
193     void testSignals();
194
195     void testFuzzing_data();
196     void testFuzzing();
197
198     void testUnionFilterUniqueness();
199     void testPartialSave_data();
200     void testPartialSave();
201
202 private:
203     // FIXME: Most of the following methods are editStruct methods!!!
204     void setName(editStruct &es, QString first = QString(), QString last = QString());
205     void setEmail(editStruct &es, QString email, QString context = QString());
206     void setUrl(editStruct &es, QString url, QString context = QString(), QString subType = QString());
207     void setPhone(editStruct &es, QString phone, QString context = QString(), QString subType = QString());
208     void setAddress(editStruct &es, QString street, QString postcode = QString(), QString pobox = QString(), QString locality = QString(), QString region = QString(), QString country = QString(), QString context = QString(), QString subType = QString());
209     void saveEditsToContact(editStruct &es, QContact &c);
210
211     void verifyEdits(QContact &verify, editStruct &es);
212     void runEditList(QList<editStruct> &editList);
213
214     void syncContactsAddedSinceHelper(QDateTime& start, QList<QContactLocalId>& addedIds);
215
216     void insertContact(const QString& contactURI, QContactLocalId uid, QString imId, QString imStatus, QString accountPath, QString protocol = "jabber");
217     void updateIMContactStatus(const QString& uri, QString imStatus);
218     QContact contact(QContactLocalId uid, QStringList detailsToLoad = QStringList());
219     QList<QContact> contacts(QList<QContactLocalId> uids, QStringList detailsToLoad = QStringList());
220
221     void testDisplayLabelFetch(const QStringList &definitionHints);
222
223 private:
224     QList<QContactLocalId> addedContacts;
225
226     QContactTrackerEngineEmulatedV2 *emulatedV2Engine();
227     QContactTrackerEngineEmulatedV2 *_emulatedV2Engine;
228
229 };
230
231
232 #endif