Changes: Test deleting of request from StateChanged handler (somewhat)
[qtcontacts-tracker:qtcontacts-tracker.git] / tests / ut_qtcontacts_trackerplugin / ut_qtcontacts_trackerplugin.h
1 /** This file is part of QtContacts tracker storage plugin
2  **
3  ** Copyright (c) 2009-2011 Nokia Corporation and/or its subsidiary(-ies).
4  **
5  ** Contact:  Nokia Corporation (info@qt.nokia.com)
6  **
7  ** GNU Lesser General Public License Usage
8  ** This file may be used under the terms of the GNU Lesser General Public License
9  ** version 2.1 as published by the Free Software Foundation and appearing in the
10  ** file LICENSE.LGPL included in the packaging of this file.  Please review the
11  ** following information to ensure the GNU Lesser General Public License version
12  ** 2.1 requirements will be met:
13  ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
14  **
15  ** In addition, as a special exception, Nokia gives you certain additional rights.
16  ** These rights are described in the Nokia Qt LGPL Exception version 1.1, included
17  ** in the file LGPL_EXCEPTION.txt in this package.
18  **
19  ** Other Usage
20  ** Alternatively, this file may be used in accordance with the terms and
21  ** conditions contained in a signed written agreement between you and Nokia.
22  **/
23
24 #ifndef UT_QTCONTACTS_TRACKERPLUGIN_H
25 #define UT_QTCONTACTS_TRACKERPLUGIN_H
26
27 #include "ut_qtcontacts_trackerplugin_common.h"
28 #include "qcontacttrackerengineemulatedv2.h"
29
30
31 // FIXME: This type name doesn't fit anything!!!
32 struct editStruct;
33 typedef class QMap<QString, QtMobility::QContactDetailFieldDefinition> QContactDetailFieldDefinitionMap;
34
35 /**
36  * QtContacts Tracker plugin unittests
37  */
38 class ut_qtcontacts_trackerplugin : public ut_qtcontacts_trackerplugin_common
39 {
40     Q_OBJECT
41
42 public:
43     ut_qtcontacts_trackerplugin(QObject *parent = 0);
44
45 private slots:
46     void initTestCase();
47     void cleanupTestCase();
48     void cleanup();
49
50     void testFetchAll();
51
52     void testTorture_data();
53     void testTorture();
54
55     void testSaveNothing();
56     void testSavePhoneNumber_data();
57     void testSavePhoneNumber();
58     void testSimilarPhoneNumber();
59     void testSamePhoneNumber();
60     void testPhoneNumberContext();
61     void testWritingOnlyWorkMobile();
62     void testContacts();
63     void testContact();
64     void testAvatar();
65     void testOnlineAvatar_data();
66     void testOnlineAvatar();
67     void testDateDetail_data();
68     void testDateDetail();
69
70     void testSaveEmailAddress();
71     void testSaveFullname();
72     void testSaveName();
73     void testSaveNameUnique();
74     void testSaveNonLatin1Name_data();
75     void testSaveNonLatin1Name();
76     void testSaveAddress();
77     void testSaveOrganization();
78     void testSaveCustomValues();
79
80     void testRemoveContact();
81     void testRemoveSelfContact();
82     void testSaveContacts();
83     void testRemoveContacts();
84     void testUrl_data();
85     void testUrl();
86     void testMultipleUrls();
87     void testOrganization();
88     void testUniqueDetails_data();
89     void testUniqueDetails();
90     void testCustomDetails();
91
92     void testRemoveSubType_data();
93     void testRemoveSubType();
94     void testTags();
95
96 //    void testGroups();
97 //    void testGroup();
98 //    void testSaveGroup();
99 //    void testRemoveGroup();
100 //    void testDetailDefinitions();
101 //    void testDetailDefinition();
102 //    void testSaveDetailDefinition();
103 //    void testRemoveDetailDefinition();
104     void testSyncContactManagerContactsAddedSince();
105     void testSyncTrackerEngineContactsIdsAddedSince();
106     void testSyncContactManagerContactIdsAddedSince();
107     void testContactsAddedSince();
108     void testContactsModifiedSince();
109     void testContactsRemovedSince();
110 //    void testGroupsAddedSince();
111 //    void testGroupsModifiedSince();
112 //    void testGroupsRemovedSince();
113     void testMergeOnlineContacts();
114     void testMergingContacts();
115     void testMergeSyncTarget_data();
116     void testMergeSyncTarget();
117     void testAsyncReadContacts();
118
119     void testSortContacts();
120
121     void testFilterContacts();
122     void testFilterContactsEndsWithAndPhoneNumber();
123     void testFilterDTMFNumber();
124 // NB#208065
125     void testFilterContactsMatchPhoneNumberWithShortNumber_data();
126     void testFilterContactsMatchPhoneNumberWithShortNumber();
127 // end NB#208065
128     void testFilterTwoNameFields();
129     void testLocalIdFilterManyIds_data();
130     void testLocalIdFilterManyIds();
131     void testContactFilter_data();
132     void testContactFilter();
133     void testFilterOnContainsSubTypesByClass();
134     void testFilterOnSubTypesByProperty();
135     void testFilterOnContainsSubTypesByNaoProperty();
136     void testFilterOnCustomDetail_data();
137     void testFilterOnCustomDetail();
138     void testFilterOnContactType();
139     void testFilterOnQContactOnlineAccount();
140     void testFilterOnDetailFieldWildcard_data();
141     void testFilterOnDetailFieldWildcard();
142     void testFilterOnDetailExists_data();
143     void testFilterOnDetailExists();
144
145     void testFilterOnDetailFieldValueWithSingleSpaceOrEmptyString_data();
146     void testFilterOnDetailFieldValueWithSingleSpaceOrEmptyString();
147
148     void testFilterInvalid();
149
150     void testIMContactsAndMetacontactMasterPresence();
151     void testIMContactsFiltering();
152     void testContactsWithoutMeContact();
153     void testDefinitionNames();
154     void testMeContact();
155
156     void testDisplayLabelFetch_data();
157     void testDisplayLabelFetch();
158     void testDisplayLabelSynthesized();
159     void testDisplayLabelSynthesizedWithNameOrders_data();
160     void testDisplayLabelSynthesizedWithNameOrders();
161
162     void testSyncTarget_data();
163     void testSyncTarget();
164
165 // NB#161788 and its dependant bugs
166     void testEditCombinations_email();
167     void testEditCombinations_url();
168     void testEditCombinations_address();
169     void testEditCombinations_phone();
170 // end NB#161788
171
172 // NB#173388
173     void testSaveThumbnail_data();
174     void testSaveThumbnail();
175 // end NB#173388
176
177     void testVCardsAndSync_data();
178     void testVCardsAndSync();
179     void testCreateUuid();
180     void testPreserveUID();
181
182     void testFuzzing_data();
183     void testFuzzing();
184
185     void testUnionFilterUniqueness();
186     void testPartialSave_data();
187     void testPartialSave();
188
189     void testFetchingNonQctResourcesAsReadOnlyDetails_data();
190     void testFetchingNonQctResourcesAsReadOnlyDetails();
191     void testNotSavingReadOnlyDetails();
192
193     void testFavorite();
194     void testAnniversary();
195     void testOnlineAccount();
196
197     void testMergeContactsWithGroups();
198     void testDeleteFromStateChangedHandler();
199
200 protected slots:
201     void onStateChangedDeleteLater(QContactAbstractRequest::State state);
202
203 private:
204     // FIXME: Most of the following methods are editStruct methods!!!
205     void setName(editStruct &es, QString first = QString(), QString last = QString());
206     void setEmail(editStruct &es, QString email, QString context = QString());
207     void setUrl(editStruct &es, QString url, QString context = QString(), QString subType = QString());
208     void setPhone(editStruct &es, QString phone, QString context = QString(), QString subType = QString());
209     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());
210     void saveEditsToContact(editStruct &es, QContact &c);
211
212     void verifyEdits(QContact &verify, editStruct &es);
213     void runEditList(QList<editStruct> &editList);
214
215     void syncContactsAddedSinceHelper(QDateTime& start, QList<QContactLocalId>& addedIds);
216
217     void updateIMContactStatus(const QString &contactIri, const QString &imStatus);
218     QContact contact(QContactLocalId uid, const QStringList &detailsToLoad = QStringList());
219     QContact contact(const QString &iri, const QStringList &detailsToLoad = QStringList());
220     QList<QContact> contacts(const QList<QContactLocalId> &uids, const QStringList &detailsToLoad = QStringList());
221
222     void testDisplayLabelFetch(const QStringList &definitionHints);
223     QContactTrackerEngineEmulatedV2 *emulatedV2Engine();
224     void fuzzContact(QContact &result, const QStringList &skipDetailDefinitions = QStringList()) const;
225     void fuzzDetailType(QList<QContactDetail> &result, const QString &definitionName) const;
226     void mergeContacts(QContact &contactTarget, const QList<QContactLocalId> &sourceContactIds);
227     void unmergeContact(QContact &contact, const QList<QContactOnlineAccount> &unmergeCriteria, /*out*/ QList<QContactLocalId> &newUnmergedContactIds);
228
229     /// creates fuzzed values for the given @p field and for each value a contact of @p contactType with only that detail and only that field set,
230     /// then stores and adds these contacts to @p contacts
231     void makeFuzzedSingleDetailFieldContacts(QContactList &contacts,
232                                              const QString &detailName, const QString &fieldName, const QContactDetailFieldDefinition &field,
233                                              const QString &contactType);
234     /// sets the field definitions of @p detailDefinition to @p fields,
235     /// without any for the fields Context and SubType/SubTypes
236     void fieldsWithoutContextAndSubType(QContactDetailFieldDefinitionMap &fields,
237                                         const QString &contactType, const QString &definitionName);
238
239 private:
240     QList<QContactLocalId> addedContacts;
241     QContactTrackerEngineEmulatedV2 *m_emulatedV2Engine;
242 };
243
244
245 #endif