Changes: add ut_qtcontacts_trackerplugin::testFetchingNonQctResourcesAsReadOnlyDetails()
[qtcontacts-tracker: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 #include "qcontacttrackerengineemulatedv2.h"
47
48
49 // FIXME: This type name doesn't fit anything!!!
50 struct editStruct;
51 typedef class QMap<QString, QtMobility::QContactDetailFieldDefinition> QContactDetailFieldDefinitionMap;
52
53 /**
54  * QtContacts Tracker plugin unittests
55  */
56 class ut_qtcontacts_trackerplugin : public ut_qtcontacts_trackerplugin_common
57 {
58     Q_OBJECT
59
60 public:
61     ut_qtcontacts_trackerplugin(QObject *parent = 0);
62
63 private slots:
64     void initTestCase();
65     void cleanupTestCase();
66     void cleanup();
67
68     void testFetchAll();
69
70     void testTorture_data();
71     void testTorture();
72
73     void testSaveNothing();
74     void testSavePhoneNumber_data();
75     void testSavePhoneNumber();
76     void testSimilarPhoneNumber();
77     void testSamePhoneNumber();
78     void testPhoneNumberContext();
79     void testWritingOnlyWorkMobile();
80     void testContacts();
81     void testContact();
82     void testAvatar();
83     void testOnlineAvatar_data();
84     void testOnlineAvatar();
85     void testDateDetail_data();
86     void testDateDetail();
87
88     void testSaveEmailAddress();
89     void testSaveFullname();
90     void testSaveName();
91     void testSaveNameUnique();
92     void testSaveNonLatin1Name_data();
93     void testSaveNonLatin1Name();
94     void testSaveAddress();
95     void testSaveOrganization();
96     void testSaveCustomValues();
97
98     void testRemoveContact();
99     void testRemoveSelfContact();
100     void testSaveContacts();
101     void testRemoveContacts();
102     void testUrl_data();
103     void testUrl();
104     void testOrganization();
105     void testUniqueDetails_data();
106     void testUniqueDetails();
107     void testCustomDetails();
108
109     void testRemoveSubType_data();
110     void testRemoveSubType();
111     void testTags();
112
113 //    void testGroups();
114 //    void testGroup();
115 //    void testSaveGroup();
116 //    void testRemoveGroup();
117 //    void testDetailDefinitions();
118 //    void testDetailDefinition();
119 //    void testSaveDetailDefinition();
120 //    void testRemoveDetailDefinition();
121     void testSyncContactManagerContactsAddedSince();
122     void testSyncTrackerEngineContactsIdsAddedSince();
123     void testSyncContactManagerContactIdsAddedSince();
124     void testContactsAddedSince();
125     void testContactsModifiedSince();
126     void testContactsRemovedSince();
127 //    void testGroupsAddedSince();
128 //    void testGroupsModifiedSince();
129 //    void testGroupsRemovedSince();
130     void testMergeOnlineContacts();
131     void testMergingContacts();
132     void testAsyncReadContacts();
133
134     void testSortContacts();
135
136     void testFilterContacts();
137     void testFilterContactsEndsWithAndPhoneNumber();
138 // NB#208065
139     void testFilterContactsMatchPhoneNumberWithShortNumber_data();
140     void testFilterContactsMatchPhoneNumberWithShortNumber();
141 // end NB#208065
142     void testFilterTwoNameFields();
143     void testLocalIdFilterManyIds_data();
144     void testLocalIdFilterManyIds();
145     void testContactFilter_data();
146     void testContactFilter();
147     void testFilterOnContainsSubTypesByClass();
148     void testFilterOnSubTypesByProperty();
149     void testFilterOnContainsSubTypesByNaoProperty();
150     void testFilterOnCustomDetail_data();
151     void testFilterOnCustomDetail();
152     void testFilterOnContactType();
153     void testFilterOnQContactOnlineAccount();
154     void testFilterOnDetailFieldWildcard_data();
155     void testFilterOnDetailFieldWildcard();
156     void testFilterOnDetailExists_data();
157     void testFilterOnDetailExists();
158
159     void testFilterOnDetailFieldValueWithSingleSpaceOrEmptyString_data();
160     void testFilterOnDetailFieldValueWithSingleSpaceOrEmptyString();
161
162     void testFilterInvalid();
163
164     void testIMContactsAndMetacontactMasterPresence();
165     void testIMContactsFiltering();
166     void testContactsWithoutMeContact();
167     void testDefinitionNames();
168     void testMeContact();
169
170     void testDisplayLabelFetch_data();
171     void testDisplayLabelFetch();
172     void testDisplayLabelSynthesized();
173     void testDisplayLabelSynthesizedWithNameOrders_data();
174     void testDisplayLabelSynthesizedWithNameOrders();
175
176     void testSyncTarget_data();
177     void testSyncTarget();
178
179 // NB#161788 and its dependant bugs
180     void testEditCombinations_email();
181     void testEditCombinations_url();
182     void testEditCombinations_address();
183     void testEditCombinations_phone();
184 // end NB#161788
185
186 // NB#173388
187     void testSaveThumbnail_data();
188     void testSaveThumbnail();
189 // end NB#173388
190
191     void testVCardsAndSync_data();
192     void testVCardsAndSync();
193     void testCreateUuid();
194     void testPreserveUID();
195
196     void testFuzzing_data();
197     void testFuzzing();
198
199     void testUnionFilterUniqueness();
200     void testPartialSave_data();
201     void testPartialSave();
202
203     void testFetchingNonQctResourcesAsReadOnlyDetails_data();
204     void testFetchingNonQctResourcesAsReadOnlyDetails();
205     void testNotSavingReadOnlyDetails();
206
207     void testFavorite();
208     void testAnniversary();
209
210 private:
211     // FIXME: Most of the following methods are editStruct methods!!!
212     void setName(editStruct &es, QString first = QString(), QString last = QString());
213     void setEmail(editStruct &es, QString email, QString context = QString());
214     void setUrl(editStruct &es, QString url, QString context = QString(), QString subType = QString());
215     void setPhone(editStruct &es, QString phone, QString context = QString(), QString subType = QString());
216     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());
217     void saveEditsToContact(editStruct &es, QContact &c);
218
219     void verifyEdits(QContact &verify, editStruct &es);
220     void runEditList(QList<editStruct> &editList);
221
222     void syncContactsAddedSinceHelper(QDateTime& start, QList<QContactLocalId>& addedIds);
223
224     uint insertContact(const QString &contactIri, const QString &imId, const QString &imPresence,
225                        const QString &statusMessage, const QString &accountPath,
226                        const QString &protocol = QLatin1String("jabber"),
227                        const QString &serviceProvider = QLatin1String("roads.desert"),
228                        const QString &nameGiven = QLatin1String("Speedy"),
229                        const QString &nameFamily = QLatin1String("Runner"));
230     void updateIMContactStatus(const QString &contactIri, const QString &imStatus);
231     QContact contact(QContactLocalId uid, const QStringList &detailsToLoad = QStringList());
232     QContact contact(const QString &iri, const QStringList &detailsToLoad = QStringList());
233     QList<QContact> contacts(const QList<QContactLocalId> &uids, const QStringList &detailsToLoad = QStringList());
234
235     void testDisplayLabelFetch(const QStringList &definitionHints);
236     QContactTrackerEngineEmulatedV2 *emulatedV2Engine();
237     void fuzzContact(QContact &result, const QStringList &skipDetailDefinitions = QStringList()) const;
238     void fuzzDetailType(QList<QContactDetail> &result, const QString &definitionName) const;
239     void mergeContacts(QContact &contactTarget, const QList<QContactLocalId> &sourceContactIds);
240     void unmergeContact(QContact &contact, const QList<QContactOnlineAccount> &unmergeCriteria, /*out*/ QList<QContactLocalId> &newUnmergedContactIds);
241
242     /// 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,
243     /// then stores and adds these contacts to @p contacts
244     void makeFuzzedSingleDetailFieldContacts(QContactList &contacts,
245                                              const QString &detailName, const QString &fieldName, const QContactDetailFieldDefinition &field,
246                                              const QString &contactType);
247     /// sets the field definitions of @p detailDefinition to @p fields,
248     /// without any for the fields Context and SubType/SubTypes
249     void fieldsWithoutContextAndSubType(QContactDetailFieldDefinitionMap &fields,
250                                         const QString &contactType, const QString &definitionName);
251
252     uint resolveTrackerId(const QString &iri);
253
254 private:
255     QList<QContactLocalId> addedContacts;
256     QContactTrackerEngineEmulatedV2 *m_emulatedV2Engine;
257 };
258
259
260 #endif