|
1 /* |
|
2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * |
|
16 */ |
|
17 #include "ut_logscontact.h" |
|
18 #include "logscontact.h" |
|
19 #include "logsevent.h" |
|
20 #include "logseventdata.h" |
|
21 #include "logsdbconnector.h" |
|
22 #include "logsdbconnector_stub_helper.h" |
|
23 #include "qtcontacts_stubs_helper.h" |
|
24 |
|
25 #include <xqservicerequest.h> |
|
26 #include <QtTest/QtTest> |
|
27 |
|
28 const int logsContactsLocalIdTest1 = 1; |
|
29 const QString logsFetchService = "com.nokia.services.phonebookservices.Fetch"; |
|
30 |
|
31 void UT_LogsContact::initTestCase() |
|
32 { |
|
33 mDbConnector = new LogsDbConnector(mEvents); |
|
34 mLogsContact = 0; |
|
35 } |
|
36 |
|
37 void UT_LogsContact::cleanupTestCase() |
|
38 { |
|
39 delete mDbConnector; |
|
40 } |
|
41 |
|
42 void UT_LogsContact::init() |
|
43 { |
|
44 QtContactsStubsHelper::reset(); |
|
45 mLogsEvent = new LogsEvent(); |
|
46 LogsEventData* eventData = new LogsEventData; |
|
47 mLogsEvent->setLogsEventData(eventData); |
|
48 mLogsEvent->logsEventData()->setContactLocalId(logsContactsLocalIdTest1); |
|
49 mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector); |
|
50 } |
|
51 |
|
52 void UT_LogsContact::cleanup() |
|
53 { |
|
54 delete mLogsContact; |
|
55 mLogsContact = 0; |
|
56 delete mLogsEvent; |
|
57 mLogsEvent = 0; |
|
58 } |
|
59 |
|
60 void UT_LogsContact::testConstructor() |
|
61 { |
|
62 QVERIFY( mLogsContact ); |
|
63 QVERIFY( !mLogsContact->mService ); |
|
64 QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave ); |
|
65 |
|
66 LogsContact contactWithoutEvent("2345", *mDbConnector, 2); |
|
67 QVERIFY( contactWithoutEvent.mContactId == 2 ); |
|
68 QVERIFY( contactWithoutEvent.mNumber == "2345" ); |
|
69 } |
|
70 |
|
71 void UT_LogsContact::testAllowedRequestType() |
|
72 { |
|
73 //Empty event with no matching contact |
|
74 QVERIFY( mLogsContact ); |
|
75 QVERIFY( mLogsContact->allowedRequestType() == LogsContact::TypeLogsContactSave ); |
|
76 |
|
77 //contact is in phonebook, but matching of contact is done only during |
|
78 //construction of mLogsContact, later changes not reflected |
|
79 mLogsEvent->logsEventData()->setContactLocalId(1); |
|
80 QtContactsStubsHelper::setContactId(1); |
|
81 QVERIFY( mLogsContact->allowedRequestType() == LogsContact::TypeLogsContactSave ); |
|
82 |
|
83 //contact is in phonebook => open is allowed |
|
84 delete mLogsContact; |
|
85 mLogsContact = 0; |
|
86 mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector); |
|
87 QVERIFY( mLogsEvent->logsEventData()->contactLocalId() ); |
|
88 QVERIFY( mLogsContact->allowedRequestType() == LogsContact::TypeLogsContactOpen ); |
|
89 |
|
90 //contact not in phonebook, but caller ID present => save allowed |
|
91 QtContactsStubsHelper::reset(); |
|
92 delete mLogsContact; |
|
93 mLogsContact = 0; |
|
94 mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector); |
|
95 QVERIFY( mLogsEvent->logsEventData()->contactLocalId() ); |
|
96 mLogsEvent->setNumber( "123" ); |
|
97 QVERIFY( mLogsContact->allowedRequestType() == LogsContact::TypeLogsContactSave ); |
|
98 } |
|
99 |
|
100 void UT_LogsContact::testOpen() |
|
101 { |
|
102 //contact not in phonebook, can't open |
|
103 QVERIFY( !mLogsContact->mService ); |
|
104 QVERIFY( !mLogsContact->open() ); |
|
105 QVERIFY( !mLogsContact->mService ); |
|
106 QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave ); |
|
107 |
|
108 //contact is in phonebook, open is ok |
|
109 mLogsEvent->logsEventData()->setContactLocalId(2); |
|
110 QtContactsStubsHelper::setContactId(2); |
|
111 delete mLogsContact; |
|
112 mLogsContact = 0; |
|
113 mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector); |
|
114 QVERIFY( mLogsContact->open() ); |
|
115 QVERIFY( mLogsContact->mService ); |
|
116 QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactOpen ); |
|
117 QVERIFY( mLogsContact->mService->service() == logsFetchService ); |
|
118 QVERIFY( mLogsContact->mService->message() == "open(int)" ); |
|
119 |
|
120 // Same but without using logsevent at construction |
|
121 LogsContact contactWithoutEvent("2345", *mDbConnector, 2); |
|
122 QVERIFY( contactWithoutEvent.open() ); |
|
123 QVERIFY( contactWithoutEvent.mService ); |
|
124 QVERIFY( contactWithoutEvent.mCurrentRequest == LogsContact::TypeLogsContactOpen ); |
|
125 QVERIFY( contactWithoutEvent.mService->service() == logsFetchService ); |
|
126 QVERIFY( contactWithoutEvent.mService->message() == "open(int)" ); |
|
127 |
|
128 } |
|
129 |
|
130 void UT_LogsContact::testAddNew() |
|
131 { |
|
132 //no caller ID, contact won't be saved |
|
133 mLogsEvent->setEventType(LogsEvent::TypeVoiceCall); |
|
134 QVERIFY( mLogsEvent->getNumberForCalling().isEmpty() ); |
|
135 QVERIFY( !mLogsContact->addNew() ); |
|
136 QVERIFY( !mLogsContact->mService ); |
|
137 QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave ); |
|
138 |
|
139 //called ID present, contact not in phonebook => save is ok |
|
140 mLogsEvent->setNumber(QString::number(12345)); |
|
141 mLogsEvent->setEventType(LogsEvent::TypeVoiceCall); |
|
142 delete mLogsContact; |
|
143 mLogsContact = 0; |
|
144 mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector); |
|
145 QVERIFY( !mLogsEvent->getNumberForCalling().isEmpty() ); |
|
146 QVERIFY( !mLogsContact->isContactInPhonebook() ); |
|
147 QVERIFY( mLogsContact->addNew() ); |
|
148 QVERIFY( mLogsContact->mService ); |
|
149 QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave ); |
|
150 QVERIFY( mLogsContact->mService->service() == logsFetchService ); |
|
151 QVERIFY( mLogsContact->mService->message() == "editCreateNew(QString,QString)" ); |
|
152 |
|
153 //caller ID present, contact is in phonebook => save is ok |
|
154 mLogsEvent->setEventType(LogsEvent::TypeVoIPCall); |
|
155 mLogsEvent->setNumber(""); |
|
156 mLogsEvent->logsEventData()->mRemoteUrl = "someurl@blah"; |
|
157 mLogsEvent->logsEventData()->setContactLocalId(2); |
|
158 QtContactsStubsHelper::setContactId(2); |
|
159 delete mLogsContact; |
|
160 mLogsContact = 0; |
|
161 mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector); |
|
162 QVERIFY( mLogsContact->isContactInPhonebook() ); |
|
163 QVERIFY( mLogsContact->addNew() ); |
|
164 QVERIFY( mLogsContact->mService ); |
|
165 QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave ); |
|
166 QVERIFY( mLogsContact->mService->service() == logsFetchService ); |
|
167 QVERIFY( mLogsContact->mService->message() == "editCreateNew(QString,QString)" ); |
|
168 } |
|
169 |
|
170 void UT_LogsContact::testUpdateExisting() |
|
171 { |
|
172 //caller ID present, contact is in phonebook => update is ok |
|
173 mLogsEvent->setNumber(QString::number(12345)); |
|
174 mLogsEvent->setEventType(LogsEvent::TypeVoiceCall); |
|
175 mLogsEvent->logsEventData()->setContactLocalId(2); |
|
176 QtContactsStubsHelper::setContactId(2); |
|
177 delete mLogsContact; |
|
178 mLogsContact = 0; |
|
179 mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector); |
|
180 QVERIFY( mLogsContact->isContactInPhonebook() ); |
|
181 QVERIFY( mLogsContact->updateExisting() ); |
|
182 QVERIFY( mLogsContact->mService ); |
|
183 QVERIFY( mLogsContact->mCurrentRequest == LogsContact::TypeLogsContactSave ); |
|
184 QVERIFY( mLogsContact->mService->service() == logsFetchService ); |
|
185 QVERIFY( mLogsContact->mService->message() == "editUpdateExisting(QString,QString)" ); |
|
186 } |
|
187 |
|
188 void UT_LogsContact::testIsContactInPhonebook() |
|
189 { |
|
190 QVERIFY( !mLogsContact->isContactInPhonebook() ); |
|
191 |
|
192 //any changes in phonebook after mLogsContact creation are not reflected |
|
193 mLogsEvent->logsEventData()->setContactLocalId(2); |
|
194 QtContactsStubsHelper::setContactId(2); |
|
195 QVERIFY( !mLogsContact->isContactInPhonebook() ); |
|
196 |
|
197 delete mLogsContact; |
|
198 mLogsContact = 0; |
|
199 mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector); |
|
200 QVERIFY( mLogsContact->isContactInPhonebook() ); |
|
201 |
|
202 // 0 is not valid contact ID |
|
203 mLogsEvent->logsEventData()->setContactLocalId(0); |
|
204 QtContactsStubsHelper::setContactId(0); |
|
205 delete mLogsContact; |
|
206 mLogsContact = 0; |
|
207 mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector); |
|
208 QVERIFY( !mLogsContact->isContactInPhonebook() ); |
|
209 } |
|
210 |
|
211 void UT_LogsContact::testIsContactRequestAllowed() |
|
212 { |
|
213 // contact not in phonebook, caller ID not defined |
|
214 QVERIFY( !mLogsContact->isContactInPhonebook() ); |
|
215 QVERIFY( mLogsEvent->number().isEmpty() ); |
|
216 QVERIFY( mLogsEvent->logsEventData()->remoteUrl().isEmpty() ); |
|
217 QVERIFY( !mLogsContact->isContactRequestAllowed() ); |
|
218 |
|
219 // caller ID is defined, number |
|
220 mLogsEvent->setNumber( "1234" ); |
|
221 delete mLogsContact; |
|
222 mLogsContact = 0; |
|
223 mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector); |
|
224 QVERIFY( mLogsContact->isContactRequestAllowed() ); |
|
225 |
|
226 // caller ID is defined, voip url |
|
227 mLogsEvent->setNumber( "" ); |
|
228 mLogsEvent->logsEventData()->mRemoteUrl = "blah"; |
|
229 mLogsEvent->setEventType( LogsEvent::TypeVoIPCall ); |
|
230 delete mLogsContact; |
|
231 mLogsContact = 0; |
|
232 mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector); |
|
233 QVERIFY( mLogsContact->isContactRequestAllowed() ); |
|
234 |
|
235 // No caller ID, but contact is in phonebook |
|
236 mLogsEvent->logsEventData()->mRemoteUrl = ""; |
|
237 mLogsEvent->logsEventData()->setContactLocalId(1); |
|
238 QtContactsStubsHelper::setContactId(1); |
|
239 delete mLogsContact; |
|
240 mLogsContact = 0; |
|
241 mLogsContact = new LogsContact(*mLogsEvent, *mDbConnector); |
|
242 QVERIFY( mLogsContact->isContactRequestAllowed() ); |
|
243 } |
|
244 |
|
245 void UT_LogsContact::testHandleRequestCompeted() |
|
246 { |
|
247 QSignalSpy spyOpened( mLogsContact, SIGNAL(openCompleted(bool)) ); |
|
248 QSignalSpy spySaved( mLogsContact, SIGNAL(saveCompleted(bool)) ); |
|
249 |
|
250 //open operation finished |
|
251 LogsDbConnectorStubHelper::reset(); |
|
252 mLogsContact->mCurrentRequest = LogsContact::TypeLogsContactOpen; |
|
253 mLogsContact->handleRequestCompleted( QVariant(1) ); |
|
254 QVERIFY( spyOpened.count() == 1 ); |
|
255 QVERIFY( spySaved.count() == 0 ); |
|
256 QVERIFY( LogsDbConnectorStubHelper::lastCalledFunction() == "updateDetails" ); |
|
257 |
|
258 //save operation finished successfully |
|
259 LogsDbConnectorStubHelper::reset(); |
|
260 spyOpened.clear(); |
|
261 spySaved.clear(); |
|
262 mLogsContact->mCurrentRequest = LogsContact::TypeLogsContactSave; |
|
263 mLogsContact->handleRequestCompleted( QVariant(1) ); |
|
264 QVERIFY( spyOpened.count() == 0 ); |
|
265 QVERIFY( spySaved.count() == 1 ); |
|
266 QVERIFY( LogsDbConnectorStubHelper::lastCalledFunction() == "updateDetails" ); |
|
267 |
|
268 //save operation finished unsuccessfully |
|
269 LogsDbConnectorStubHelper::reset(); |
|
270 spyOpened.clear(); |
|
271 spySaved.clear(); |
|
272 mLogsContact->mCurrentRequest = LogsContact::TypeLogsContactSave; |
|
273 mLogsContact->handleRequestCompleted( QVariant(0) ); |
|
274 QVERIFY( spyOpened.count() == 0 ); |
|
275 QVERIFY( spySaved.count() == 1 ); |
|
276 QVERIFY( LogsDbConnectorStubHelper::lastCalledFunction().isEmpty() ); |
|
277 } |